前置き
ここ数年プラグインマネージャにはvim-plugを使わせてもらってますが、
遅延読み込みの種類が少ないのが難点でした。
neobundleの様なInsertEnterで発火する遅延読み込みが欲しい!と思い
Githubのプルリクを見てみると、既にイベント(autocommand)で遅延読み込みするプルリクを作成している方がいらっしゃいました。
それが2017年の事・・vim-plugの作者のjunegunn氏はInsertEnterやCursorHold等のイベントで発火する遅延読み込みには懐疑的なようです。
しかし、そんな我々にjunegunn氏は光を授けて下さっていました。(https://github.com/junegunn/vim-plug/issues/48#issuecomment-51688885)
環境
- vim 8.1
- vim-plug
InsertEnterで遅延読み込み
vim起動時にはプラグインを読み込ませず、初めてインサートモードに入った瞬間にプラグインのロードをする設定です。
call plug#begin('~/.vim/plugged')
Plug 'Shougo/deoplete.nvim', { 'on': [] }
Plug 'roxma/nvim-yarp', { 'on': [] }
Plug 'roxma/vim-hug-neovim-rpc', { 'on': [] }
Plug 'ujihisa/neco-look', { 'on': [] }
Plug 'Shougo/neco-syntax', { 'on': [] }
Plug 'Shougo/neosnippet.vim', { 'on': [] }
Plug 'Shougo/neosnippet-snippets', { 'on': [] }
call plug#end()
" Load Event
augroup load_us_insert
autocmd!
autocmd InsertEnter * call plug#load(
\ 'vim-hug-neovim-rpc',
\ 'nvim-yarp',
\ 'neco-syntax',
\ 'neco-look',
\ 'deoplete.nvim',
\ 'neosnippet.vim',
\ 'neosnippet-snippets',
\ )| autocmd! load_us_insert
augroup END
これで、まだインサートモードに入っていない状態でPlugStatusするとnot loadedとなり
一度インサートモードに入った後はOKと表示されていると思います。
deopleteが特に起動時に遅かったので、これでだいぶ速くなりました。
CursorHoldで遅延読み込み
カーソルが一定時間静止していると発火するイベントです。
こちらも上と同じように記述出来ます。
" CursorHold 判定までの時間
set updatetime=250
call plug#begin('~/.vim/plugged')
Plug 'tomtom/tcomment_vim', { 'on': [] }
Plug 'itchyny/vim-cursorword', { 'on': [] }
Plug 'vimtaku/hl_matchit.vim', { 'on': [] }
call plug#end()
" Load Event
augroup load_us_hold
autocmd!
autocmd CursorHold * call plug#load(
\ 'hl_matchit.vim',
\ 'vim-cursorword',
\ 'tcomment_vim',
\ )| autocmd! load_us_hold
augroup END
updatetimeでCursorHoldと判定される時間を指定出来ます。
vim起動後に250ミリ秒カーソルを動かさずにいるとプラグインが読み込まれます。
イベントは他にも沢山あるので、色んなイベントに応じて遅延読み込みさせることも出来そうですね。
vimのタイマー機能で遅延読み込み
最近?vimに追加された機能で、vim起動後の一定時間後に発火させることが出来ます。
call plug#begin('~/.vim/plugged')
Plug 'tiagofumo/vim-nerdtree-syntax-highlight', { 'on': [] }
Plug 'tak3228/auto_blank_out', { 'on': [] }
Plug 'tak3228/eco_cursorline', { 'on': [] }
Plug 'Raimondi/delimitMate', { 'on': [] }
call plug#end()
" Load Event
function! s:load_plug(timer)
call plug#load(
\ 'delimitMate',
\ 'auto_blank_out',
\ 'eco_cursorline',
\ 'vim-nerdtree-syntax-highlight',
\ )
endfunction
" 500ミリ秒後にプラグインを読み込む
call timer_start(500, function("s:load_plug"))
vim起動後、500ミリ秒後にプラグインが読み込まれます。
まとめ
vimの起動が2,3秒くらい速くなりました。
稚拙ですが、どうかご参考程度に。