neocomplcache-clang
結構前なんですが、neocomplcache に clang_complete が取り込まれた『neocomplcache-clang』が作られたので、その紹介です。
neocomplcache-clang では、clang_complete と neocomplcache が競合してしまう問題が解消されており、neocomplcache 上で、clang_complete と同等のコード補完を行うことが出来ます。
これで、clang_complete を使用する敷居がだいぶ下がったんじゃないでしょうか。
[テストした動作環境]
- clang-2.9(http://llvm.org/releases/download.html#2.9)
- python-2.6.6(g:neocomplcache_clang_complete_use_library=1 の場合)
- neocomplcache(https://github.com/Shougo/neocomplcache)
[オプション]
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 する事があります
- コードによっては、メモリの消費量が半端ないです
[参照]
https://github.com/Rip-Rip/clang_complete
http://d.hatena.ne.jp/osyo-manga/20110210/1297328933
http://d.hatena.ne.jp/osyo-manga/20110228/1298869326
[追記2]
最新版でオプション名が変更されたので修正。
21日以前のものを使っている方は注意して下さい。