都说vim强大,然而之前的简单用法并没有让我觉得vim有多强大,顶多是一个功能齐全的记事本,只到我发现了这个工具--ctags,以及由他衍生出来的很多插件,让我明白了,“哦,vim 至少可以作为一个很不错的C语言的IDE”。~~
概述
ctags工具其实可以认为是为C语言的文件添加索引的工具。C文件经过他的处理后会生成一个tags文件来保存文件中所有函数、变量、宏的索引,通过这个索引,就能非常方便的在后续的编辑过程中获取这些信息,从而达到自动补全、识别函数和变量等一系列的功能。
安装
ctags工具有他的官网可以下载,但是实际上我们并不需要手动安装。一般情况下ubuntu系统内会自带ctags工具,他的名字叫:exuberant-ctags(朝气蓬勃的C标签0.0)。可以通过$ ctags --version
命令来查看版本。如果没有,则只需要$ sudo apt-get install exuberant-ctags
就可以直接下载使用了。
使用
首先,对我们需要索引的文件进行预处理:$ctags foo.cpp
(当然,如果需要递归处理所有子文件夹的话可以加 -R 参数,如: $ctags -R
)。
预处理后,我们会发现在当前文件夹下出现了名叫tags的文件。比如,对于如下的cpp文件:
1 |
|
生成的tags文件是这样的:
1 | !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ |
大概解释一下他的文件格式就是:
1 | 格式:{tagname} {TAB} {tagfile} {TAB} {tagaddress} {term} {field} .. |
其实就是规定一种保存结构体、函数名、和全局变量的索引了。
经过这样的处理之后,我们就可以使用他带来的非常实用的操作了:
- 对于已经建立索引的条目,我们可以用
Ctrl+]
的快捷键来快速找到他的声明,即使是位于不同文件(就像很多IDE中的F12用来查看声明一样),查看完之后可以通过Ctrl+t
或Ctrl+o
来返回原来的地方。 - 选中局部变量,按
gd
可以搜索到该变量的声明。 - 选中单词,按
*
可以转到该单词下一次出现的地方。 - 选中单词,按
#
可以转到该单词上一次出现的地方。 - 在行末模式下输入
:ta foo
可以立刻找到foo函数的声明。
注意
要使用tags文件,默认是必须要在当前含有tags文件的地方打开vim才能加载到tags文件,否则需要在行末模式下手动指定:set tags=(你存放tags文件的路径,如果有多个路径的话中间用,隔开,而且貌似不支持*之类的通配符)
或者在/etc/vim/vimrc
里面加上这句话,或者在~/.vimrc
里面加上这句话。
晓得了这个工具,就像是打开了vim 插件类工具的大门,强大的 vim 配置就要诞生了。