ctags 小记
转: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]
i Inheritance information 继承信息
k Kind of tag as a single letter [enabled]
K Kind of tag as full name
l Language of source file containing tag
m Implementation information
n Line number of tag definition
s Scope of tag definition [enabled]
S Signature of routine (e.g. prototype or parameter list) 函数原型
z Include the "kind:" key in kind field
t 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
ctags 小记的更多相关文章
- [原]Paste.deploy 与 WSGI, keystone 小记
Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...
- ctags
ctags是vim中非常好用的一个标签工具,你可以使用ctags跳转到函数定义的位置.下面总结一下如何安装和使用. 安装:sudo apt-get install ctags
- MySql 小记
MySql 简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----- ...
- vim + ctags + taglist配置和使用
vim +ctags + taglist ,ctags+cscope 安装配置和使用 内容:VIM下ctags和taglist的安装配置方法:一键安装 ctags和cscope的方法 :vim语法高亮 ...
- Mac Vim + ctags 实现多目录跳转
set tags=tags; set autochdir :wq保存. 在源码根目录中输入ctags -R命令.后重启vim,打开src文件,就能使用Ctrl+] 或 g Ctrl+] 来实现跳转了. ...
- Git小记
Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...
- sublime下安装ctags
sublime下安装ctags 标签: sublime 当我们阅读代码时, 会遇到很多不明确的函数名, 此时, 我们需要查看这个函数的定义的地方, 在sublime下我们需要安装一个插件, Cta ...
- 广州PostgreSQL用户会技术交流会小记 2015-9-19
广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...
- 东哥读书小记 之 《MacTalk人生元编程》
一直以来的自我感觉:自己是个记性偏弱的人.反正从小读书就喜欢做笔记(可自己的字写得巨丑无比,尼玛不科学呀),抄书这事儿真的就常发生俺的身上. 因为那时经常要背诵课文之类,反正为了怕自己忘记, ...
随机推荐
- 【BZOJ2818】Gcd [莫比乌斯反演]
Gcd Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1<=x,y&l ...
- [bzoj1717][Usaco2006 Dec]Milk Patterns 产奶的模式——后缀数组
Brief Description 给定一个字符串,求至少出现k次的最长重复子串. Algorithm Design 先二分答案,然后将后缀分成若干组.判断有没有一个组的后缀个数不小于k.如果有,那么 ...
- LARGE_INTEGER类型
最近在研究Windows驱动程序开发,遇到这样一个语句: devExt->PortBase = (PUCHAR)(ULONG_PTR) portBasePA.QuadPart; 在源代码环境中 ...
- maven自动建立目录骨架
maven提供archetype插件,用于创建符合maven规定的目录骨架. 方式一: 命令行执行mvn archetype:generate,在回显中依次写入如下参数: 执行完成会自动的生成响应的标 ...
- phpstudy2014没有mysqldumpslow.pl及其在性能优化的作用
mysqldumpslow.pl的作用是监控mysql的性能瓶颈的 1)在phpstudy2014中没有这个mysqldumpslow.pl所以需要去下载一个然后放置于mysql/bin的文件夹中,由 ...
- Java坦克大战 (四) 之子弹的产生
本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...
- Android的简单应用(四)——字符串处理
在Java中,对字符串进行处理的方法很多,也可以通过导入相应的字符串处理的lib包来进行处理.不过今天要说的是Android中看到的两种处理字符串的方法. 一.正则表达式 其实正则表达式没有大家想象的 ...
- facets学习(1):什么是facets
ML 数据集可以包含数亿个数据点,每个数据点由数百(甚至数千)的特征组成,几乎不可能以直观的方式了解整个数据集.为帮助理解.分析和调试 ML 数据集,谷歌开源了 Facets,一款可视化工具. Fac ...
- Juel Getting Started
Getting Started The JUEL distribution contains the following JAR files: juel-api-2.2.x.jar - contain ...
- 删除某个ros包之后catkin_make冒错
CMake Error at /home/ubuntu/Workspaces/rosProject/workspace1/devel/share/costmap_2d/cmake/costmap_2d ...