tags 在使用vim编程和浏览代码是非常有用。可以用CTRL+]和CTRL+t 来回跳转关键字。
先生成自己工作目录的tags。最简单粗暴用法:

$cd yourwork
$ctags -R *

这样会生成一个tags文件。(注:对于gvim的话,需要进入命令提示符下,cd到工作目录,来产生tags文件,直接在gvim去生成的话,会出现tags生成在上一级目录的情况)
不过,这种有个问题,成员变量没有包含在里面。所以自动完成对象的成员时没有提示。
解决办法:

$ctags -R --fields=+iaS --extra=+q *

–fields=[+|-]flags
–fields指定tags的可用扩展域(extension fields),以包含到tags入口。
i:继承信息Inheritance information
a:类成员的访问控制信息 Access (or export) of class members
S: 常规签名信息,如原型或参数表 Signature of routine(e.g. prototype or parameter list)
–extra=[+|-]flags
指定是否包含某种扩展信息到tags入口。
q:包含类成员信息(如c++,java,Eiffel)。
但就算是C 语言的结构,也需要这两个参数设置才能获取成员信息。

这样就能自动完成结构和类的成员了。

但是,对于系统的函数,还是没有跳转。如socket定义,inetaddr_in这样的结构没有自动变量完成。
最简单做法:

$ctags --fields=+iaS --extra=+q -R -f ~/.vim/systags /usr/include /usr/local/include

然后在.vimrc里设置

set tags+=~/.vim/systags

这样虽然基本能跳转到系统函数定义,一个问题是某些系统函数并没有加入到systags里。
如/usr/incluce/socket.h的socket系列函数,memset等很多关键函数都没有到tag里:

extern int listen (int __fd, int __n) __THROW;

这是因为 __THROW的宏定义让ctags不再认为该系列函数是函数。
同理,如memcpy系列函数:
如/usr/include/string.h的

extern int strcmp (__const char *__s1, __const char *__s2)__THROW __attribute_pure__ __nonnull ((1, 2));

还有attribute_pure ,nonull等属性,都需要忽略。如果需要#if 0里面的定义,可以–if0=yes来忽略 #if 0这样的定义。

$ctags -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --c++-kinds=+p --fields=+iaS --extra=+q -R -f ~/.vim/systags /usr/include /usr/local/include

这样.vim/systags里面是全的,但内容过多。一个函数定义的跳转,会有几十个候选。这时我们可以简化一下,将-R去掉,自己指定目录:

