概要
普段の開発で vim を利用しておりますが、業務でPHPの1ファイルで6000 ~ 7000行ほどプログラムを触った際に異常な遅さを体験したので、そのログを残す
環境
CPU: Apple M1 Max
Memory: 64GB
OS: Mac OS X 14.2.1
Vim: 9.0
PHP: 8.0
状態
PHP のファイルを開いた時、インサートモードに変更した時、インサートモードを抜けた時に体感1秒位のラグを感じる
vim の設定
検証時はプラグインを全て無効にしており、下記内容を全てコメントアウトすることで速度が改善されたためVimの折りたたみ機能が特別遅いものだと判断
- PHPファイルはMethod名が表示されるレベルに設定
- インサートモードに入る際に
foldmethod
をmanual
に変更 - インサートモードから戻る際に
foldmethod
をもとに戻す- これは入力しながら解析すると入力のラグが大きく使い物にならなかったため設定
autocmd FileType php setlocal foldmethod=syntax foldlevel=1 foldnestmax=3
let php_folding = 1
" Insert Mode では foldmethod を manual に設定する
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
結論
foldmethod=syntax
で数千行のプログラムを扱うと、モード切替がストレスになるレベルの遅延が発生する
そのため折りたたみ機能は使わないようにしたが、実際に速度解析や設定の比較を行ったわけではないので、ストレスを感じない設定が見つかったら利用してみたいと思う
ちなみに foldmethod=indent
も fondmethod=syntax
ほどではないがストレスを感じた
foldmethod=manual
であれば使っても良いのかもしれないが、数千行レベルのコードを手動で設定することはないので、有っても無くても変わらないと判断したため折りたたみ機能自体を無効化した