0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

vim の折りたたみ機能は実用に耐えない

Posted at

概要

普段の開発で 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名が表示されるレベルに設定
  • インサートモードに入る際に foldmethodmanual に変更
  • インサートモードから戻る際に foldmethod をもとに戻す
    • これは入力しながら解析すると入力のラグが大きく使い物にならなかったため設定
.vimrc
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=indentfondmethod=syntax ほどではないがストレスを感じた
foldmethod=manual であれば使っても良いのかもしれないが、数千行レベルのコードを手動で設定することはないので、有っても無くても変わらないと判断したため折りたたみ機能自体を無効化した

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?