LoginSignup
2

More than 3 years have passed since last update.

【vim-plug】InsertEnterイベントで遅延読み込み

Posted at

前置き

ここ数年プラグインマネージャには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秒くらい速くなりました。
稚拙ですが、どうかご参考程度に。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2