はじめに
素人です.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' {{{
let g:neocomplete#enable_at_startup = 1
if !exists('g:neocomplete#force_omni_input_patterns')
let g:neocomplete#force_omni_input_patterns = {}
endif
let g:neocomplete#force_overwrite_completefunc = 1
let g:neocomplete#force_omni_input_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)'
let g:neocomplete#force_omni_input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::'
"""}}}
" 'justmao945/vim-clang' {{{
" disable auto completion for vim-clanG
let g:clang_auto = 0
let g:clang_complete_auto = 0
let g:clang_auto_select = 0
let g:clang_use_library = 1
" default 'longest' can not work with neocomplete
let g:clang_c_completeopt = 'menuone'
let g:clang_cpp_completeopt = 'menuone'
if executable('clang-3.6')
let g:clang_exec = 'clang-3.6'
elseif executable('clang-3.5')
let g:clang_exec = 'clang-3.5'
elseif executable('clang-3.4')
let g:clang_exec = 'clang-3.4'
else
let g:clang_exec = 'clang'
endif
if executable('clang-format-3.6')
let g:clang_format_exec = 'clang-format-3.6'
elseif executable('clang-format-3.5')
let g:clang_format_exec = 'clang-format-3.5'
elseif executable('clang-format-3.4')
let g:clang_format_exec = 'clang-format-3.4'
else
let g:clang_exec = 'clang-format'
endif
let g:clang_c_options = '-std=c11'
let g:clang_cpp_options = '-std=c++11 -stdlib=libc++'
" }}}
おわりに
force_omni_input_patterns の規約を理解していませんが,とりあえずこれでそれっぽく補完されているので,良しとしておきます..