ctags的如何生成tags文件
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文件相关推荐
- ctags对部分目录生成tags
最近在研究Tiny6410上的uboot移植,看uboot源码时,生成tags文件用的是最粗暴的方法:"ctags -R *",由于某些函数在各个平台下都有实现,导致在用" ...
- 用python实现一个按需生成用于vim跳转的tags文件的小程序
初学python,找个有用的来练手.选定了一个我早就想做的让vim按需生成tags跳转文件的小程序. vim的tags用于跳转的好处自是不用多说,但是如何生成tags确实困扰我的一大问题,用VS的都知 ...
- vim 插件_Vim自动生成tags插件vim-gutentag使用方法
在常规的使用ctags生成tag标签文件实现跳转的方式下,每次需要更新tags文件时都需要手工运行 ctags -R 生成当前项目所有源文件对应的tag标签文件. 当工程文件多.文件更新频繁时,上述生 ...
- Vim: 使用tags文件扩展YCM对C族语言第三方库的代码自动补全功能
前言 在众多Vim编辑器的自动补全插件中,YouCompleteMe(YCM)绝对是最好用的插件之一,但其配置过程往往令初学者望而却步.经过笔者多年折腾,至今基本达到满足日常使用水平. 如果读者对Yo ...
- tags文件生成及使用
http://www.winu.cn/space-14160-do-blog-id-76086.html ctags可以分析程序生成tag文件为vim所用,从而在编写程序时实现函数原型.数据结构声明等 ...
- php vim 补全,Vim 不使用 tags 文件补全 PHP 代码
小朋友们大家好,还记得我是谁吗?对了!我就是爱折腾 VIM 的 vimer.今天要给大家讲一个 Vim 下代码补全的新故事. 记得前不久,我还给大家介绍过使用 ctags + Vim 来实现代码补全和 ...
- Aspose-Cells结合Apache POI生成excel文件以及转换为pdf
最近有个需求是需要将数据库中的符合条件的交易流水导出生成为excel,并转换为pdf,提供给客户下载,客户下载核对并签章. 需要用到的jar包依赖: <dependency><gro ...
- SpringBoot+Vue+mybatis生成pdf文件(表头跟页码,适应上传linux服务器后的操作)
SpringBoot+Vue+mybatis生成pdf文件(表头跟页码,适应上传linux服务器后的操作) 为什么使用后端去生成 说明 依赖 后端目录 控制器代码 模板代码 前端代碼 最終效果 为什么 ...
- 如何动态生成pdf文件?
pdfService系统 一. 背景 在许多开发需求中都有动态生成pdf文件的需求,例如根据已有的json字符串渲染到一个表格中,然后生成对应的PDF文档,以往的解决方法是调用许多个接口生产pdf文件 ...
- Python的py文件生成pyd文件
使用 py2exe 打包 Python 程序 Python的py文件生成pyd文件 源代码: git@gitee.com:menglingzhi/cython_test.git 另外python打包w ...
最新文章
- 基于双门限法的端点检测
- linux 修改home 目录
- WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程
- Redis Zrevrangebyscore 命令
- 详解 Java 中 4 种 I/O 模型
- html表单的课后心得体会,web前端学习心得体会范文
- LeetCode 45 跳跃游戏||
- Android Manager之SensorManager---距离传感器
- 我的世界服务器如何做无限箱子,《我的世界》无限存储箱子制作方法 制作流程介绍...
- Debian添加开机启动项
- 五子棋游戏程序记录和复盘功能设置
- 多线程(一)线程和进程的区别
- 各个 .NET 平台的 UI 框架比较
- 植物大战僵尸2android最新版,植物大战僵尸2
- 山西经济林栽培技术章节考试题
- X86逆向14:常见的脱壳手法
- selenium自动化模拟登录微博
- 电脑数据备份软件哪个好用:试试更专业的数据备份与恢复能力俱佳的Macrium Reflect中文版吧 | 含macrium reflect使用指南
- 【念7.29】自鱿人
- 差别阈限法,其依据是韦伯定律还是费希纳定律?|小白心理-312/347考研答疑