Vim Advent Calendar 2013 : Vim で libclang を使用した C++ の便利プラグインをつくった
この記事は Vim Advent Calendar 2013 48日目の記事になります。
Vim Advent Calendar 2013 の記事を書きたい人は明日すぐに書けますよ!!
さて、今回の記事なのですが、少し前から Clang の libclang を使用したプラグインを作成しています。
libclang を利用する事で比較的感に Vim から型や定義位置の情報など取得することができます。
まだ完成というわけではないのですが、最低限の機能は実装できたので一旦公開してしまおうかなーと思います。
だいぶ煮詰まってきているのでフィードバックなどがもらえると嬉しいです。
[動作環境]
Clang 3.3 もしくは Clang 3.4 で動作確認を行っています。
(3.5 でも動作するとは思うけど確認したわけではない。
また、Vim 側は +python が必要となります。
[実装されている機能]
[インストール]
NeoBundle "osyo-manga/vim-snowdrop"
[設定]
" libclang が保存されているディレクトリへのパス let g:snowdrop#libclang_directory = "C:/llvm/bin" " インクルードディレクトリのパスを設定 let g:snowdrop#include_paths = { \ "cpp" : { \ "C:/MinGW/lib/gcc/mingw32/4.6.2/include", \ "C:/cpp/boost", \ "C:/cpp/sprout", \ } \} " 使用する clang のコマンドオプション let g:snowdrop#command_options = { \ "cpp" : "-std=c++1y", \}
[動作確認]
snowdrop.vim を導入後に次のコマンドを呼ぶことで、問題なく動作するかどうかを確認する事ができます。
:SnowdropVerify
このコマンドを呼んで出力される結果が全て [Success] であれば問題ありません。
もし [Failure] が発生した場合は g:snowdrop#libclang_directory などに正しく libclang が保存されているディレクトリへのパスが設定されているかどうかを確認してみてください。
[カレントバッファでインクルードされているヘッダーファイルの一覧を出力]
カレントバッファでインクールドされているヘッダーファイルの一覧を出力します。
:SnowdropEchoIncludes
また、unite.vim へと出力することもできます。
:Unite snowdrop/includes
[定義位置、もしくは宣言位置へ移動する]
カーソル下の単語の定義位置へと移動します。
定義が見つからなければ宣言位置へ移動します。
:SnowdropGotoDefinition
また、この時のファイルの開かれ方は、
let g:snowdrop#goto_definition_open_cmd = "edit"
で設定することができます。
[型情報の取得]
カーソル下の単語の型情報を出力します。
:SnowdropEchoTypeof
また、以下のように設定することでバールン表示することもできます。
function! s:cpp() setlocal balloonexpr=snowdrop#ballonexpr_typeof() setlocal ballooneval endfunction augroup my-cpp autocmd! autocmd FileType cpp call s:cpp() augroup END
[コード補完]
neocomplete.vim を利用してコード補完を行うことができます。
これを利用したい場合は、以下の設定を行って下さい。
let g:neocomplete#sources#snowdrop#enable = 1 " 補完に時間がかかってもスキップしない設定 let g:neocomplete#skip_auto_completion_time = ""
と、いう感じで現在実装されている機能は上記のようになります。
また全然試せていないのでなにか問題があれば Issues などへと報告してもらえると助かります。