http://www.vim.org/scripts/script.php?script_id=3684
http://bitbucket.org/abadcafe/ctags_cache/
特色:
1. 自动调用ctags生成当前所编辑文件、其所引用的头文件,以及头文件引用的头文件的tags,并把tags保存在内存里随时更新,所以再也无需维护任何tags文件。
2. 自动补全函数名,全局变量,局部变量,成员变量,以及匿名结构体和嵌套结构体的成员变量。例如如下结构:
代码: 全选
typedef struct
{
int abc;
int bbc;
union
{
int cbc;
int dbc;
};
union
{
int ebc;
int fbc;
} uuu;
} sss;
sss a;
3. 所有操作都是异步的,由后台线程完成,所以人感觉不到延迟。
不足:
1. 插件用python3写成,需要编译带py3支持的vim。
2. 插件在补全C语言的时候非常完美,速度与准确性都很不错,但没有针对C++做任何工作。
可能会有人觉得,没有tags文件不是没法跳转了吗?
这里我要推荐一下gnu global和它的vim接口插件gtags.vim。这是个类似于cscope的工具,但是有两点优势:
1. 当你在/abc/bbc/下生成了数据库以后,你进入/abc/bbc/cbc/dbc目录coding,并想进行跳转,它会自动向上查找到数据库进行操作。
2. 你在/abc/bbc/下的任意一个子目录里更改了一个文件f,然后执行global -u,不管你的数据库有多大(比如说整个kernel),都能很快的把数据库里有关文件f的信息都更新了,但cscope的更新操作就很慢。所以,可以在.vimrc里加一句
代码: 全选
au BufWritePost *.[ch] silent !global -u &> /dev/null &
也就是说,如果你是一个纯C程序员,那么通过这两个工具,你就能得到准确性与速度都非常完美并且可以跟任何其他软件(比如说source insight)媲美的智能补全与符号跳转功能。