以前までは clang_completeを使っていたけど、vimをpython2.7対応でビルドしないといけなかったり、設定がわりと面倒だったりしていた。そこで前々からチェックしていた後発の vim-clangに乗り換えることにした。
あとは江添さんも乗り換えたという記事を見たのもある。
本の虫: vim-clang: clangを使ったC++の静的補完Vimプラグイン
それぞれの特徴
clang_complete
- libclangを使用する
- libclangとの連携にpythonを使用。vimがpython2.7に対応している必要がある(python3使いたい時に不便)
- 一時期開発が止まっていたが最近は有志の人が引き継いで更新されている
- neocompleteと共存可能
vim-clang
- pythonには依存していない
- clangの実行ファイルを使用する
- libclangには対応していない(でもそこまで遅い感じではない)
- clang-formatの実行にも対応している
- neocompleteと共存可能
その他
他にも有名どころとしてはYouCompleteMeなどがあるが、neocompleteと共存できないような気がする(未検証)。
設定例(Linux向け)
インストール(NeoBundleを使用、詳細は省略)
neobundle.toml
# complete[[plugins]]repository='Shougo/neocomplete.vim'depends=['Shougo/neoinclude.vim', 'Shougo/context_filetype.vim']insert=1# C/C++[[plugins]]repository='justmao945/vim-clang'filetypes=['c', 'cpp']
neocompleteとvim-clangの設定例
" 'Shougo/neocomplete.vim' {{{letg:neocomplete#enable_at_startup =1if!exists('g:neocomplete#force_omni_input_patterns')letg:neocomplete#force_omni_input_patterns = {}
endifletg:neocomplete#force_overwrite_completefunc =1letg:neocomplete#force_omni_input_patterns.c=
\ '[^.[:digit:] *\t]\%(\.\|->\)\w*'letg:neocomplete#force_omni_input_patterns.cpp =
\ '[^.[:digit:] *\t]\%(\.\|->\)\w*\|\h\w*::\w*'" }}}"" 'justmao945/vim-clang' {{{" disable auto completion for vim-clangletg:clang_auto =0" default 'longest' can not work with neocompleteletg:clang_c_completeopt ='menuone'letg:clang_cpp_completeopt ='menuone'if executable('clang-3.6')letg:clang_exec ='clang-3.6'elseif executable('clang-3.5')letg:clang_exec ='clang-3.5'elseif executable('clang-3.4')letg:clang_exec ='clang-3.4'elseletg:clang_exec ='clang'endifif executable('clang-format-3.6')letg:clang_format_exec ='clang-format-3.6'elseif executable('clang-format-3.5')letg:clang_format_exec ='clang-format-3.5'elseif executable('clang-format-3.4')letg:clang_format_exec ='clang-format-3.4'elseletg:clang_exec ='clang-format'endifletg:clang_cpp_options ='-std=c++11 -stdlib=libc++'" }}}
その他、詳細は vim-clangのドキュメントを参照して下さい。