vim pluginのbackground loading
最近vimに追加されたpackages
、timer
を使ってvimが起動した後にプラグインの読み込みができたらどうだろう?
と思ったのでやってみました。
以下のような設定をvimrcに追加してvimを起動するとvimが立ち上がってからプラグインが読み込まれます。
" vim起動後に~/.vim/pack/bundle/opt/vim-quickrunを読み込む例 let s:plugins = [ \ 'vim-quickrun', \ ] let s:idx = 0 function! PackAddHandler(timer) execute 'packadd ' . s:plugins[s:idx] let s:idx += 1 endfunction autocmd VimEnter * call timer_start(1, 'PackAddHandler', {'repeat': len(s:plugins)})
約150個のプラグインある状態のMacVim-KaoriYaで、起動時間が
- NeoBundle: 約530ms
- background loading: 約130ms
と、だいぶ高速化されました。
ただし、
packages
の仕様*1で読み込まれないプラグインがあったり、- 追記(2016-03-21)
textobj-userはruntime! plugin/textobj/*.vim
operator-userはruntime! plugin/operator/*.vim
をPackAddHandler
で実行すると読み込める
- 追記(2016-04-03)
- 7.4.1699からはサブディレクトリの.vimも読み込まれるようになったので
runtime!
は不要
- 7.4.1699からはサブディレクトリの.vimも読み込まれるようになったので
- 追記(2016-03-21)
- 起動時に指定したファイルのfiletypeが(ファイルを開いた後に読み込まれるので)反映されなかったり、
- 追記(2016-03-21)
PackAddHandler
でdoautocmd BufReadPost
を実行すると反映される
- 追記(2016-03-21)
- 引数の
-c
で指定したコマンドが(実行後に読み込まれるので)失敗したり、
するので有効に使うには色々と考えないといけなさそうです。
が 4月9日(土) に発売されます。
技術評論社さんのサイトにも来週にはページができるそうなのでできました。 gihyo.jp
興味のある人はチェックしてみてください。