neocomplcache から neocomplete.vim へ乗り換える

現在 neocomplcache は開発が neocomplete.vim へと移っており,保守のみが行われている状態です.しかし,neocomplcache は結構細かく設定していたりして移行に手間取りそうで二の足を踏んでいる人も多いのではないでしょうか.僕もそうだったのですが,今日時間が取れたので乗り換えてみたところ,乗り換えはとてもスムーズに出来ました.

neocomplcache の設定を受け継いでとりあえず移行する

Github の wiki に neocomplcache と neocomplete の API の対応表があり,それを見比べて neocomplete にも同じ設定を行うだけです.

neocomplete migration guide

neocomplcache の設定をコピペしてきて,対象範囲を :s/neocomplcache_/neocomplete#/g してから始めるとさらに楽です.

if_lua でない環境では neocomplcache を使いたい

neocomplete は if_lua が無かったり,7.3.885 以前の Vim では動作しないので,その場合に neocomplcache にフォールバックするように設定します.neobundle.vim を使っている場合,runtimepath にプラグインを入れず管理だけする NeoBundleFetch があるため簡単に出来ます.

function! s:meet_neocomplete_requirements()
    return has('lua') && (v:version > 703 || (v:version == 703 && has('patch885')))
endfunction

if s:meet_neocomplete_requirements()
    NeoBundle 'Shougo/neocomplete.vim'
    NeoBundleFetch 'Shougo/neocomplcache.vim'
else
    NeoBundleFetch 'Shougo/neocomplete.vim'
    NeoBundle 'Shougo/neocomplcache.vim'
endif


if s:meet_neocomplete_requirements()
    " 新しく追加した neocomplete の設定
else
    " 今までの neocomplcache の設定
endif

この時点で僕は if_lua による補完速度の向上を体感出来ました.

新機能については help を読みつつぼちぼち設定

とりあえず以前と同じように使えるようになればあとは焦ることは無いのでゆっくり設定を考えます.

neocomplete では,lua を用いた処理の高速化により,デフォルトで fuzzy マッチングがオンになっています.fuzzy マッチングでは,今までの単語の先頭からのマッチングだけでなく,単語と部分的にマッチする語も検索することが出来るようになります. neocomplcache のときの fuzzy マッチングは重くて OFF にしていましたが,neocomplete では実用レベルの速度で補完できます. なお,以前のような prefix マッチングが良ければ,もちろん fuzzy マッチングはオフにすることも出来ます.