转:http://www.cnblogs.com/napoleon_liu/archive/2011/01/23/1942738.html

简介

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 小记的更多相关文章

  1. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...

  2. ctags

    ctags是vim中非常好用的一个标签工具,你可以使用ctags跳转到函数定义的位置.下面总结一下如何安装和使用. 安装:sudo apt-get install ctags

  3. MySql 小记

    MySql  简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----- ...

  4. vim + ctags + taglist配置和使用

    vim +ctags + taglist ,ctags+cscope 安装配置和使用 内容:VIM下ctags和taglist的安装配置方法:一键安装 ctags和cscope的方法 :vim语法高亮 ...

  5. Mac Vim + ctags 实现多目录跳转

    set tags=tags; set autochdir :wq保存. 在源码根目录中输入ctags -R命令.后重启vim,打开src文件,就能使用Ctrl+] 或 g Ctrl+] 来实现跳转了. ...

  6. Git小记

    Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...

  7. sublime下安装ctags

    sublime下安装ctags 标签: sublime   当我们阅读代码时, 会遇到很多不明确的函数名, 此时, 我们需要查看这个函数的定义的地方, 在sublime下我们需要安装一个插件, Cta ...

  8. 广州PostgreSQL用户会技术交流会小记 2015-9-19

    广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...

  9. 东哥读书小记 之 《MacTalk人生元编程》

         一直以来的自我感觉:自己是个记性偏弱的人.反正从小读书就喜欢做笔记(可自己的字写得巨丑无比,尼玛不科学呀),抄书这事儿真的就常发生俺的身上. 因为那时经常要背诵课文之类,反正为了怕自己忘记, ...

随机推荐

  1. 【poj3415-Common Substrings】sam子串计数

    题意:  给出两个串,问这两个串的所有的子串中(重复出现的,只要是位置不同就算两个子串),长度大于等于k的公共子串有多少个. 题解: 这题好像大神们都用后缀数组做..然而我在sam的题表上看到这题,做 ...

  2. <script>中的async与defer属性

    1.script元素中的defer属性 1.1说明 使用该属性可以使脚本延迟到文档完全被解析和显示之后再按照原本的顺序执行,即告诉浏览器立即下载脚本,但延迟执行,该属性只对外部脚本有效 1.2使用方法 ...

  3. 【Linux驱动学习】SD卡规范学习

    摘要: 学习SD卡的相关规范,包括定义,硬件特性,数据传输,命令系统等.不涉及代码. 文章针对Linux驱动开发而写,以助于理解SD卡驱动,不会涉及过多硬件内容. 纲要: 1. SD卡介绍 2. SD ...

  4. Linux nc (netcat) 详解

    Linux nc (netcat) 详解 http://blog.csdn.net/michael493439861/article/details/7445454

  5. 【转】java中的集合和数组

    转载自:http://www.cnblogs.com/summers/p/4094260.html 数组Array和集合的区别: (1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型 ...

  6. [ Python - 13 ] 批量管理主机必备模块

    批量管理程序必备模块 optparse configparser paramiko optparse模块 简介:        optparse模块主要用来为脚本传递命令参数功能 使用步骤: 1. i ...

  7. 网站js埋点

    js埋点 1.埋点作用:  页面埋点的作用:其实就是用于流量分析.而流量的意思,包含了很多:页面浏览数(PV).独立访问者数量(UV).IP.页面停留时间.页面操作时间.页面访问次数.按钮点击次数.文 ...

  8. 什么时候该用 Apache Kafka

    rabbitMQ kafka https://coyee.com/article/12091-understanding-when-to-use-rabbitmq-or-apache-kafka Ap ...

  9. Selenium2+python自动化39-关于面试的题【转载】

    前言 最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下, 回答不妥的地方欢迎各位高手拍砖指点.   一.selenium中如何判断元素是否存在? 首先selen ...

  10. 开发者应该了解的API技术清单!

    英文原文:API-Driven Development 作为一名开发者,诚然编写代码如同作家提笔挥毫,非常有成就感与乐趣,但同时我也觉得删除代码是件不相伯仲的美事.为什么呢?因为在进行删除工作时,意味 ...