🪟

折り畳み系プラグインを窓から投げ捨てろ(treesitterで代替可能)

に公開

TL;DR

ファイルに対応するパーサさえ入っていれば、このように設定することで折り畳みの自動検出ができる

はじめに

neovim用に公開されているプラグインは多数存在し、中にはIDEのような折り畳みを再現するものもある。

上記のようなプラグインの存在により、Neovimにおける折り畳みの自動検出には専用のプラグインや複雑な設定が必要であると勘違いする人がいるかもしれない。
しかし実際のところ、大抵のユースケースにおいて、この目的はnvim-treesitterのみで解決できる。

設定ファイルの例

具体的には、以下のように書けば良い。

vim.o.foldexpr = "v:lua.vim.treesitter.foldexpr()"
vim.o.foldlevel = 99
vim.o.foldmethod = "expr"
vim.o.foldtext = "" -- 任意; 既定の折り畳み表示が嫌いな人用

vim.treesitter.foldexpr()

これはneovim本体の組み込み関数であり、Luaモジュールの実体はここから参照できる。
つまり、理論上はnvim-treesitterをインストールしなくても構文に基づいた折り畳みの自動検出は可能だということだ。
注意すべき点として、この関数は対象のパーサがインストールされていない場合、折り畳みが存在しないものとして値を返す。したがって、結局のところ事実上は必要ということになる。

おまけ

本テクニックは、以前に紹介したSnaxVimにおいても織り込み済です。
最近の更新でnvim-treesitterのmainブランチにも対応した(masterブランチ用の設定も念の為残しています)ので、移行に手間取っている方はこの機会にぜひご覧ください。反応をいただけると大変励みになります!

🔗 リポジトリ: https://github.com/SnaxVim/SnaxVim

Discussion