$ctags -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --c++-kinds=+p --fields=+iaS --extra=+q  -f ~/.vim/systags /usr/include/* /usr/include/sys/* /usr/include/bits/*  /usr/include/netinet/* /usr/include/arpa/* /usr/include/mysql/*

还可以包含一些自己编程需要的路径。注意后面加*号。
这样生成的系统tags就少多了。不会有太多不相干的定义。

另外在vim中将光标移动到#include <xxx.h>头文件名中,按esc,gf(助记词:goto file),即可查看头文件

转载于:https://www.cnblogs.com/littlewrong/p/8243839.html

ctags的如何生成tags文件相关推荐

  1. ctags对部分目录生成tags

    最近在研究Tiny6410上的uboot移植,看uboot源码时,生成tags文件用的是最粗暴的方法:"ctags -R *",由于某些函数在各个平台下都有实现,导致在用" ...

  2. 用python实现一个按需生成用于vim跳转的tags文件的小程序

    初学python,找个有用的来练手.选定了一个我早就想做的让vim按需生成tags跳转文件的小程序. vim的tags用于跳转的好处自是不用多说,但是如何生成tags确实困扰我的一大问题,用VS的都知 ...

  3. vim 插件_Vim自动生成tags插件vim-gutentag使用方法

    在常规的使用ctags生成tag标签文件实现跳转的方式下,每次需要更新tags文件时都需要手工运行 ctags -R 生成当前项目所有源文件对应的tag标签文件. 当工程文件多.文件更新频繁时,上述生 ...

  4. Vim: 使用tags文件扩展YCM对C族语言第三方库的代码自动补全功能

    前言 在众多Vim编辑器的自动补全插件中,YouCompleteMe(YCM)绝对是最好用的插件之一,但其配置过程往往令初学者望而却步.经过笔者多年折腾,至今基本达到满足日常使用水平. 如果读者对Yo ...

  5. tags文件生成及使用

    http://www.winu.cn/space-14160-do-blog-id-76086.html ctags可以分析程序生成tag文件为vim所用,从而在编写程序时实现函数原型.数据结构声明等 ...

  6. php vim 补全,Vim 不使用 tags 文件补全 PHP 代码

    小朋友们大家好,还记得我是谁吗?对了!我就是爱折腾 VIM 的 vimer.今天要给大家讲一个 Vim 下代码补全的新故事. 记得前不久,我还给大家介绍过使用 ctags + Vim 来实现代码补全和 ...

  7. Aspose-Cells结合Apache POI生成excel文件以及转换为pdf

    最近有个需求是需要将数据库中的符合条件的交易流水导出生成为excel,并转换为pdf,提供给客户下载,客户下载核对并签章. 需要用到的jar包依赖: <dependency><gro ...

  8. SpringBoot+Vue+mybatis生成pdf文件(表头跟页码,适应上传linux服务器后的操作)

    SpringBoot+Vue+mybatis生成pdf文件(表头跟页码,适应上传linux服务器后的操作) 为什么使用后端去生成 说明 依赖 后端目录 控制器代码 模板代码 前端代碼 最終效果 为什么 ...

  9. 如何动态生成pdf文件?

    pdfService系统 一. 背景 在许多开发需求中都有动态生成pdf文件的需求,例如根据已有的json字符串渲染到一个表格中,然后生成对应的PDF文档,以往的解决方法是调用许多个接口生产pdf文件 ...

  10. Python的py文件生成pyd文件

    使用 py2exe 打包 Python 程序 Python的py文件生成pyd文件 源代码: git@gitee.com:menglingzhi/cython_test.git 另外python打包w ...

最新文章

  1. 基于双门限法的端点检测
  2. linux 修改home 目录
  3. WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程
  4. Redis Zrevrangebyscore 命令
  5. 详解 Java 中 4 种 I/O 模型
  6. html表单的课后心得体会,web前端学习心得体会范文
  7. LeetCode 45 跳跃游戏||
  8. Android Manager之SensorManager---距离传感器
  9. 我的世界服务器如何做无限箱子,《我的世界》无限存储箱子制作方法 制作流程介绍...
  10. Debian添加开机启动项
  11. 五子棋游戏程序记录和复盘功能设置
  12. 多线程(一)线程和进程的区别
  13. 各个 .NET 平台的 UI 框架比较
  14. 植物大战僵尸2android最新版,植物大战僵尸2
  15. 山西经济林栽培技术章节考试题
  16. X86逆向14:常见的脱壳手法
  17. selenium自动化模拟登录微博
  18. 电脑数据备份软件哪个好用:试试更专业的数据备份与恢复能力俱佳的Macrium Reflect中文版吧 | 含macrium reflect使用指南
  19. 【念7.29】自鱿人
  20. 差别阈限法,其依据是韦伯定律还是费希纳定律?|小白心理-312/347考研答疑

热门文章

  1. 并发之AtomicIntegerFieldUpdater
  2. php 文件上传$_FILES中error返回值详解
  3. myeclipse自带tomcat
  4. visual studio2010中几个快捷键的使用
  5. irf和链路聚合综合实验
  6. java鼠标中键_java-selenium鼠标键盘操作Actions类和Robot
  7. 把Unity的jdk环境添加到环境变量
  8. Unity的Scrollbar
  9. java使用jacob语言实现阅读文字,文字转语音
  10. 6.3创建自己执行的二进制文件