使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assist X这么方便快捷的补全插件呢?以前用的是neocomplcache+code_complete+omnicppcomplete,但效果还是不是很好。看到有YCM后前面的插件可以说拜拜了。 YouCompleteMe:一个随键而全的、支持模糊搜索的、高速补全的插件。YCM 由 google 公司搜索项目组的软件工程师 Strahinja Val Markovic 所开发,YCM 后端调用 libclang(以获取AST,当然还有其他语言的语义分析库)、前端由 C++ 开发(以提升补全效 率)、外层由 python 封装(以成为 vim 插件),它可能是我见过安装最复杂的 vim 插件了。 先看个补全效果图
还可以进行路径自动补全
录了张使用YCM和ultisnips的动态giif补全效果图,这两者配合起来写代码很爽。
我的vim的配置可以看这里 YouCompleteMe要求Vim版本7.3.584+,前面已经介绍了编译安装Vim7.4方法。 同时YouCompleteMe要求clang版本为3.3以上。如果想获取最新的clang可以使用SVN,按照其官网上介绍的方法编译安装。我们这里介绍源码编译安装clang3.3。
编译安装llvm-clang3.3先下载如下4个源码: llvm-3.3源码 clang-3.3源码 clang-tools-extra-3.3源码 compiler-rt-3.3源码 建立目录: mkdir ~/llvm-clang 分别解压上面下载的4个文件到上述目录 tar -xvzf llvm-3.3.src.tar.gz tar -xvzf compiler-rt-3.3.src.tar.gz tar -xvzf clang-tools-extra-3.3.src.tar.gz tar -xvzf cfe-3.3.src.tar.gz 再将工具移动到llvm的相应目录下,使得clang,clang-tools-extra和compiler-rt就可以和llvm一起编译了: mv cfe-3.3.src/ llvm-3.3.src/tools/clang/ mv clang-tools-extra-3.3.src/ llvm-3.3.src/tools/clang/extra/ mv compiler-rt-3.3.src/ llvm-3.3.src/projects/compiler-rt/ 下载最新的LLVM、clang 及辅助库源码可用: cd ~/llvm-clang svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/trunk clang cd ../.. cd llvm/tools/clang/tools svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra cd ../../../.. cd llvm/projects svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt cd .. 返回~/llvm-clang目录,并新建一个目录llvm-build专门用于编译llvm-clang,使得不污染源码。 mkdir llvm-build cd llvm-build/ ../llvm-3.3.src/configure --enable-optimized 建立编译环境 此种配置后,llv-clang默认安装到目录 /usr/local/ 下, 如果想改变安装目录,则加上配置: --prefix=Path 来制定 输入 make -j4 (本人机器为双核)开始编译 sudo make install 进行安装 如要卸载则在该目录下输入 sudo make uninstall 安装好后,输入 clang -v查看版本信息: 安装clang标准库clang 的标准库————libc++(接口层)和 libc++abi(实现层)需要安装头文件和动态链接库(*.so)。
头文件已经生成到 ~/llvm-clang/libcxx/include/,要让 clang 找到必须复制到 /usr/include/c++/v1/ cp -r ~/llvm-clang/libcxx/include/ /usr/include/c++/v1/ *.so 文件已生成 ~/llvm-clang/libcxx/lib/libc++.so.1.0,要让 clang 访问必须复 制到 /usr/lib/,并创建软链接 ln -s ~/llvm-clang/libcxx/lib/libc++.so.1.0 ~/llvm-clang/libcxx/lib/libc++.so.1 ln -s ~/llvm-clang/libcxx/lib/libc++.so.1.0 ~/llvm-clang/libcxx/lib/libc++.so cp ~/dllvm-clang/libcxx/lib/libc++.so* /usr/lib/ 类似,源码安装 libc++abi 的头文件和动态链接库: cd ~/llvm-clang/ svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi cd libcxxabi/lib ./buildit 头文件已经生成到 ~/llvm-clang/libcxxabi/include/,要让 clang 找到必须复制到 /usr/include/c++/v1/ cp -r ~/llvm-clang/libcxxabi/include/ /usr/include/c++/v1/ *.so 文件已生成 ~/llvm-clang/libcxx/lib/libc++abi.so.1.0,要让 clang 访问必 须复制到 /usr/lib/,并创建软链接 ln -s ~/llvm-clang/libcxxabi/lib/libc++abi.so.1.0 ~/llvm-clang/libcxxabi/lib/libc++abi.so.1 ln -s ~/llvm-clang/libcxxabi/lib/libc++abi.so.1.0 ~/llvm-clang/libcxxabi/lib/libc++abi.so cp ~/llvm-clang/libcxxabi/lib/libc++abi.so* /usr/lib/ 后续可以通过如下选项进行代码编译: clang++ -std=c++11 -stdlib=libc++ -Werror -Weverything -Wno-disabled-macro- expansion -Wno-float-equal -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno- global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes -Wno-padded -lc++ -lc++abi main.cpp 参数说明:
这些参数在YouCompleteMe的配置文件.ycm_extra_conf.py的flags中设置 安装配置YouCompleteMe
|