folding

そういや folding をいつの間にか使っていたんだけどこれかなり便利というかいまじゃないと耐えられないものになってきているというか。何が便利って適切な範囲で fold を作ると見るべき場所だけ表示できるようになるってのと scroll 量が圧倒的に小さくなるってことなんだけど。前者は複数 window で同じ buffer を覗くことで代用できるけど狭い画面だとなかなかそれをする気にならんのよね。

でもたしか同じような機能をはじめて Visual Studio の editor で目にしたときは何でこんなめんどくさいことをするんだと思った覚えがあってその後 vim で folding ( 正確には folding を使った script ) を見たときにもそういう先入観があったのであんまりいい印象はなかったはずなんだけどなにがきっかけで使い始めるようになったんだっけ… ? ちょっと思い出せないんだけどとりあえず Visual Studio 系列だと fold の開閉に mouse を握らないといけないみたいなので folding を使おうという気すらおこらなかったというのに対して vim だと z ではじまる normal command を覚えてしまえば楽に扱えるという点が大きい気がする。

で、今のところ使ってるのは modeline で file 毎に設定するか ftplugin で 'foldexpr' を設定するか、というあたりなんだけど :help 'foldmethod' を見てみると他にも色々ある。 syntax で認識させるのは便利そうなのでちょっといじってみる予定。

最後にひとつ注意点なんだけど folding を使った file では以下のような設定をしないと search したときに該当箇所が一発で表示されないので注意が必要。 "zv" は cursor のある位置の fold をすべて展開する normal command ( :help zv ) 。

nnoremap n  nzv
nnoremap N  Nzv
nnoremap *  *zv
nnoremap #  #zv
nnoremap g* g*zv
nnoremap g# g#zv

ただまぁ日常的に使うひとはいいとしても使わないひとが他のひとの書いた folding が使われてる script を開くとどうしようもなくなる可能性があるんだよな…。 .vimrc に set nofoldenable を書いておけばここらへん解決できるとは思うんだけどそもそも folding の存在を知らないひとがそこに気付くかという問題が。 default で 'foldenable' は off になっていてもいい気がしないでもない。