(vim + mini.comment 編と書いたが、別に他パターンを書く予定はない)
割と手間取ったのでメモとして残しておきます。他の人の参考にもなりそうなので
結構無理やりな方法を取ったので、もっとスマートなやり方がありそうですが…
ポイント: hooks.pre で filetype を切り替える + vue の commentstring を設定する
こんな感じの基本方針のもと実装しました。
- コメントアウト処理の直前に filetype をカーソル行のものに変更
- コメントアウト処理が走る
- 処理が終わったらもとに戻す
以下がコードです (パッケージマネージャーは packer.nvim)
use 'Shougo/context_filetype.vim' use { 'echasnovski/mini.comment', config = function() require 'mini.comment'.setup { hooks = { pre = function() -- context_filetype プラグインを使って、カーソル行の filetype を取得している。 vim.cmd('noa setfiletype ' .. vim.fn['context_filetype#get_filetypes']()[1]) end, post = function() -- コメントアウト処理が終わったので元に戻す vim.cmd 'filetype detect' end } } end }
ポイントは noa setfiletype
です。noa なしで setfiletype
としてしまうと、LSP が起動してしまいます。LSP が動くと余計なシンタックスエラーが表示されてウザったいので noa
をつけて不要な autocmd が動かないようにしてます。
ただ、これでは不十分です。実は mini.comment はそのままだと vue テンプレートのコメントアウトができません(多分。あまりよく調べてない)。そこで、自力で commentstring を設定する必要があります
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, { pattern = '*.vue', command = 'setlocal commentstring=<!--%s-->' })
これでコメントアウトできるようになります