Merlin は OCaml のための Vim や Emacs から利用可能な補完機能を提供しています. デフォルトの Vim プラグインのインストール方法では, Vim の起動速度に悪影響を与えるため, プラグインマネージャー dein.vim を用いて遅延読み込みする方法を紹介します.
Merlin のセットアップ
Merlin は OPAM を使うと簡単にインストールできます.
opam install merlin
Merlin のインストールが完了すると, 次のような Vim のセットアップ手順が表示されます.
Quick setup for VIM
-------------------
Append this to your .vimrc to add merlin to vim's runtime-path:
let g:opamshare = substitute(system('opam config var share'),'\n$','','''')
execute "set rtp+=" . g:opamshare . "/merlin/vim"
Also run the following line in vim to index the documentation:
:execute "helptags " . g:opamshare . "/merlin/vim/doc"
この手順に従い, 以下を .vimrc
等に追記します.
let g:opamshare = substitute(system('opam config var share'),'\n$','','''')
execute "set rtp+=" . g:opamshare . "/merlin/vim"
次に補完用のプラグインから Merlin を使うための設定を追加します. ここでは neocomplete.vim を利用します.
if !exists('g:neocomplete#sources#omni#input_patterns')
let g:neocomplete#sources#omni#input_patterns = {}
endif
let g:neocomplete#sources#omni#input_patterns.ocaml = '[^. *\t]\.\w*\|\h\w*|#'
ここまでの設定が終わると, neocomplete を通じて Merlin の補完機能を利用できます.
起動速度への影響
execute "set rtp+=" . g:opamshare . "/merlin/vim"
のようにして Vim プラグインを読み込むと, ファイル形式に関わらずこのプラグインが読み込まれるため, 少なからず起動速度に影響があります.
vim --startuptime
を利用して起動速度を計測したところ, Merlin 導入前の起動速度が約100msだったところが, Merlin 導入後は約130msとなっていました. 約30msは体感できる程度の違いがあります.
dein.vim を使った読み込み
dein#add
は引数として, GitHub 等のリポジトリだけでなく, ローカルのパスも指定できます. execute "set rtp+=" . g:opamshare . "/merlin/vim"
の部分を以下のように書き換えると, dein.vim を通して Merlin を読み込めます.
call dein#add(g:opamshare . "/merlin/vim")
さらに, オプションを指定することで, filetype が OCaml で insert mode に入ったタイミングでプラグインを読み込むように設定できます.
call dein#add(g:opamshare . "/merlin/vim", {'lazy': 1, 'on_ft': 'ocaml', 'on_event': 'InsertEnter'})
遅延読み込みを行うことで, Vim の起動時間を再び約100ms程度に戻すことができました.
まとめ
-
dein#add
はローカルのパスを指定してプラグインを読み込むことができる. - プラグインが推奨している設定方法ではなく dein.vim を用いることで, 遅延読み込みやキャッシュを利用して, 起動速度の高速化を実現できる.