neocomplcacheとclang_completeの導入


なんかこう、自分もこの辺よくわかってなかったので


前提としては、

  • neobundleでプラグインを管理している
  • vimprocはインストール済み

とします


インストールするプラグイン

*1


C++でオムニ補完する場合、入力の候補はclang_completeが作成して、作成した候補をキャッシュして高速に表示するユーザインターフェースの役割がneocomplcacheってイメージ。(間違ってたらゴメンナサイ)

インストール

さっそくneobundleでインストールしてみます


.vimrcに以下を追加

...
NeoBundle 'https://github.com/Shougo/neocomplcache.git'
NeoBundle 'https://github.com/Shougo/neocomplcache-clang_complete.git'
NeoBundle 'https://github.com/Rip-Rip/clang_complete.git'
...

vimでneobundleのインストールコマンドを実行

:NeoBundleInstall

unite.vimがあるときは

:Unite neobundle/install

でもいいと思います(後ろに!を付けるかどうかはご自由に)


これでプラグインのインストールは完了

neocomplcacheの有効化

まずは最小限neocomplcacheが動くことを試してみます

.vimrcに以下を追加

let g:neocomplcache_enable_at_startup=1

vimを再起動するとneocomplcacheが有効になってます*2

vim scriptの補完はデフォルトで実装しているようなので、.vimrcでてきとうに入力してみるとだいたいどんな感じかわかると思います


他にも色々と細かい設定だったり自分好みにキーマップを設定したりインクルード補完が強力だったりとありますが、その辺は各自でご自由に

理解できる範囲からコツコツと

neocomplcache-clang_complete と clang_complete

これまた最低限の動作を確認

.vimrcに以下を追加

let g:neocomplcache_force_overwrite_completefunc=1
let g:clang_complete_auto=1

※clangの実行ファイルがPATHに設定されていない場合は以下を設定する必要があります

let g:clang_exec="実行ファイルへのパス"

※libclangを使って高速化する場合は以下を追加

let g:clang_use_library=1
let g:clang_library_path="libclang.soまたはlibclang.dllを格納しているディレクトリのパス"

*3


これでneocomplcacheとclang_completeが競合なく使えるようになりました


まだ使うと物足りない部分もあると思いますが、とりあえずc++のコードを書いてみるといいと思います


その他細かい設定は自分も理解していない部分が多いので、ここから先は動かないとか言われても知らないです
あくまで、参考程度という事で

clang_completeの設定

clang_completeでclang実行時にオプションを追加する方法は2つあります

  • g:clang_user_options
    • clang実行時に末尾にそのまま追加する文字列
  • g:clang_auto_user_options
    • ユーザオプションのソースを指定。詳細は後述


自分は全てg:clang_auto_user_optionsで設定しています


g:clang_auto_user_options はユーザーオプションのソースを","で区切って設定します
ソースの種類は以下になります

  • path
  • .clang_complete
  • {anything} (ユーザ定義のソース)

pathはvimの変数"path"をインクルードディレクトリに追加することを表します
.clang_completeは、~/.clang_complete ファイルを読み込みます
ユーザ定義のソースの例として"gcc"が定義されていて、gccのインクルードディレクトリを読み込みます

デフォルトの値は"path, .clang_complete, gcc"ですが、自分はgccを外しました

g:clang_auto_user_options="path, .clang_complete"

まず、gfでファイルに飛びたいので.vimrcにpathを色々追加します

set path+="色々"
...


あと必要なオプションは全て~/.clang_completeに書いてます

-std=c++11
...


これでだいたいは動くと思います*4


最後に

まず、ドキュメントを読もう

*1:neocomplcache-clangは古いので間違ってインストールしないように

*2:再起動しなくても :NeoComplcacheEnable で有効になると思いますが一応

*3:g:clang_library_pathはディレクトリへのパスです。ファイル名は含みません

*4:インクルード補完は除きます。これに関してはたくさん記事があったので大丈夫かと