最近私的系统因为重装而数据挂了,只好重新配一次环境。也就是这个时候发现clang complete版本更新了,它更新才没几天,不过变化挺大,在linux下可以使用vmb包来安装了(1.8版)。不过安装时依然有各种坑。
首先,如果你用的clang版本是2.8/2.9的话(3.0没用过表示不清楚),支持的gcc版本为3.4 – 4.5,不支持gcc4.6,如非必要,别安装最新的gcc。但在windows下,mingw提供的安装包总是安装最新版本,为了方便其它人使用,特别收集一个mingw4.5.2版(需要7z或rar解压缩):
http://sourceforge.net/projects/tcgraphics/files/others/mingw4.5.2.7z/download
不需要安装,解压缩后就可以使用,注意设置一下环境变量path到mingw/bin即可
第二坑,如果是linux,请去官网http://llvm.org/releases/下载2.8版,因为2.8版的bin内部提供了一个libclang.so,得以减少麻烦。如果是windows下,请去官网下载2.9版(也是刚刚的链接),这个版本自带了win下的mingw bin。但光有这个bin是不太够的,除非你不在意补全的性能问题(为了弹个提示框可能等个1-20秒),解决方法后面说。下载好clang后,请测试编译命令行(此目录会因你的gcc/mingw版本变化而变,不要照抄):
windows(假如你的mingw目录是D:\mingw):clang++ test.cpp -ID:\mingw\include -ID:\mingw\lib\gcc\mingw32\4.5.2\include -ID:\mingw\lib\gcc\mingw32\4.5.2\include\c++ -ID:\mingw\lib\gcc\mingw32\4.5.2\include\c++\mingw32
linux:clang++ test.cpp -I/usr/include/c++/4.5 -I/usr/include/c++/4.5/x86_64-linux-gnu
注意你自己编写的test.cpp要包含c++的头文件,以进行c++的编译测试
如果能编译成功,那么可以继续后文。
以上的东西准备好了以后,就可以下载那个插件安装进去了,在这查看那个插件
http://www.vim.org/scripts/script.php?script_id=3302
不过这里也有坑。如果是linux,那么下载那个vmb包就行了,按文档所说执行一条命令行指令安装就可以了;如果是windows,那还请麻烦你去https://github.com/Rip-Rip/clang_complete手工下载,点那个zip图标打包下载下来就好,下载后手工把plugin目录里的东西(至少这个目录)复制到你的vim插件目录,这样就安装好了。
接下来是配置,需要在你要编辑的c/cpp等文件所在目录或者root,建立一个名为’.clang_complete’的文件,里面的内容就是你用clang编译成功时的命令行的-I命令的集合,像mingw的话就是:
-ID:\mingw\include
-ID:\mingw\lib\gcc\mingw32\4.5.2\include
-ID:\mingw\lib\gcc\mingw32\4.5.2\include\c++
-ID:\mingw\lib\gcc\mingw32\4.5.2\include\c++\mingw32
一行一个-I
做到这里以后,重启一下你的vim,这时候已经可以正常使用补全了,用 弹出补全提示框。或者在输入 :: . -> 之后会自动弹出。不过,在linux下效率上还算过得去,在windows下会非常杯具,要等好久。
你可以加上pch的方式减少编译时间,但也比不上以下的方式。
要想补全速度快,那么要启用libclang,在vimrc里加上以下命令启用它:
let g:clang_use_library=1
然后,如果是linux,就把安装包里的libclang.so复制到/usr/lib/或者/usr/local/lib之类的地方(看你系统怎么要求)
如果是windows,需要下载一个libclang.dll,放到一个目录比如”D:/clang/lib”,那么要在vimrc里加一句:
let g:clang_library_path=”D:/clang/lib”
这个libclang.dll在哪里下载呢?在这http://sourceforge.net/projects/tcgraphics/files/others/libclang.zip/download
最后,为了让补全显示不多建立一个窗口,可以在vimrc里加:
set completeopt=longest,menu
如果不想让弹出的时候自动选上某个项,那么
let g:clang_auto_select=0
更多可见clang complete的文档。
本文是针对不希望自己配置和编译clang的人看的,如果你有能力自己看文档把它编译出来,似乎帮助就不大了。。。
如遇到别的问题使用不能,那请告诉我。。。另外,别问我怎么编译clang
PS:SupterTab is well