nvim-treesitter を dein.vim で使う
nvim-treesitter を dein.vim の toml 管理下で入れる場合、require('nvim-treesitter.configs').setup
のアレをどこに書けば良いのか迷った
とりえあず問題なく動くようにはなったのでメモ
他にもっと良い方法あるかもしれない
モチベーションとして、toml 管理しているので各 plugin 固有の設定は init.vim ではなく toml に書きたい
最初に書いたのがこれ
nvim-treesitter は普通に考えて lazy にはできなさそうなので non-lazy にしていた
[[plugins]]
repo = 'nvim-treesitter/nvim-treesitter'
merged = 0
hook_post_update = 'TSUpdate'
hook_add = 'source ~/.config/nvim/plugins/nvim-treesitter.lua'
lua 部分は別ファイルに切っているが本論には関係ない
require('nvim-treesitter.configs').setup {
ensure_installed = 'maintained',
highlight = {
enable = true,
},
}
これだと [dein] Vim(source):E5113: Error while calling lua chunk: /home/mkobayashime/.config/nvim/plugins/nvim-treesitter.lua:1: module 'nvim-treesitter.configs' not found:
というエラーが出てしまう
hook_add
は plugin が読み込まれたあとで実行されるわけではないので、nvim-treesitter.confis
なんてものはないと怒られている
読み込まれたあとに実行される hook としては hook_post_source
などがあるが、これは non-lazy な plugin では使えない
hook_post_update
/hook_done_update
も試してみたが、これらは名の通り plugin がアップデートされたときにしか実行されないので、通常時の起動では単にハイライトされなくなってしまった
そこで発想を変えて lazy にしてみることにした
[[plugins]]
repo = 'nvim-treesitter/nvim-treesitter'
merged = 0
on_event = 'BufRead'
hook_post_update = 'TSUpdate'
hook_source = 'source ~/.config/nvim/plugins/nvim-treesitter.lua'
lazy とは言いつつ on_event
に BufRead: starting to edit a new buffer, after reading the file
を指定しているので、起動時やファイルを開いたときには即読み込まれることになる
lazy にしたことで hook_source
/hook_post_source
が利用可能になり、結論から言うと hook_source
の場合のみ望んだ挙動が得られた
hook_source
も source の直前に実行されるわけで、hook_add
と同じように nvim-treesitter.configs
がないはずで、なぜ動くのかはよくわからない
逆に hook_post_source
で動かない理由もよくわからない
詳しい方いれば教えてください
参考文献
Discussion