以下的内容来源与官方的手册,内容是英文版的,自己整理了一下。后面的关于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/cpp2)如果需要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 <leader>gc :YcmCompleter GoToDeclaration<CR> nnoremap <leader>gf :YcmCompleter GoToDefinition<CR> nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR> "nmap <F4> :YcmDiags<CR>
"设置全局配置文件的路径 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