专栏首页北京马哥教育linux实用技巧:你该使用ctags查找源码了

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

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


1.ctags简介: “哦,这个多的文件,我该如何去查看XX函数的实现!”相信这是很多朋友的抱怨。太多的文件导致我们无法去定位一个函数的实现或者一个宏定义的位置。显然对于源码的阅读和个人的学习都是非常不利的。多么希望有一个软件能够输入命令就能够精确的定位函数的位置。是的,现在有这么一个工具:ctags,它需要和vim编辑器配合使用,让源码阅读可以更加轻松。 什么是ctags? ctags(Generate tag files for source code)是vim下方便代码阅读的工具。尽管ctags也可以支持其它编辑器,但是它正式支持的只有VIM。并且VIM中已经默认安装了Ctags,它可以帮助程序员很容易地浏览源代码。 ctags更新地址:http://ctags.sourceforge.net/,这个网站是ctags的官方网站,你可以在上面下载到关于ctags的最新内容。 ctags能够定位什么内容? 1)用#define定义的宏 2)枚举型变量的值 3)函数的定义、原型和声明 4)名字空间(namespace) 5)类型定义(typedefs) 6)变量(包括定义和声明) 7)类(class)、结构(struct)、枚举类型(enum)和联合(union) 8)类、结构和联合中成员变量或函数 2.配置自己的环境满足ctags: 安装ctags,如果是redhat,则直接使用yum命令安装:

在指定的源码位置生成tags文件,并且我们添加很多参数来完善ctags的功能(为了体现其功能的强大,我用它来生成linux源码的tags文件):

然后我们查看tags内容就可以发现,原来tags就是linux内核代码中各个元素的索引,这也就是ctags结合vim可以快速进行定位的原因了(查询就是通过这个文件内容来定位的):

tags路径必须写入vim的配置文件中,才能在vim里面正确跳转,所以我们要进行添加:

完成之后我们就可以进行查找了,这里我们以printf的为例(你很快就会见识到ctags的威力了),如果是有经验的程序员,我想你一定会很快的反应出printf函数在什么文件中,呵呵。还好有经验的人并不是很多。。。 ctags的使用方法有一下几种: 1.直接在命令行上操作:

2.在vim的模式下用“:ta ”命令:

3.在光标制定的位置下直接使用“ctrl+]”,就可以定位到函数的定义位置: 关于ctags的用法有很多,以下是我们列举的部分: "Ctrl-o"退回原来的地方; [{ 转到上一个位于第一列的"{"; }] 转到下一个位于第一列的"{"; { 转到上一个空行; } 转到下一个空行; gd 转到当前光标所指的局部变量的定义; * 转到当前光标所指的单词下一次出现的地方 ; # 转到当前光标所指的单词上一次出现的地方; 关于ctags更多的命令大家可以查看man手册,以后妈妈再也不用担心我读源代码了。。。^_^

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2014-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 8种主流NoSQL数据库对比

    摘要:虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。

    小小科
  • 100行Python代码自动抢火车票!

    今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool。 准备工具: 12306网站用户名和密码 Python 2.7 chrome浏览器及下载chrome...

    小小科
  • 8种主流NoSQL数据库对比

    摘要:虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。 ...

    小小科
  • 快速学习-Spring Data JPA 多表设计

    从图可以看出,系统设计的三种实体关系分别为:多对多、一对多和一对一关系。注意:一对多关系可以看为两种: 即一对多,多对一。所以说四种更精确。

    cwl_java
  • OpenStack更新用户名

    命令语法 openstack user set user_name --name username_new 样例 openstack user se...

    院长技术
  • 小白也能看懂的插件化DroidPlugin原理(三)-- 如何拦截startActivity方法

    前言:在前两篇文章中分别介绍了动态代理、反射机制和Hook机制,如果对这些还不太了解的童鞋建议先去参考一下前两篇文章。经过了前面两篇文章的铺垫,终于可以玩点真...

    codingblock
  • 云计算是过去式了,接下来是边缘计算的时代?

    很多营销人员现在已经习惯于云计算带来的优势,但是新的技术发展趋势正在逐步出现,可能会破坏云计算,或者从根本上重新确定云计算如何在边缘运营,新的技术趋势是边缘计算...

    SDNLAB
  • WPF初体验

    逍遥剑客
  • 李理:自动梯度求解 反向传播算法的另外一种视角

    用户1737318
  • 倡导“科技向善”,腾讯做了什么?

    近日,腾讯发布2018年企业社会责任报告,全面展示“数字领航,科技向善”的实践。 用科技打造未成年人防沉迷系统,跨年龄人脸识别技术让1000多个家庭团聚,会救...

    腾讯大讲堂

扫码关注云+社区

领取腾讯云代金券