Vim、Ruby編集時にinsert modeが異常に重くなる現象の解決方法

概要

  • Vimにおいて
  • Ruby編集時に(filetype=ruby)
  • foldmethod=syntaxを指定していて
  • 括弧の対応が取れていない状態で
  • Insertモードで文字入力すると

すごく重い。ファイルのサイズが大きい場合に顕著。

# ...

loop {
  array=[1,2, # たとえばこのへんで入力してるとき
}

# ...

原因

matchitとかmatchparenあたりかと思ったが違った。

very slow insert mode in classes · Issue #8 · vim-ruby/vim-ruby · GitHub
結論としては、 foldmethod=syntax に設定してるのが原因。

解決方法

Insert modeのときはfoldmethodを変更する事で解決する。

私は以下の設定を使いました。
Keep folds closed while inserting text | Vim Tips Wiki | FANDOM powered by Wikia

" Don't screw up folds when inserting text that might affect them, until
" leaving insert mode. Foldmethod is local to the window. Protect against
" screwing up folding when switching between windows.
autocmd InsertEnter * if !exists('w:last_fdm') | let w:last_fdm=&foldmethod | setlocal foldmethod=manual | endif
autocmd InsertLeave,WinLeave * if exists('w:last_fdm') | let &l:foldmethod=w:last_fdm | unlet w:last_fdm | endif