🌈

nvim-treesitter を dein.vim で使う

2022/02/11に公開

nvim-treesitterdein.vim の toml 管理下で入れる場合、require('nvim-treesitter.configs').setup のアレをどこに書けば良いのか迷った

とりえあず問題なく動くようにはなったのでメモ
他にもっと良い方法あるかもしれない

モチベーションとして、toml 管理しているので各 plugin 固有の設定は init.vim ではなく toml に書きたい

最初に書いたのがこれ
nvim-treesitter は普通に考えて lazy にはできなさそうなので non-lazy にしていた

dein.toml
[[plugins]]
repo = 'nvim-treesitter/nvim-treesitter'
merged = 0
hook_post_update = 'TSUpdate'
hook_add = 'source ~/.config/nvim/plugins/nvim-treesitter.lua'

lua 部分は別ファイルに切っているが本論には関係ない

nvim-treesitter.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 にしてみることにした

dein_lazy.toml
[[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_eventBufRead: 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 で動かない理由もよくわからない

詳しい方いれば教えてください

参考文献

https://github.com/Shougo/dein.vim/blob/master/doc/dein.txt

https://qiita.com/delphinus/items/cd221a450fd23506e81a

http://vimdoc.sourceforge.net/htmldoc/autocmd.html

Discussion