neocompleteを入れてみた作業ログ

Vim Advent Calendar 2012の364日目の記事になります。
363日目は@haya14busaさんによる Vim-Easymotionを拡張してカーソルを縦横無尽に楽々移動する でした。
あと1日でvacが365日達成してしまうことに驚きを隠せません。
advent calendarとは一体何だったのか。

f:id:saihoooooooo:20131129152502p:plain

では本題に入ります。
neocomplcacheが進化してneocompleteとなったことは知ってましたがif_luaを使ってるためインストールは敬遠していました。
そんな僕もShougoさんのスライドを見てneocompleteに移行することを決意しました。
neocomplcacheはもう開発がされないそうですしね。

という訳でやったことをメモしておきます。

luaのインストール

まず手元のlinuxマシンにluaが入っていなかったのでインストールから。

$ sudo yum install -y lua lua-devel

vimのビルド

その後、if_luaを有効にするためvimをビルドします。

$ cd /usr/local/src
$ hg clone https://vim.googlecode.com/hg/ vim
$ cd vim
$ vim vuild.sh
$ cat vuild.sh
#!/bin/sh
./configure \
  --prefix=/usr/local \
  --with-features=huge \
  --enable-multibyte \
  --enable-luainterp \
  --enable-fail-if-missing && make && make install
$ chmod +x vuild.sh
$ ./vuild.sh
$ alias vim="/usr/local/bin/vim"

正直configureはそんなにわかってない。
vimを起動して、:version で確認してみる。

f:id:saihoooooooo:20131129175246p:plain

問題なさそうです!
では最後にneocompleteをvimにインストールしていきます。

neocompleteのインストール

.vimrcに以下を記述します(neobundleを使用)。

" if_luaが有効ならneocompleteを使う
NeoBundle has('lua') ? 'Shougo/neocomplete' : 'Shougo/neocomplcache'

if neobundle#is_installed('neocomplete')
    " neocomplete用設定
    let g:neocomplete#enable_at_startup = 1
    let g:neocomplete#enable_ignore_case = 1
    let g:neocomplete#enable_smart_case = 1
    if !exists('g:neocomplete#keyword_patterns')
        let g:neocomplete#keyword_patterns = {}
    endif
    let g:neocomplete#keyword_patterns._ = '\h\w*'
elseif neobundle#is_installed('neocomplcache')
    " neocomplcache用設定
    let g:neocomplcache_enable_at_startup = 1
    let g:neocomplcache_enable_ignore_case = 1
    let g:neocomplcache_enable_smart_case = 1
    if !exists('g:neocomplcache_keyword_patterns')
        let g:neocomplcache_keyword_patterns = {}
    endif
    let g:neocomplcache_keyword_patterns._ = '\h\w*'
    let g:neocomplcache_enable_camel_case_completion = 1
    let g:neocomplcache_enable_underbar_completion = 1
endif
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<S-TAB>"

念のため、if_luaが効いてない環境でも補完が動くよう、neocomplcacheの設定は残しました。

感想

速度の向上はまだ実感できてませんが、あいまい補完の動作はちょっとした感動です。
またtypoした文字列をいつまでもキャッシュされないというのもポイント高いです。

とりあえずこれで様子を見ながら他のオプションも設定したいですね。

vac2012について

明日はついにvim advent calendar 2012のファイナルです!
マジですごい!!
この偉業に少しでも貢献できたことは幸せだと思います。
それでは!
Have a nice vim!