Linux 命令速查
开发工具 man ctags

ctags

为源码生成标签索引,供编辑器快速跳转

返回

补充说明

ctags 扫描源文件,把函数、变量、宏、类等符号的位置写入 tags 文件,vi/vim、Emacs 等编辑器据此实现“跳转到定义”。传统实现是 Exuberant Ctags,目前维护活跃的是 Universal Ctags,两者命令行基本兼容。

常见流程:在项目根目录执行 ctags -R . 生成 tags,Vim 中用 Ctrl-] 跳转、Ctrl-t 返回;也可在 Vim 配置里设置多个 tags 路径。ctags -e 生成 Emacs 的 TAGS 格式,ctags -x 直接在终端列出符号。

注意:默认不会递归,需显式 -R;增量更新可用 --append=yes,但删除符号后旧条目仍会残留,必要时重建。Vim 需 set tags=./tags; 才能向上层目录查找。生成索引时应排除 .git、构建目录和第三方代码,避免噪声。

索引文件是纯文本,可提交到仓库也可本地生成;团队协作中通常不入库,而在构建流程里自动生成。

语法

ctags [选项] [文件 ...]

选项

  • -R / --recurse:递归处理目录;
  • -f 文件:指定输出文件(默认 tags);
  • -a / --append:追加而不是覆盖;
  • -e:生成 Emacs TAGS 格式;
  • -x:在标准输出打印符号表;
  • -L 文件:从文件读取待处理文件列表;
  • --exclude=模式:排除匹配的文件或目录;
  • --languages=列表:只处理指定语言;
  • --list-languages:列出支持的语言。

实例

# 递归为当前项目生成 tags
ctags -R .

# 排除构建目录和版本库
ctags -R --exclude=build --exclude=.git .

# 追加新文件到已有索引
ctags -a new_module.c

# 生成 Emacs 格式
ctags -e -R .

# 列出索引中的符号
ctags -x main.c | head

参考链接