🚗

Neovimのコメンティングプラグインの選び方

2024/09/16に公開

コメンティングプラグインとは

この記事ではコメントアウト/アンコメントを手軽に実現するプラグインをコメンティングプラグインと呼びます。

動いてる様子を見た方がわかりやすいので、Reactでよく見たソースコードでのデモをご覧ください。

demo

便利そうですね。

必要なプラグイン

デモと同じ動作をするためには、2種類のプラグインが必要です。
1つ目はコメンティングプラグイン。
もう1つは文脈に応じてコメント用の文字列(:h 'commentstring')を更新するプラグインです。
デモではTypeScript部分を//でコメントアウトし、JSX部分を{/* */}でコメントアウトしていることがわかります。

結論

解説を初めると長くなるので、先に結論を書きます。

行コメントができれば十分な場合、Neovim組込みの機能(:h commenting)とts-comments.nvimを組み合わせて使うと良いでしょう。

ブロックコメントなど、より高度な機能が必要な場合は、nvim-ts-context-commentstringと、対応しているコメンティングプラグイン(Comment.nvimなど)を選びましょう。

執筆時点の私の設定は以下です。

https://github.com/yuys13/dotfiles/blob/7f414819fac660641f1e7ebd8c2b7d31f38c7e56/home/XDG_CONFIG_HOME/nvim/lua/rc/plugins/nvim-treesitter.lua#L130-L151

私の設定の補足

私はlazyのsetup時にdefaults = { lazy = true }を指定しているため、nvim-ts-context-commentstringはlazy = trueです。

コメンティングプラグインの選び方

プラグインの選び方と言いましたが、まずは:h commentingを読みましょう。ここに書いてある機能で十分ならば、プラグインは不要です。
ts-commentsをインストールして完成です。

上記で満足できない場合、nvim-ts-context-commentstringのConfigurationに挙げられているプラグインから選びましょう。
私はプロジェクトによって行コメントとブロックコメントを使いわける必要があったので、Comment.nvimを愛用しています。

ts-comments.nvimとnvim-ts-context-commentstringの違い

どちらもtreesitterを用いてcommentstringを計算する点は同じです。
ts-comments.nvimはvim.filetype.get_optionという関数を上書きすることにより、commentstringを取得する際に動的に計算しています。

一方のnvim-ts-context-commentstringはcommentstringの計算機能を提供しています。
デフォルトではautocmdによってcommentstringを更新します。
このプラグインが真価を発揮するのはautocmdを無効化してコメンティングプラグインと組み合わせた時です。
様々なコメンティングプラグインに対する連携機能が用意されており、コメンティングプラグインの豊富な機能と文脈によるcommentstringの変更を両立します。
Neovim組込みのコメント機能との連携方法も記載されていますが、ts-comments.nvimの一部を自分で実装するのと同義なので、ts-comments.nvimを使う方が良いでしょう。

GitHubで編集を提案

Discussion