neocomplcache-clang

結構前なんですが、neocomplcache に clang_complete が取り込まれた『neocomplcache-clang』が作られたので、その紹介です。
neocomplcache-clang では、clang_complete と neocomplcache が競合してしまう問題が解消されており、neocomplcache 上で、clang_complete と同等のコード補完を行うことが出来ます。
これで、clang_complete を使用する敷居がだいぶ下がったんじゃないでしょうか。

[テストした動作環境]

[オプション]

g:neocomplcache_clang_use_library libclang.dll(clang.dll)の使用の有無
g:neocomplcache_clang_library_path libclang.dll(clang.dll)へのディレクトリパス
g:neocomplcache_clang_user_options clang のコマンドオプション

[設定例]

" libclang を使用して高速に補完を行う
let g:neocomplcache_clang_use_library=1
" clang.dll へのディレクトリパス
let g:neocomplcache_clang_library_path='C:/llvm/bin'
" clang のコマンドオプション
" MinGW や Boost のパス周りの設定は手元の環境に合わせて下さい
let g:neocomplcache_clang_user_options =
    \ '-I C:/MinGW/lib/gcc/mingw32/4.5.3/include '.
    \ '-I C:/lib/boost_1_47_0 '.
    \ '-fms-extensions -fgnu-runtime '.
    \ '-include malloc.h '
" neocomplcache で表示される補完の数を増やす
" これが少ないと候補が表示されない場合があります
let g:neocomplcache_max_list=1000

[動作例]

[注意点]

コード補完がされなかった場合、原因が非常に分かりづらいので以下の事を確認してみてください

  • 補完する対象のコードが間違っていないか
  • -I オプションで、インクルードディレクトリを設定しているか
  • インクルードディレクトリのパスは合っているか
  • ユーザ側で定義したクラス等の補完は行われているか
  • g:neocomplcache_clang_complete_library_path=0 の場合でも補完されないか
  • 64bit マシンだと動かない可能性があります(未確認)
  • libclang.dll ではなく、clang.dll でないと動作しません

あとはコマンドから直接 clang を使用してコード補完を試してみるとかですかねぇ。
補完されなかった場合に原因を突き止めるのが結構難しかったりします。
その他、分からない事があれば、コメントか Twitter までどうぞ。

[その他]

  • libclang.dll(clang.dll)を使用することで補完速度が高速になります
  • Boost Libraries を使うとコード補完が Boooooost する事があります
  • コードによっては、メモリの消費量が半端ないです

[追記]

オプション名が間違っていたので修正

g:neocomplcache_clang_auto_options
g:neocomplcache_clang_library_path

[追記2]

最新版でオプション名が変更されたので修正。
21日以前のものを使っている方は注意して下さい。