はじめに
neocomplcache-clang を使うと MSVC や Eclipse のように C++ のコードの補完ができます。
d:id:osyo-manga:20110821 や d:id:alwei:20110821 のように neocomplcache-clang を Windows 環境下で導入している記事はあったのですが、Ubuntu でやってみたよ!という情報があまり見つからなかったのでまとめてみました。
用意するもの
各所で書かれていますが以下のものが必要です。
- neocomplcache(Shougo/neocomplcache.vim · GitHub)
- neocomplcache-clang(Page not found · GitHub)
- clang(LLVM Download Page)
- python, vim-python, vimproc (元から入ってたので定かでないが多分)
clang については apt-get (aptitude) からも install できますが、これだと libclang.so が見つからなかったので上記サイトから取ってきてください。
python や vim-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 ライフが送れそうです。