好久没有写博客了,其实期间也经历了很多事,但大多不大不小,感觉没有写的必要。
越来越对免费的东西感兴趣了,甚至有某种类似“洁癖”的感觉——如果两个软件有类似的功能,一定先看免费的。吃饭的家伙也不例外,我尝试了VCExpress,CodeBlocks,Ecplise CDT,CodeLite,vim,emacs等,它们都是免费的,但是各个使用起来始终达不到在VS+VXA(VC助手)+ViEmu的那样的顺手,当然VS也是有缺点的,首先不是免费而且价格高昂,其次它的卡让我觉得很不爽,再次VXA和ViEmu这些插件也都不是免费的,OMG!
CB不错,我一直关注它,尤其是最近codecomplete插件写得越来越好了,不过一旦插件多了,启动慢,而且也不支持vim或emacs键法——说到这,有个XKeymacs可以让所有windows程序使用emacs键绑定,这在一定程度上加快了代码编写速度,但是我觉得编辑文字最快的还是vim。
其它如EclipseCDT也很好,尤其是代码完成等,但是对windows平台程序的开发支持有限,而且启动时间超长。
VCExpress不错,不足的是不能安装插件。
总的说来,启动快,编辑文字快,代码补全是我的主要要求,我觉得要是vim可以弄成跟IDE一个效果,那是最爽的,我一直在尝试。然后有了这篇文章。
vim现存有很多代码补全插件,有autocomplpop,omnicppcomplete,NeoComplCache等,补全的依据主要是tags,我主要用的是omnicppcomplete。之前装过NeoComplCache,貌似很多文件,我疑心它对速度有影响我就没用了,因为我的gvim是绿色版的,只安装了必要的插件,去掉了大部分不必要的东西。autocomplpop没用过,看介绍貌似是自动弹出下拉框的,这个倒是不太需要。
现在介绍的是一个新的代码补全插件,clang complete
名称:clang complete
地址:http://www.vim.org/scripts/script.php?script_id=3302
简介:(我翻译下)这个插件能够精确地补全C, C++, Objective-C 和 Objective-C++语言的代码。
你不需要任何tag来进行补全了!只需要装个clang就行了,补全c++推荐clang 2.8版本以上。当你输入.->::后它会自动地补全代码,如果你想即时补全,按C-X C-U(以后可能会设成omnicomplete的键绑定)。clang会分析你的代码,找出错误并且高亮它们!
什么是clang ? 简单地说就是一个c/c++的代码分析前端,后端是LLVM这个编译层,几乎所有语言都可以通LLVM这个后端来生成新的编译系统。由于clang专注于代码分析,由此沿生成很多实用的工具,代码补全就是其中的一个。
不懂这个概念也无所谓,但是必须要clang这个东东,先到这里下载http://apt.jenslody.de/downloads/clang_win32.7z
下载后解压,解压后把clang所在的目录添加到PATH环境变量中去,环境变量可能不会即时生效,这时注销一下再登录就行了。
然后下载那个clang complete插件,把它放到vim的plugin目录里去,我建议你用最新版的clang complete,在这里:http://github.com/Rip-Rip/clang_complete。
另外你还需要mingw编程环境,因为clang暂时只支持gcc环境(貌似可以支持msvc,我没测试)
这个时候你就可以写个非常简单的程序测试了,注意这个程序不能include任何C++头文件,那样的话是不会提示的。
不能include的原因是clang不能正确编译你的代码,因为它找不到gcc头文件,这说明clang还不能完全替换gcc,因为gcc编译一个文件时会自动查找到头文件,而clang还不是这样。还需要做下面的工作:
在代码文件的目录建一个名为.clang_complete的文件(explorer手动不能创建,我是在cmd里用type 123>>.clang_complete才建立起来的),里面是gcc编译时包含头文件的参数,内容如下(你要根据实际情况改成你的路径):
-ID:\greensoft\codeblocks\share\minGW\include
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\backward\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\mingw32\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include-fixed\
到这一步就可以得到补全提示了,注意代码必须要准确无误才能有补全提示,效果图1:
另外,因为此插件是生成一个临时文件然后调用clang,所以速度可能有点慢,特别是代码有点多的情况下,这时你可以使用插件作者给出的方法,生成一个pch类似vc里的预编译文件,方法是:建立一个头文件如pch.h,里面是include语句,如:
#include <iostream>
#include <vector>
#include <string>
然后用下面的命令会生成一个pch.pch文件:
clang -x c++-header ./pch.h -fno-exceptions -fnu-runtime -o ./pch.pch -ID:\greensoft\codeblocks\share\minGW\include -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\ -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\ -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\backward\ -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\mingw32\ -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include-fixed\
这时那个.clang_complete要加内容,最后是:
-include-pch pch.pch -fgnu-runtime
-ID:\greensoft\codeblocks\share\minGW\include
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\backward\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\mingw32\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include-fixed\
这时你会发现代码提示更快了,两来几张图:

