以下的内容来源与官方的手册,内容是英文版的,自己整理了一下。后面的关于YCM的介绍只翻译了部分,更多的内容包括最终要的选项部分,只能下次机会再翻译了。
在安装和配置的整个过程中,这两篇文章给了我很大的帮助:
(1)Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe
(2)Vim自动补全神器:YouCompleteMe
1:确保Vim的版本至少是Vim73.584,且支持Python2脚本。
查看已安装的vim的版本:
vim --version
查看是否支持python2:进入vim,命令:echo has('python'),查看左下角,输出为1,则表示支持。如果为0,则需要重新编译安装vim,在编译时添加python支持。
Bundle 'Valloric/YouCompleteMe'
然后进入vim,执行:BundleInstall
cd ~
mkdir ycm_build
cd ycm_build
下一步生成makefile,这一步很重要,有点复杂。
:~/ycm_build$ cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/cpp
2)如果需要C族语言的语义支持,还得分几种情况:
:~/ycm_build$ cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir ~/.vim/bundle/YouCompleteMe/cpp
(2)如果想用系统的libclang:
:~/ycm_build$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBCLANG=ON ~/.vim/bundle/YouCompleteMe/cpp
(3)如果想用自定义的libclang:
:~/ycm_build$ cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/path/to/libclang.so ~/.vim/bundle/YouCompleteMe/cpp
/path/to/libclang.so这部分填入你自己的路径。
:~/ycm_build$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBCLANG=ON ~/.vim/bundle/YouCompleteMe/cpp
一下是执行该命令后的部分输出内容,可以看到using external libclang那一行中找到了libclang.so
-- The C compiler identification is GNU 4.8.1
-- The CXX compiler identification is GNU 4.8.1
.............
Your C++ compiler supports C++11, compiling in that mode.
-- Found PythonLibs: /usr/lib/i386-linux-gnu/libpython2.7.so (found suitable version "2.7.5+", minimum required is "2.6")
Using libclang to provide semantic completion for C/C++/ObjC
Using external libclang: /usr/lib/llvm-3.4/lib/libclang.so
-- Found PythonInterp: /usr/bin/python (found version "2.7.5")
.............
-- Build files have been written to: /home/username/ycm_build
:~/ycm_build$ make ycm_support_libs
×××××××××××××××××××××××××××××××××××分割线××××××××××××××××××××××××××××××××××××××××××××
如上所述,YCM在补全时需要ycm_extra_conf.py这个文件,所以我们需要对这个文件进行改动,以满足基本C族语言的补全需要。在~/.vim/bundle/YouCompleteMe/cpp/ycm下找到该文件的模板,在flag里面添加如下内容(系统文件用-isyetem,第三方文件用 -I):
'-isystem',
'/usr/include',
'-isystem',
'/usr/include/c++/',
'-isystem',
'/usr/include/i386-linux-gnu/c++'
如果要让其对C++标准库补全生效,还要把配置文件中的这几行(从try到pass这4行)注释掉:
# NOTE: This is just for YouCompleteMe; it's highly likely that your project
# does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR
# ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT.
try:
final_flags.remove( '-stdlib=libc++' )
except ValueError:
pass
"设置error和warning的提示符,如果没有设置,ycm会以syntastic的
" g:syntastic_warning_symbol 和 g:syntastic_error_symbol 这两个为准
let g:ycm_error_symbol='>>'
let g:ycm_warning_symbol='>*'
"设置跳转的快捷键,可以跳转到definition和declaration
nnoremap gc :YcmCompleter GoToDeclaration
nnoremap gf :YcmCompleter GoToDefinition
nnoremap gg :YcmCompleter GoToDefinitionElseDeclaration
"nmap :YcmDiags
"设置全局配置文件的路径
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py'
"开启基于tag的补全,可以在这之后添加需要的标签路径
let g:ycm_collect_identifiers_from_tags_files = 1
"开启语义补全
let g:ycm_seed_identifiers_with_syntax = 1
"在接受补全后不分裂出一个窗口显示接受的项
set completeopt-=preview
"不显示开启vim时检查ycm_extra_conf文件的信息
let g:ycm_confirm_extra_conf=0
"每次重新生成匹配项,禁止缓存匹配项
let g:ycm_cache_omnifunc=0
"在注释中也可以补全
let g:ycm_complete_in_comments=1
"输入第一个字符就开始补全
let g:ycm_min_num_of_chars_for_completion=1
"不查询ultisnips提供的代码模板补全,如果需要,设置成1即可
let g:ycm_use_ultisnips_completer=0