Vim の起動速度2

前回 Vim の packadd を使って、起動速度改善をした。
その後 MacVim Kaoriya に Timer 機能が追加されたバージョンが出たので、Timer に置き換えた。

.vimrc は以下みたいな感じで定義。

let s:plugins = [
  \ 'vim-l9',
  \ 'vim-fuzzyfinder',
  \ 'vim-fuzzyfinder-plugins',
  \ 'yankround.vim',
  \ ]
let s:idx = 0

function! PackAddHandler(timer)
  execute 'packadd ' . s:plugins[s:idx]
  let s:idx += 1
  "doautocmd BufReadPost
  autocmd! lazy_load_bundle
endfunction

augroup lazy_load_python
  autocmd! VimEnter *.py call timer_start(1, 'LazyLoadPython', {'repeat': 0})
augroup END

augroup lazy_load_filetype
  autocmd! VimEnter *.go,*.js,*.php call timer_start(1, 'LazyLoadFileType', {'repeat': 0})
augroup END

augroup lazy_load_bundle
  autocmd VimEnter * call timer_start(1, 'PackAddHandler', {'repeat': len(s:plugins)})
augroup END

.vim/config/plugins.vim

function! LazyLoadPython(timer) abort
  let _ft = &filetype
  packadd jedi-vim
  packadd pyflakes-vim
  packadd vim-autopep8
  packadd vim-virtualenv

  " Reload autocmd
  exec 'doautoall BufRead'

  " For Quickrun.vim
  exec 'set ft=' . _ft

  autocmd! lazy_load_python
endfunction 

function! LazyLoadFileType(timer) abort
  let _ft = &filetype
  echomsg string(_ft)
  if _ft =~ 'go'
    packadd vim-ft-go
    packadd vim-go-extra
    packadd vim-godef
  elseif _ft =~ 'javascript'
    packadd! vim-javascript
    packadd! vim-jsx
    packadd vim-jsdoc
  elseif _ft =~ 'php'
    packadd vmustache
    packadd pdv
  endif
  exec 'doautoall BufRead'
  " For Quickrun.vim
  exec 'set ft=' . _ft
  autocmd! lazy_load_filetype
endfunction

~/.vim/pack/ftbundle にファイルタイプごとのプラグインを入れている。
ftbundle は Timer を使って、Vim 起動後にバックグラウンドでプラグインを読み込む。


他のプラグインは ~/.vim/pack/bundle/start というところに入れて、起動時に読み込むようにしている。


これで起動速度がどうなったかというと、vim-plug と比べてみた。
vim-plug の速度。

357.614  030.946: opening buffers
359.083  001.469: BufEnter autocommands
359.089  000.006: editing files in windows
359.430  000.341: VimEnter autocommands
359.436  000.006: before starting main loop
360.991  001.555: first screen update
360.993  000.002: --- VIM STARTED ---

packadd の速度。

132.434  030.058: opening buffers
132.907  000.473: BufEnter autocommands
132.913  000.006: editing files in windows
134.438  000.653  000.653: sourcing /Users/s_ohyanagi/.vim/pack/bundle/start/unite.vim/autoload/unite/custom.vim
139.671  004.501  004.501: sourcing /Users/heavenshell/.vim/pack/bundle/start/vim-watchdogs/autoload/watchdogs.vim
143.496  010.225  005.071: sourcing /Users/heavenshell/.vim/config/plugins.vim
143.862  000.724: VimEnter autocommands
143.868  000.006: before starting main loop
145.161  001.293: first screen update

起動速度が大体倍ほど速くなった。