はじめに
素人です.Vim でC/C++のコードを補完する手順をメモしておきます.C/C++の補完プラグインをclang_completeからvim-clangに乗り換えたの記事を主に参考にさせていただきました.
構文解釈には高速と言われるC++コンパイラclang派生のclang-formatを利用し,Vim側からvim-clangを経由させて使用するようです.
clangのインストール
当たり前ですが,これが入っていないとモジュールがないって怒られます.
sudo apt-get clang-3.5
sudo apt-get clang-format-3.5
プラグインのインストール
vim-clangを経由して候補を検索します.自動補完はneocompleteを使います.
neocompleteを使って非同期で表示させるので,vimprocを使います.念の為,書いておきます.
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'Shougo/vimproc.vim', {
\ 'build' : {
\ 'windows' : 'make -f make_mingw32.mak',
\ 'cygwin' : 'make -f make_cygwin.mak',
\ 'mac' : 'make -f make_mac.mak',
\ 'unix' : 'make -f make_unix.mak',
\ },
\ }
NeoBundle 'justmao945/vim-clang'
NeoBundle 'Shougo/neoinclude.vim'
.vimrcの設定
C/C++の補完プラグインをclang_completeから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]\%(\.\|->\)'letg:neocomplete#force_omni_input_patterns.cpp ='[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::'"""}}}" 'justmao945/vim-clang' {{{" disable auto completion for vim-clanGletg:clang_auto =0letg:clang_complete_auto =0letg:clang_auto_select =0letg:clang_use_library =1" 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_c_options ='-std=c11'letg:clang_cpp_options ='-std=c++11 -stdlib=libc++'" }}}
おわりに
force_omni_input_patterns の規約を理解していませんが,とりあえずこれでそれっぽく補完されているので,良しとしておきます..