最近の MacVim-KaoriYa で gVim の起動が遅かったので調査してみた。
環境
- OS X El Capitan Version 10.11.6
- MacVim-KaoriYa 20161013
起動処理の経過時間のメッセージをファイルに書き出す方法
--startuptime file_name.log
オプションを付けて gVim を起動し、起動処理をファイルに書き出し調査する。
ちなみに、Vim 起動時の他オプションとして、
引数 | vimrcファイル | プラグイン |
---|---|---|
なし | 読み込む | 読み込む |
-u NONE | 読み込まない | 読み込まない |
-u NORC | 読み込まない | 読み込む |
--noplugin | 読み込む | 読み込まない |
があるので、自分の .vimrc やプラグイン環境が原因の場合とそうでない場合を切り分けて検証できる。
実際に書き出す
$ gvim test.txt --startuptime before.log
times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.005 000.005: --- VIM STARTING ---
(略)
034.969 028.270 000.935: sourcing $VIM/vimrc
036.213 000.392 000.392: sourcing /Users/user_name/.vim/dein/repos/github.com/Shougo/dein.vim/autoload/dein.vim
038.989 001.656 001.656: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/ftoff.vim
039.236 002.555 000.899: sourcing /Users/user_name/.vim/dein/state_Vim.vim
061.339 000.473 000.473: sourcing /Users/user_name/.vim/dein/.dein/ftdetect/ftdetect.vim
061.907 000.430 000.430: sourcing /Users/user_name/.vim/dein/.dein/ftdetect/ftdetect.vim
065.970 001.423 001.423: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/lang/menu_ja_jp.utf-8.macvim.vim
066.055 000.025 000.025: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/lang/menu_ja_jp.utf-8.vim
066.868 000.054 000.054: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/autoload/paste.vim
8456.569 8394.399 8392.897: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/menu.vim
8456.608 8417.140 021.838: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/filetype.vim
8456.790 000.021 000.021: sourcing /Users/user_name/.vim/dein/.dein/ftplugin.vim
8456.858 000.008 000.008: sourcing /Users/user_name/.vim/dein/.dein/ftplugin.vim
8456.908 000.010 000.010: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/ftplugin.vim
8457.087 000.010 000.010: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/indent.vim
(略)
8840.837 000.003: --- VIM STARTED ---
/Applications/MacVim.app/Contents/Resources/vim/runtime/menu.vim の読み込みに非常に時間が掛かっていることが分かる。
調査
以前は起動に1秒も掛かっていなかったので https://github.com/macvim-dev/macvim
の直近のコミットログを辿ったところ、https://github.com/macvim-dev/macvim/pull/331/files にて読み込みに時間が掛かりそうな
+let s:n .= globpath(&packpath, "pack/*/{opt,start}/*/colors/*.vim")
の差分があった。
カラースキーム読み込みの走査が、 :echo &packpath
によると
/Users/user_name/.vim,
/Applications/MacVim.app/Contents/Resources/vim/vimfiles,
/Applications/MacVim.app/Contents/Resources/vim/runtime,
/Applications/MacVim.app/Contents/Resources/vim/vimfiles/after,
/Users/user_name/.vim/after
で追加で行われるようになっていたので、試しに該当箇所をコメントアウトして gVim を再起動してみた。
修正後
$ gvim test.txt --startuptime after.log
times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.007 000.007: --- VIM STARTING ---
(略)
038.875 027.662 001.341: sourcing $VIM/vimrc
039.870 000.348 000.348: sourcing /Users/user_name/.vim/dein/repos/github.com/Shougo/dein.vim/autoload/dein.vim
043.204 002.049 002.049: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/ftoff.vim
043.492 002.976 000.927: sourcing /Users/user_name/.vim/dein/state_Vim.vim
065.683 000.461 000.461: sourcing /Users/user_name/.vim/dein/.dein/ftdetect/ftdetect.vim
066.249 000.426 000.426: sourcing /Users/user_name/.vim/dein/.dein/ftdetect/ftdetect.vim
069.583 001.117 001.117: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/lang/menu_ja_jp.utf-8.macvim.vim
069.648 000.022 000.022: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/lang/menu_ja_jp.utf-8.vim
070.482 000.056 000.056: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/autoload/paste.vim
086.663 020.146 018.951: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/menu.vim
086.698 042.970 021.937: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/filetype.vim
086.949 000.020 000.020: sourcing /Users/user_name/.vim/dein/.dein/ftplugin.vim
087.032 000.009 000.009: sourcing /Users/user_name/.vim/dein/.dein/ftplugin.vim
087.089 000.012 000.012: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/ftplugin.vim
087.280 000.010 000.010: sourcing /Applications/MacVim.app/Contents/Resources/vim/runtime/indent.vim
(略)
455.765 000.002: --- VIM STARTED ---
起動時間が9秒未満から0.5秒未満に減った!
一時的な対処法まとめ
MacVim-KaoriYa 20161013 にて、/Applications/MacVim.app/Contents/Resources/vim/runtime/menu.vim の 395 行目の
let s:n .= globpath(&packpath, "pack/*/{opt,start}/*/colors/*.vim")
をコメントアウトすると gVim の起動時の遅さが改善される。
ただし、コメントアウトするとパッケージ1ディレクトリ以下のカラースキームがメニューバーの Edit > Color Scheme
に表示されないままになる。
MacVim への Issue は、 MacVim-KaoriYa ではなく MacVim にて確認次第 Issue を立てる予定。
MacVim-KaoriYa の作者さんが https://github.com/macvim-dev/macvim/issues/351#issuecomment-253965457 にコメントしていただいたのでそちらで様子見中。
最終的にこの機能はRevertされ、 https://github.com/macvim-dev/macvim/pull/385 の代替実装で解消されることになりました。
いずれ、この処理を行わずとも起動時間の遅さが解消されるものと思われます。
-
Vim 8.0 にて追加された機能。 ↩