ctags使用

转载 2013年12月03日 14:15:51

ctags − Generate tag files for source code

ctags 最先是用来生成C代码的tags文件,后来扩展成可以生成各类语言的tags, 有些语言也有专有的tags生成工具(比如java的jtags,  python的 ptags).

 

ctags 生成的 tags文件可用于 vi 来做代码导航和 vi的onmicppcomplete 插件来做代码补全。  ctags -e生成的 TAGS文件可以用于 emacs.

 

技巧

最简单使用是 :    ctags –R  .

-R 表示递归子目录,   这个命令的意思就是为 当前目录下和其子目录下的文件建立索引( 索引只包含了函数的定义位置)

 

ctags 把 .cpp当成 c++来处理, .c当成c语言来处理, .h当成C++的头文件处理。

 

如果你程序中有的.c文件其实是C++程序,这该怎么办?  使用ctags --langmap=c++:+.c 

 

像C++标准库stl中文件名没有后缀,怎么办? 使用 ctags –force-language=c++ 这样就把所有文件当成C++来处理了。

 

如果一个目录下只有部分文件需要建立 tags, 怎么办呢?

使用 find 命令查找文件,bash 做后续处理,生成一个文件列表 比如叫  project.files,

最后使用 ctags –L project.files 命令

 

高级

为了字段补全有效, 需要加上其它的额外信息

这是很多推荐的C++  需要的选项:   --c++-kinds=+p  --fields=+iaS --extra=+q

选项 fileds 用于指定每条标记的扩展字段域

−−fields=[+|−]flags

a   Access (or export) of class members   类成员的访问属性

f   File-restricted scoping [enabled]

Inheritance information   继承信息

Kind of tag as a single letter [enabled]

Kind of tag as full name

l   Language of source file containing tag

Implementation information

Line number of tag definition

Scope of tag definition [enabled]

Signature of routine (e.g. prototype or parameter list)    函数原型

Include the "kind:" key in kind field

Type and name of a variable or typedef as "typeref:" field [enabled]

选项c++-kinds 用于指定C++语言的 tags记录类型,  --c-kinds用于指定c语言的,  通用格式是  --{language}-kinds

使用 ctags --list-kinds=c++ 可以查看选项:

c  classes
d  macro definitions
e  enumerators (values inside an enumeration)
f  function definitions
g  enumeration names
l  local variables [off]
m  class, struct, and union members
n  namespaces
p  function prototypes [off]
s  structure names
t  typedefs
u  union names
v  variable definitions
x  external and forward variable declarations [off]

我最后使用的—{language}—kinds 选项是 

--c-kinds=+cdefgmnpstuv

--c++-kinds=+cdefgmnpstuv

extra 选项用于增加额外的条目:   f表示为每个文件增加一个条目,  q为每个类增加一个条目

 

多目录

如果一个工程有多个完全不同的目录 保持文件,这该怎么办呢? 可

以为不同的目录生成不同的 tags文件, 最后在 vi中使用 let tags+=tags_file1 和let tags+=tags_file2 方式添加

 

vi 技巧

vi中如果在vimrc文件中初始话tags变量为  tags;   (有分号) , 那么 vi会先在当前目录中搜索  tags文件,如果没有查找到, 会到父级目录中查找tags文件,依次类推。

 

tags的局限性

tags文件之包含了 函数, 类或变量的定义的信息,而没有包含使用信息。 如果要知道一个函数都在什么地方使用过,需要使用 cscope工具

 

资料

程序站点:  http://ctags.sourceforge.net/ctags.html

ctags文件格式:http://ctags.sourceforge.net/FORMAT

Vimer中资料:http://www.vimer.cn/2009/10/%E5%9C%A8vim%E4%B8%AD%E4%BD%BF%E7%94%A8ctags.html

http://www.vimer.cn/2010/04/%E5%9C%A8vimgvim%E4%B8%AD%E4%BD%BF%E7%94%A8ctags2-%E5%A5%87%E6%8A%80%E6%B7%AB%E5%B7%A7.html

ctags简明使用方法

ctags(Generate tag files for source code)是vim下方便代码阅读的工具,它可以在命令行下帮助程序员很容易地浏览源代码。ctags 最先是用来生成C代码的tags...
  • lida2003
  • lida2003
  • 2016年04月21日 19:52
  • 3107

linux实用技巧:你该使用ctags查找源码了

源码查找工具ctags
  • linux_player_c
  • linux_player_c
  • 2014年09月18日 20:43
  • 1606

将Vim配置成为一款强大的编辑工具之 ctags的安装和使用

ctags的安装和使用 ctags生成tags ctags扫描指定文件 ctags扫描指定目录
  • cpwolaichile
  • cpwolaichile
  • 2015年09月17日 15:26
  • 2085

sublime中使用ctags(详解)

为了阅读工程方便专门研究了一下sublime下面使用ctags的方法,有不懂的地方可以咨询qq:969352531,有漏洞的地方希望大家提出 1、下载sublime3.0 2、安装package co...
  • u014457593
  • u014457593
  • 2016年07月05日 20:31
  • 1185

Mac终端Vim如何安装使用ctags

来自: 放弃天堂的神(阳光再暖,也暖不到心) 2012-08-09 21:27:11 现在的问题是打开任何C文件都会提示  Taglist : Failed to Generate...
  • oMingZi12345678
  • oMingZi12345678
  • 2014年11月12日 22:07
  • 840

Centos下vim、ctags的配置及基本用法

一、vi/vim 基本使用方法       vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的配置和一小部分指令。由于对Unix及...
  • l_tudou
  • l_tudou
  • 2016年06月01日 13:36
  • 4900

Linux内核中ctags的安装及使用方法

我们都知道,在windows环境下查看源代码最方便的工具就是sourceinsight了,但是往往很多linux开发人员更喜欢在linux环境下进行开发,但是在linux的vim编辑器下就无法像在wi...
  • hanp_linux
  • hanp_linux
  • 2016年07月04日 12:04
  • 1644

ctags的简单配置及其使用

Tag文件简介:    tags文件(标签文件)是由ctags程序产生的一个索引文件, ctags程序其是叫"Exuberant Ctags", 是Unix上面ctags程序的替代品, 并且比它功能强...
  • Comedly
  • Comedly
  • 2016年08月01日 00:32
  • 759

增强ctags对lua的支持

ctags对lua支持不友好, 表现在 1) ctags默认对lua的支持仅限于识别function, 不支持识别常量定义. 2) 如果通过CLASS:MEMBER_FUN(...)方式以及CLA...
  • zdl1016
  • zdl1016
  • 2013年06月18日 11:12
  • 8947

在程序中跳来跳去: Ctags 的使用

哇, 这下可厉害了, Tag文件(标签文件)可是程序员的看家宝呀, 你可以不用它, 但你不能不知道它, 因为Linux内核源码都提供了"make tags"这个选项. 下面我们就来介绍Tag文件. ...
  • a89649997
  • a89649997
  • 2017年03月29日 22:57
  • 452
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ctags使用
举报原因:
原因补充:

(最多只允许输入30个字)