ひとりdotfiles Advent Calendar 2023
たぶん毎日たくさんは書かないのでスクラップでやる
開始前(11/30)の状態
目標としては普段の開発をNeovimで完結できるようにLSPとか入れることと、CIを書くこと、サーバ側の設定もすることなど。ゆるくやります
GitHubはこちら
この投稿はひとりdotfiles Advent Calendar 2023の1日目です。
今日は以下に取り組みましたのでそれについて説明します。
- Neovim、zshで矢印キーを無効にする
- 慣れておらず無意識に手が伸びてしまうため
- Gitのコミットに署名できるようにする
矢印キーを無効にする
まず、zshではbindkey -r
を用いることで特定のキーバインドを無効にできます。
ターミナルによってシーケンスが異なることがあるので、矢印キーはcat
コマンドで標準入力を待ち受けて確かめます。
$ cat
^[[A^[[B^[[D^[[C
それをそのままzshrc
に追記しました。
bindkey -r "^[[A"
bindkey -r "^[[B"
bindkey -r "^[[C"
bindkey -r "^[[D"
その結果、以下のようにzsh上で矢印キーが無効になりました。emacs keybindを有効にしているので、^F
,^B
で前後に移動できます。tmuxのprefixとして^A
を設定しているので、行頭に戻るのに2度入力する必要があり、これはどうすれば良いのかなと思っています。
Neovimでは以下のように記述することで矢印キーを無効化できます。
noremap <Up> <Nop>
noremap! <Up> <Nop>
noremap <Down> <Nop>
noremap! <Down> <Nop>
noremap <Left> <Nop>
noremap! <Left> <Nop>
noremap <Right> <Nop>
noremap! <Right> <Nop>
noremap!
は挿入モード、コマンドラインモードにおいて無効化するような設定です。
これでNeovimについても矢印キーを無効にすることができました。
Gitのコミットに署名する
gnupgをインストールして鍵を作って公開鍵をGitHubに登録したら署名されるようになりました。programs.git.userName
などを設定しているのに反映されていなかったのは謎。
1つ目のコミットはメールアドレスの不一致で認証に失敗している。
終わりに
あとは所用があってOCamlのLSPを用意して動きはしましたがコピペで中身を全然理解できていないので、この辺を読んで自分でLuaに書き直す回などがあってもいいなと思っています。初日から遅刻したので今日はこの辺で
この投稿はひとりdotfiles Advent Calendar 2023の2日目です。
今日は以下に取り組みましたのでそれについて説明します。
- nvim-lspconfigの設定について眺めてLuaで書き直した
- Telescopeへの設定を追加した
nvim-lspconfig
マニュアルに従って最低限動作する環境が以下になります。
local nvim_lsp = require('lspconfig')
local on_attach = function (client, bufnr)
end
nvim_lsp.ocamllsp.setup {
on_attach = on_attach;
}
ここからon_attach
関数内にキーバインドなどを色々追加しました
local nvim_lsp = require('lspconfig')
local options = {
noremap = true,
silent = true,
}
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, options)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, options)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, options)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, options)
local on_attach = function(_, bufnr)
local buffer_options = {
noremap = true,
silent = true,
buffer = bufnr
}
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, buffer_options)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, buffer_options)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, buffer_options)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, buffer_options)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, buffer_options)
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, buffer_options)
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, buffer_options)
vim.keymap.set('n', '<space>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, buffer_options)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, buffer_options)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, buffer_options)
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, buffer_options)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, buffer_options)
vim.keymap.set('n', '<space>f', function()
vim.lsp.buf.format {
async = true
}
end, buffer_options)
end
nvim_lsp.ocamllsp.setup {
on_attach = on_attach,
capabilities = capabilities,
}
nvim_lsp.lua_ls.setup {
on_attach = on_attach,
capabilities = capabilities,
settings = {
Lua = {
diagnostics = {
globals = { 'vim' }
}
}
}
}
nvim_lsp.vimls.setup {
on_attach = on_attach,
capabilities = capabilities,
}
nvim_lsp.nim_langserver.setup {
on_attach = on_attach,
capabilities = capabilities,
}
nvim_lsp.rust_analyzer.setup {
on_attach = on_attach,
capabilities = capabilities,
}
nvim_lsp.nil_ls.setup {
on_attach = on_attach,
capabilities = capabilities,
}
所要でOCamlを書いているのでそれと、dotfilesで使うのでLua、VimScript、NixのLSP、あと普段使いのためにNimとRustのLSPを入れました。
感動。定義ジャンプとかrenameとかもできるので本当に快適になりました。
Telescopeへの設定を追加
キーマップに追加しただけなのでコードは省略しますが、Ctrl+Pでファジーファインダーが呼べるようになってこの辺りで普段使いしているVSCodeと機能的な面では変わらなくなった[1]ので、あとは私がキーバインドを暗記するかどうかにかかってきました。
終わりに
便利になってきた
-
VSCodeについて全然知らない。色が付くエディタだと思っている節もある ↩︎
この投稿はひとりdotfiles Advent Calendar 2023の3日目です(遅刻)。
今日は以下に取り組みましたのでそれについて説明します。
- shellcheckの導入
shellcheck
shellcheckはシェルスクリプトを静的に検査するためのツールです。適用する前に実行するスクリプトが安全であるかを確かめたかったことが動機です。
検査した結果、completationで定義していたローカル変数がトップレベルで定義できないことがわかったので、main
関数に閉じ込めて、かつ不使用変数を扱うために連想配列に変換しました。
終わりに
今日は予定があり時間がなかったので簡単にこれで終わります
この投稿はひとりdotfiles Advent Calendar 2023の4日目です。
今日は以下に取り組みました。
- barbar-nvimの導入
- Alacrittyのキーバインドを調整
barbar-nvim
barbar-nvimはNeovimにタブを追加するためのプラグインです。
基本的には他のプラグインと同じように設定するだけなのですが、macOSはOptionキーをメタキーとして扱っており、例えば Option+b で ∫ と入力されます。しかし、この挙動によってNeovimに対してAltキーを含むキーバインドを設定すると上手く動作しません。
そこで、次のようにAlacrittyのキーバインドを調整しました。
Nix側でもエスケープされて \\x1ba
がYAMLに変換されると \x1ba
と設定されます。最初は素直に \x1ba
と設定していましたがOptionキーを含む入力がすべて壊れました。
終わりに
Atom→VSCodeと変遷してきたのでタブに慣れており、Neovimを使い始めてからタブを複数持つことがなかったのですごく使いやすくなった気がします。キーバインドも覚えやすいので徐々に一日のうちNeovimを使う時間が増えてきました。