[vim]CentOS6.5にvim7.4をインストールしてrubyの補完ができるようにする(neocomplcache)


最初はvim7.2で試していたのですが、プラグインのアップデートをした際に一部プラグインが7.2では動かなくなったのでvim7.4にアップデートしました。

ついでにrubyの補完を使いたかったのでneocomplcacheを使った設定をしてみました。

1. vim7.4のインストールとrubyオプションの有効化

まずはvim7.4のインストールから。

以下の記事が参考になりました。

CentOSにVimをインストール – Qiita

が、configure時にrubyオプションを有効にしているにもかかわらずハマりました。

vim --version|grep ruby

-ruby   # +rubyにならない

ruby-develをインストールする必要があるようです。

sudo yum install ruby-devel

再度configure

sudo ./configure --enable-multibyte --with-features=huge --enable-cscope --enable-gui=gtk2 
--disable-selinux --prefix=/usr/local 
--enable-xim --enable-fontset 
--enable-gpm 
--enable-rubyinterp 
--with-python-config-dir=/usr/lib/python2.6/config 
--enable-luainterp=yes --with-lua-prefix=/usr

インストール

sudo make
sudo make install

再確認

vim --version|grep ruby

+ruby

rubyオプションが有効になりました!

2. neocomplcache周りの設定

色々な記事を参考にさせていただいて設定してみました。

# ~/.vimrc

NeoBundle 'Shougo/neocomplcache'

"----------------------------------------
" neocomplcache
"----------------------------------------
let g:acp_enableAtStartup = 0
" 起動時に有効
let g:neocomplcache_enable_at_startup = 1
" 自動補完を行う入力数を設定。初期値は2
let g:neocomplcache_auto_completion_start_length = 2
" 手動補完時に補完を行う入力数を制御。値を小さくすると文字の削除時に重くなる
let g:neocomplcache_manual_completion_start_length = 3
" 補完候補検索時に大文字・小文字を無視する
let g:neocomplcache_enable_ignore_case = 1
" 大文字小文字を区切りとしたあいまい検索を行うかどうか。
let g:neocomplcache_enable_camel_case_completion = 1
" 入力に大文字が入力されている場合、大文字小文字の区別をする
let g:neocomplcache_enable_smart_case = 1
" アンダーバーを区切りとしたあいまい検索を行うかどうか。
let g:neocomplcache_enable_underbar_completion = 1
" シンタックスファイル中で、補完の対象となるキーワードの最小長さ。初期値は4。
let g:neocomplcache_min_syntax_length = 3
" バッファや辞書ファイル中で、補完の対象となるキーワードの最小長さ。初期値は4。
let g:neocomplcache_min_keyword_length = 2
let g:neocomplcache_enable_quick_match = 1
" ポップアップメニューで表示される候補の数。初期値は100
let g:neocomplcache_max_list = 20
let g:neocomplcache_dictionary_filetype_lists = {
   \ 'default' : ''
   \ }
if !exists('g:neocomplcache_keyword_patterns')
  let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns._ = '\h\w*'
if !exists('g:neocomplcache_omni_patterns')
  let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\h\w*\|\h\w*::'
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<S-TAB>"
inoremap <expr><C-y>  neocomplcache#close_popup()
  • 確認

適当なrubyファイルを作成して、”Hello”.to_を打つと候補が表示されます。

vim1

to_jsonが候補にないのはruby-develで入れたバージョンが1.8だからでしょうか。

ruby最新バージョンでうまく補完ができるようにしたいところですが、一旦はこれでやってみようと思います。

すぐ忘れるので補完周りのコマンドもメモしておきます。(上記設定の場合)

コマンド 説明 備考
Ctrl-x Ctrl-o インサートモードで実行すると補完候補を表示
tab 補完候補表示時に次の候補へ移動 Ctrl-n でも可能
Shift-tab 補完候補表示時に前の候補へ移動 Ctrl-p でも可能
Ctrl-y 補完表示を閉じる
Enter 補完候補表示時に補完を確定

これでまたvimが快適になりました。

参考