您的位置:首页 > 其它

在Vim中使用ctags

2016-05-11 13:31 225 查看
如何在Vim中使用ctags?之前在《把Vim打造成真正的IDE》系列里已经讲过大致的ctags在vim中的使用,这篇文章我们就详细的讲一下。

首先要明白,ctags是什么?

官方的解释是:

产生标记文件以帮助在源文件中定位对象。

其生成的标记文件tags中包括这些对象的列表:

用#define定义的宏

枚举型变量的值

函数的定义、原型和声明

名字空间(namespace)

类型定义(typedefs)

变量(包括定义和声明)

类(class)、结构(struct)、枚举类型(enum)和联合(union)

类、结构和联合中成员变量或函数

那么我们用怎样的参数来使ctags正常的生成我们需要的tags文件呢?在这里我们就不去挨个学习那些枯燥的参数了,直接参看 omnicppcomplete 提供的ctags生成语句:

ctags -R –c++-kinds=+px –fields=+iaS –extra=+q .

每个参数解释如下:

-R:ctags循环生成子目录的tags
–c++-kinds=+px :ctags记录c++文件中的函数声明和各种外部和前向声明
–fields=+iaS :ctags要求描述的信息,其中i表示如果有继承,则标识出父类;a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);S表示如果是函数,则标识函数的signature。
–extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags对同一个语法元素再记一行,这样可以保证在VIM中多个同名函数可以通过路径不同来区分。

OK,那么tags文件就生成好啦,利用这个文件我们可以做很多强大的事情,包括前面用过的插件,omnicppcomplete、taglist、showfunc之类的,都是依赖于它的。

那么除了插件上的作用外,我们用户在vim里面怎么使用他呢?

其实最简单的就是:

把光标移动到某个元素上,CTRL+],就会跳转到对应的定义啦。CTRL+o可以回退到原来的地方。

还有一个操作经常被人忽略,就是,如果当前光标下是个局部变量,在VIM里输入gd的话,就会跳到这个局部变量的定义处,也是非常方便滴~~

另外,tags必须在vim运行的当前目录,才能在vim里面正确跳转,当然也不是没有办法解决:

set tags+=tags的文件路径

不过如果像我前面文章说的那样定义了F12来快速生成tags的话( 快速连接 ),也不会经常用到更改路径吧,哈哈。

顺便说一句,tags生成路径最好不要包含中文哦~~

OK,在Vim中使用ctags就到这里,下次我们会一起看看据说ctags的升级替代品,cscope~

另附 ctags官方下载地址 ,目前最新版本为5.8

后记:

在用-R直接生成的tags的时候,如果无关的文件太多,tags生成的会非常而且慢,比如cocos2d-x的项目。

解决的方法比较简单,参考了cscope生成 cscope.files的思路:

find . -name "*.h" -o -name "*.c" -o -name "*.cpp" -o -name "*.m" -o -name "*.mm" -o -name "*.java" -o -name "*.py" > src.files
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q -L src.files


这样生成的速度就会快很多啦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: