【ctags功能】:
为源码的变量/对象、结构体/类、函数/接口、宏等产生索引文件,以便快速定位。目前支持41种语言,这里仅以C/C++为例:ctags可以产生c/c++语言所有类型的索引文件,具体如下:
[plain] view plain copy -> class names(类名) -> macro definitions(宏定义) -> enumeration names(枚举名) -> enumerators(枚举变量) -> function definitions(函数定义) -> function prototypes/declarations(函数定义/声明) -> class, interface, struct, and union data members(类,接口,结构体,联合体) -> structure names(结构体名) -> typedefs(别名) -> union names(联合体名) -> variables (definitions and external declarations)变量【ctags的安装】 1)在线安装:
sudo apt-get install ctags (ubuntu)
(RedHat系列使用:yum install ctags) 若不成功,可能是因为源的问题,换一下软件源update后重新执行上述命令即可。 2)手动下载安装: 下载地址 Official site: http://ctags.sourceforge.net/ VIM online: http://www.vim.org/scripts/script.php?script_id=610 参考步骤(以5.8版本ctags-5.8.tar.gz为例) 解压后 $ cd ctags-5.8 $ ./configure $ make # make install 安装结束后,使用ctags命令测试是否成功 或whatis ctags, whereis ctags等
【生成tags文件】 安装成功后,要为源码文件生成tags文件,才可享受ctags为阅读代码带来的便利。
$ ctags -R 递归的为当前目录及子目录下的所有代码文件生成tags文件
为某些源码生成tags文件,使用如下命令 $ ctags filename.c filename1.c file.h 或 $ ctags *.c *.h
为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是: ctags -R --c++-kinds=+px --fields=+iaS --extra=+q 其中: 选项c++-kinds 用于指定C++语言的 tags记录类型, --c-kinds用于指定C语言的, 通用格式是 --{language}-kinds 选项 fileds 用于指定每条标记的扩展字段域 extra 选项用于增加额外的条目: f表示为每个文件增加一个条目, q为每个类增加一个条目
【使用方法】 在vim打开源码时,指定tags文件,才可正常使用,通常手动指定,在vim命令行输入: :set tags=./tags(当前路径下的tags文件) 若要引用多个不同目录的tags文件,可以用逗号隔开
或者,设置 ~/.vimrc,加入一行,则不用手动设置tags路径: set tags=~/path/tags
若要加入系统函数或全局变量的tag标签,则需执行: ctags -I __THROW –file-scope=yes –langmap=c:+.h –languages=c,c++ –links=yes –c-kinds=+p --fields=+S -R -f ~/.vim/systags /usr/include /usr/local/include 并且在~/.vimrc中添加(亦可用上面描述的手动加入的方式): set tags+=~/.vim/systags 这样,便可以享受系统库函数名补全、原型预览等功能了。
如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加: set tags=tags; set autochdir
设置好了tags文件,在定位变量/函数的定义时,最常用的快捷键是: Ctrl + ] 跳转到变量或函数的定义处,或者用命令 :ta name 而使用快捷组合键 Ctrl + o/t 返回到跳转前的位置。
另外,ctags不会生成局部变量的索引,不过可以使用gd组合键(对光标所在处的word进行快捷查找定位)来定位,也是相当快捷的。
$ vim -t myAdd 用vim打开文件时,添加参数-t funcName会自动打开定义该函数的文件并定位到定义首行,上面这句就是找到myAdd定义的文件打开并将光标置于定义的第一行处。
:tags 会列出查找/跳转过程(经过的标签列表)
另外,附上vim环境中其他较为好用的快捷键: * 定位至当前光光标所指单词的下一次出现的地方 # 定位至当前光光标所指单词的上一次出现的地方 n 定位至跳至已被标记出的单词下一次出现的地方 shift+n 定位至跳至已被标记出的单词上一次出现的地方
关于更详细的ctags用法,vim中使用 :help tags