最近の MacVim-KaoriYa で gVim の起動が遅かったので調査してみた。
環境
- OS X El Capitan Version 10.11.6
- MacVim-KaoriYa 20161013
起動処理の経過時間のメッセージをファイルに書き出す方法
--startuptime file_name.log
オプションを付けて gVim を起動し、起動処理をファイルに書き出し調査する。
ちなみに、Vim 起動時の他オプションとして、
引数 | vimrcファイル | プラグイン |
---|---|---|
なし | yes | yes |
-u NONE | no | no |
-u NORC | no | yes |
--noplugin | yes | no |
があるので、自分の .vimrc やプラグイン環境が原因の場合とそうでない場合を切り分けて検証できる。
実際に書き出す
$ gvim test.txt --startuptime before.log
timesinmsecclockself+sourcedself:sourcedscriptclockelapsed:otherlines000.005000.005:---VIMSTARTING---(略)034.969028.270000.935:sourcing$VIM/vimrc036.213000.392000.392:sourcing/Users/user_name/.vim/dein/repos/github.com/Shougo/dein.vim/autoload/dein.vim038.989001.656001.656:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/ftoff.vim039.236002.555000.899:sourcing/Users/user_name/.vim/dein/state_Vim.vim061.339000.473000.473:sourcing/Users/user_name/.vim/dein/.dein/ftdetect/ftdetect.vim061.907000.430000.430:sourcing/Users/user_name/.vim/dein/.dein/ftdetect/ftdetect.vim065.970001.423001.423:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/lang/menu_ja_jp.utf-8.macvim.vim066.055000.025000.025:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/lang/menu_ja_jp.utf-8.vim066.868000.054000.054:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/autoload/paste.vim8456.5698394.3998392.897:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/menu.vim8456.6088417.140021.838:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/filetype.vim8456.790000.021000.021:sourcing/Users/user_name/.vim/dein/.dein/ftplugin.vim8456.858000.008000.008:sourcing/Users/user_name/.vim/dein/.dein/ftplugin.vim8456.908000.010000.010:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/ftplugin.vim8457.087000.010000.010:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/indent.vim(略)8840.837000.003:---VIMSTARTED---
/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/afte
r,
/Users/user_name/.vim/after
で追加で行われるようになっていたので、試しに該当箇所をコメントアウトして gVim を再起動してみた。
修正後
$ gvim test.txt --startuptime after.log
timesinmsecclockself+sourcedself:sourcedscriptclockelapsed:otherlines000.007000.007:---VIMSTARTING---(略)038.875027.662001.341:sourcing$VIM/vimrc039.870000.348000.348:sourcing/Users/user_name/.vim/dein/repos/github.com/Shougo/dein.vim/autoload/dein.vim043.204002.049002.049:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/ftoff.vim043.492002.976000.927:sourcing/Users/user_name/.vim/dein/state_Vim.vim065.683000.461000.461:sourcing/Users/user_name/.vim/dein/.dein/ftdetect/ftdetect.vim066.249000.426000.426:sourcing/Users/user_name/.vim/dein/.dein/ftdetect/ftdetect.vim069.583001.117001.117:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/lang/menu_ja_jp.utf-8.macvim.vim069.648000.022000.022:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/lang/menu_ja_jp.utf-8.vim070.482000.056000.056:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/autoload/paste.vim086.663020.146018.951:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/menu.vim086.698042.970021.937:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/filetype.vim086.949000.020000.020:sourcing/Users/user_name/.vim/dein/.dein/ftplugin.vim087.032000.009000.009:sourcing/Users/user_name/.vim/dein/.dein/ftplugin.vim087.089000.012000.012:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/ftplugin.vim087.280000.010000.010:sourcing/Applications/MacVim.app/Contents/Resources/vim/runtime/indent.vim(略)455.765000.002:---VIMSTARTED---
起動時間が9秒未満から0.5秒未満に減った!
一時的な対処法まとめ
MacVim-KaoriYa 20161013 にて、/Applications/MacVim.app/Contents/Resources/vim/runtime/menu.vim の 395 行目の
lets:n .= globpath(&packpath,"pack/*/{opt,start}/*/colors/*.vim")
をコメントアウトすると gVim の起動時の遅さが改善される。
ただし、コメントアウトするとパッケージ1ディレクトリ以下のカラースキームがメニューバーの Edit > Color Scheme
に表示されないままになる。
MacVim への Issue は、 MacVim-KaoriYa ではなく MacVim にて確認次第 Issue を立てる予定。
Vim 8.0 にて追加された機能。 ↩