当前位置: 首页 > 工具软件 > Ctags > 使用案例 >

ctags 基本使用方法

齐文栋
2023-12-01

ctags 基本使用方法

简介

ctags(Generate tag files for source code)是vim下方便代码阅读的工具。尽管ctags也可以支持其它编辑器,但是它正式支持的只有 Vim。并且 Vim 中已经默认安装了 ctags,它可以帮助程序员很容易地浏览源代码。

ctags 最先是用来生成C代码的tags文件,后来扩展成可以生成各类语言的tags, 有些语言也有专有的tags生成工具(比如java的jtags, python的 ptags)。ctags 支持的语言可以通过这个网站查看,目前共41种,基本上主流的 C/C++、Java、Python、C#、JavaScript、MATLAB、Assembler 等语言都是支持的。

安装

ubuntu (debian) 直接安装

Ubuntu系统(Debian),可以直 apt 接安装:

sudo apt-get install ctags

源码编译安装

ctags 官网下载源码,解压安装:

tar -xzvf ctags-5.8.tar.gz
cd ctags-5.8/
./configure
make
sudo make install

安装检验

安装完成后执行命令:

ctags --version

若正常输出类似以下的版本信息,则安装成功:

Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Dec 14 2021, 22:52:05
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Optional compiled features: +wildcards, +regex

使用

RTFM:man ctags

生成索引文件

在源码目录下执行

ctags –R .

-R 表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录。. 表示当前目录,结合起来就是当前目录及所有子目录下文件。这条命令会在当前目录下产生一个 tags文件,当用户在当前目录中运行vi时,会自动载入此tags文件。Tags文件中包括这些对象的列表:

  • 用 #define 定义的宏枚举型变量的值函数的定义
  • 原型和声明名字空间(namespace)
  • 类型定义(typedefs)
  • 变量(包括定义和声明)
  • 类(class)
  • 结构体(struct)
  • 枚举类型(enum)
  • 联合体(union)

类、结构和联合中成员变量或函数 Vim 用这个 tags 文件来定位上面这些做了标记的对象。

配置

使用 sudo vim /etc/vim/vimrc 编辑vim的配置文档,在其中加入如下命令:

set tags=/home/zhouyl/linux-3.4.7/tags;后面的路径是使用 ctags -R . 后生成的tags文件所在目录,如果需要配置多个 tags,只需如下再添加即可

set tags=/home/zhouyl/rap/libpcap-1.3.0/tags;
set autochdir

注意:运行vim的时候,必须在“tags”文件所在的目录下运行。如果要在该目录的子目录下使用 ctags,可在 Vim 配置文件中再加入:

set tags=./tags;,tags

常用命令

ctags 最常用的命令:

  1. ctags –R . 上面介绍过了,不再赘述
  2. Ctrl+ ] 跳到光标所在变量的定义处
  3. Ctrl+ t 返回查找或跳转,从哪里跳过来的跳回哪里,即使用了很多次 Ctrl+],该命令也会回到最初一次的位置
  4. vi –t tag 找到名为 tag 的变量的定义处
  5. g] 列出变量的所有引用供用户选择
  6. :ts tagslist,同 g]
  7. :tp tagspreview,上一个tag标记文件
  8. :tn tagsnext),下一个tag标记文件

以上 : 是 Vim 中从正常模式切换到底行命令模式。在完成编码后,可以直接删掉tags文件。

https://baike.baidu.com/item/ctags/3470337?fr=aladdin

https://www.bilibili.com/video/BV1PL411M7bg?from=search&seid=12655157522675339145&spm_id_from=333.337.0.0

 类似资料: