foldの設定が重かったので。。。

vimで、foldを使うと、超コードを読みやすくなる。
foldの機能は、開いているテキスト(コード)を折りたたんでくれる or 自分で設定して折り畳むことができる、というもの

でも、、、

foldmethod=syntax

とか、

foldmethod=expr

とかだと、重い。他のプラグインとの相性も疑ったけど、それ自体がやっぱり重い。

重いと感じるのは、insert modeの時。
入力の遅延を感じるので、そのまま使うことは、text editorとしてNGだろう。

でも落ちたたみたい。
できれば、手動じゃなく、自動でやりたい。

前提

foldするときの好みの追加設定として、foldlevelとfoldnestmaxを指定している。

  • foldlevel
    • どのレベルから折りたたむか。0だと、全て折りたたまれる。
  • foldnextmax
    • どのレベルの深さまで折りたたむか。設定しないとずっと折り畳む。

個人的な好みは、

set foldlevel=1
set foldnestmax=2

対応1:foldmethodを変更

試しに、indent基準で、foldの設定をしてみた

set foldmethod=indent
set foldlevel=1
set foldnestmax=2

いいんだけど、どんなindentにも折りたたまれてしまうの。

対応2:FileTypeを指定

いつもはrubyのコードをいじるので、rubyに限定する。
indentもある程度は基準を持って対応しているので、それほど苦にならない。
それ以外は、manual設定

set foldmethod=manual
autocmd FileType ruby :set foldmethod=indent
autocmd FileType ruby :set foldlevel=1
autocmd FileType ruby :set foldnestmax=2

これだけでも、文字入力の遅延はかなり解消された。

対応3;モードに追従+foldmethod=syntax

で、もうちょっと調べてたら、insert modeの時に、ということを設定している人を発見。
http://d.hatena.ne.jp/thinca/20110523/1306080318

参考にして、間違ってるかも知れないけど、こんな設定にしてみた。

set foldmethod=syntax
set foldlevel=1
set foldnestmax=2

augroup foldmethod-syntax
  autocmd!
  autocmd InsertEnter * if &l:foldmethod ==# 'syntax'
  \                   |   setlocal foldmethod=manual
  \                   | endif
  autocmd InsertLeave * if &l:foldmethod ==# 'manual'
  \                   |   setlocal foldmethod=syntax
  \                   | endif
augroup END

insert modeのときだけ、foldmethod=manualに設定する。
それ以外は、syntax。


やっぱり、自分の使うツールは、使いやすくするために改良を加えないと!