Neovimのconfigをluaで書いてみる

自分のNeovimのconfigをluaに書き直してみました。

vimのconfigは以下

github.com

luaで書き直しているconfigは以下

github.com

luaに何故置き換えるのかは、以下のredditのpostが分かりやすかったです。

www.reddit.com

書き直す時にやったこと

まずluavim api周りの構文を調べました。 以下のページを読むと分かると思います。

github.com

keymapを置き換える

例えば以下のようなkeymapを登録していた場合

inoremap <silent> jj <ESC>

以下のようになる

vim.api.nvim_set_keymap('i', 'jj', '<ESC>', { noremap = true, silent = true })

silent = trueなどの情報を別途渡す必要があったり、nvim_set_keymapを呼ぶ必要があるのが若干冗長にはなっています。

autocmdを置き換える

例えば以下のような設定だと

autocmd bufnewfile,bufread *.tsx set filetype=typescriptreact

以下のようになる

vim.cmd('autocmd bufnewfile,bufread *.tsx set filetype=typescriptreact')

上述したguideでも書かれていますが、autocmdはまだサポートされていないようなので、無理矢理vimのcmdを実行して読み込ませるというのをしています。

極論、全部の設定をvim.cmdなどで実行すれば、動きはするのですが、それだと可読性が下がってしまうので極力Neovimが提供しているapiを使うのが良いのかなと思います。

plugin manager

packer.nvimを入れてみました

github.com

設定がluaで書けるのと、遅延読み込みなど機能も十分あるのが良いなと思いました。

packer.nvimについては以下の記事がめちゃめちゃ詳しいです。

qiita.com

思ったこと

luaで書かれたpluginを入れて、luaで設定を書けるので切り替えコストみたいなものは小さくなるので、今後Neovimでluaのpluginを入れていく時には楽になりそうだなと思いました。

その反面、自分でvimに便利機能を生やそうとした時には、まだ実装されていないapiなどがあったりすると少しやりづらい状態にはなっていそうです。でも今でも十分利用はできそうな気がするので、少しトライしてみようと思います。

終わり

LunarVimなど凄いconfigもあるので、参考にしていこうと思います。

github.com