読者です 読者をやめる 読者になる 読者になる

凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

Ubuntu 11.10 環境下で neocomplcache-clang を導入してみた

Linux Vim

はじめに

neocomplcache-clang を使うと MSVC や Eclipse のように C++ のコードの補完ができます。

d:id:osyo-manga:20110821d:id:alwei:20110821 のように neocomplcache-clang を Windows 環境下で導入している記事はあったのですが、Ubuntu でやってみたよ!という情報があまり見つからなかったのでまとめてみました。

用意するもの

各所で書かれていますが以下のものが必要です。

clang については apt-get (aptitude) からも install できますが、これだと libclang.so が見つからなかったので上記サイトから取ってきてください。
pythonvim-python は apt-get でインストールできます。vimproc はShougo/vimproc.vim · GitHubにあります。

導入手順

vim plugin 達の導入については、git clone するなり neobundle.vim で管理するなりして取ってきてください。私はつい先日、neobundle.vim で管理するように環境を整えました。オススメです。

neocomplcache の設定については、私は以下のように .vimrc に記述しています。

let g:neocomplcache_enable_at_startup = 1 

" <TAB> completion.
inoremap <expr><TAB>   pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<S-TAB>"
inoremap <expr><CR>    pumvisible() ? neocomplcache#close_popup() : "\<CR>"

" snippets expand key
imap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
smap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)

Tab と Shift + Tab で前後の行き来、Enter で決定、といった感じです。

次に、DL してきた clang の lib の中に入っている libclang.so を適当なディレクトリに移動します。ここでは /usr/share/clang 以下に移動することにします。

$ sudo mv libclang.so /usr/share/clang 

そして .vimrc に以下を追記。

" これをしないと候補選択時に Scratch ウィンドウが開いてしまう 
set completeopt = menuone

let g:neocomplcache_clang_use_library  = 1

" libclang.so を置いたディレクトリを指定
let g:neocomplcache_clang_library_path = '/usr/share/clang'

" Include するディレクトリは各自の環境に合わせて設定
let g:neocomplcache_clang_user_options =
       \ '-I /usr/include/ '.
       \ '-fms-extensions -fgnu-runtime '.
       \ '-include malloc.h '

let g:neocomplcache_max_list=1000

ちなみにデフォルト通りに、completeopt = menuone,preview となっている場合は Scratch ウィンドウが開いてしまうので preview を消しましょう。

これで vim で cpp ファイルを開けば冒頭の画像のように補完が行われます。

最後に

Boost を include しているせいか、補完に要する時間が Boooooooost!! していますが、一回キャッシュしてしまえば実用的な速度で動いてくれると思います。むしろこれを Boooooooost!! しないようにパソコンのスペックを上げても良いかな、とか思ったり。これで快適な vim ライフが送れそうです。