一、编译YouCompleteMe
在《Ubuntu10.04的vim插件扩展》一文中,有尝试过编译YouCompleteMe,但是由于glibc版本太旧,而且更新失败(详见《Ubuntu10.04升级glibc》),唯有放弃Ubuntu10.04,改用目前最新版本Ubuntu14.04。
YouCompleteMe要求vim版本为7.3.584[1]。对于这些Ubuntu14.04都是满足的。关于YouCompleteMe编译,在参考资料[1]中有,特别是其中的Full Installation Guide部分说的比较详细。然而全英文看的有点晕,因此还是要参考一下中文资料[2][3]。关于Vundle的和LLVM+Clang内容,见《Ubuntu10.04的vim插件扩展》,这里暂时略去,这里主要说YouCompleteMe的编译和使用。
关于YouCompleteMe的编译,其实参考资料[2][3]都已经说得很清楚。这里就以参考资料[3]为对比,重点指出在Ubuntu14.04中配置YouCompleteMe时与参考资料[3]说的不一致的地方。
差别1:YouCompleteMe中没有cpp目录
在参考资料[3]中,编译YouCompleteMe时cmake参数中指定了YouCompleteMe的cpp目录,但是我下载的YouCompleteMe并没有这个目录,根据参考资料[1]Full Installation Guide部分的说明,改为YouCompleteMe/third_party/ycmd/cpp。另外,libclang.so的目录也不对,要改下。修改后的cmake参数如下:
cmake -G "Unix Makefiles" ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp -DEXTERNAL_LIBCLANG_PATH=~/llvmsrc/Release+Asserts/lib/libclang.so
注意:通过参考资料[1]的地址自己下载的YouCompleteMe源码中,并没有xxx/ycmd/cpp目录(ycmd目录是空的),而通过Vundle工具下载的版本则有!
差别2:make ycm_core出错误
根据参考资料[3]的说明,在make ycm_support_libs前,要先make ycm_core,结果错误如下:
根据参考资料[1]Full Installation Guide部分的说明,并没有make ycm_core这一步,因此直接make ycm_support_libs即可!下面是编译成功后的截图:
二、配置.vimrc文件
在参考资料[2][3]中,给出的.vimrc的配置太复杂,但是只有少部分与YoucompleteMe相关,而且和我的需求不一致,因此我将其抽取出来,并做了修改:
let g:ycm_collect_identifiers_from_tags_files = 1 let g:ycm_collect_identifiers_from_comments_and_strings = 1 let g:syntastic_ignore_files=[".*\.py$"] let g:ycm_seed_identifiers_with_syntax = 1 let g:ycm_complete_in_comments = 1 let g:ycm_confirm_extra_conf = 0 let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
关于各个选项的作用,在参考资料[1]中有详细的说明。
三、函数自动补全
YouCompleteMe要实函数的补全,主要有两种方法。
方法一:Ctrl + space
参考资料[1]中说到,编辑c族语言时,任何位置下使用Ctrl+space可以提示系统库函数。
方法二:借助ctags
关于ctags的用法,在《Ubuntu10.04的vim插件扩展》已经说明。需要注意的是,YouCompleteMe要求ctags生成tags时,要加上--fields+=l参数,例如:
ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --fields=+l -f ~/.vim/systags /usr/include/*
经过测试,在含有中文路径的目录上,不能实现借助tags补全!另外,如果使用-R参数去生成系统文件的tags,将会导致vim反应很慢,而且不能自动补全(这点和《Ubuntu10.04的vim插件扩展》说的的类似),例如:
ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --fields=+l -f -R ~/.vim/systags /usr/include/
为了解决这个问题,可以为不同的头文件目录生成不同的tags。在上面为/usr/include目录的头文件生成systags的基础上,下面再为/usr/include/i386-linux-gnu/sys目录的头文件生成i386-linux-gnu-systags:
ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --fields=+l -f ~/.vim/i386-linux-gnu-systags /usr/include/i386-linux-gnu/sys/*
在.vimrc中添加多个tags:
" for ctags set tags+=~/.vim/systags set tags+=~/.vim/i386-linux-gnu-systags
五、头文件自动补全
在第二章配置的最后一项写着:
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'指的是YouCompleteMe的附加配置文件为.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py,为了使得YouCompletelMe可以对C语言头文件(例如stdio.h)进行自动补全,需要对齐其进行修改。修改结果点击 这里下载。
参考资料
[1]Valloric/YouCompleteMe_GitHub
[2]Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe
[3][笔记]ubuntu 13.04 配置YouCompleteMe