ctags(1)
名称
ctags - 创建用于 ex 和 vi 的标记文件
用法概要
/usr/bin/ctags [-aBFtuvwx] [
-f tagsfile] file...
/usr/xpg4/bin/ctags [-aBFuvwx] [
-f tagsfile] file...
描述
ctags 实用程序基于指定的 C、C++、Pascal、FORTRAN、yacc(1) 和 lex(1) 资源为 ex(1) 创建标记文件。标记文件给出指定对象(在本例中为函数和 typedef)在一组文件中的位置。标记文件的每一行都包含对象名称、定义了该对象的文件以及该对象定义的地址指定。函数将通过模式进行搜索,typedef 将通过行号进行搜索。说明符是在行上的各个字段中指定的,由 SPACE 或 TAB 字符分隔。使用标记文件,ex 可以快速查找这些对象的定义。
通常情况下,ctags 将标记描述放置在一个名为 tags 的文件中;可以使用 –f 选项覆盖此行为。
名称以 .c 或 .h 结尾的文件将被认为是 C 或 C++ 源文件并将在其中搜索 C/C++ 例程和宏定义。名称以 .cc、 .C 或 .cxx 结尾的文件将被认为是 C++ 源文件。名称以 .y 结尾的文件将被认为是 yacc 源文件。名称以 .l 结尾的文件将被认为是 lex 文件。对于其他文件,则会首先检查它们是否包含任何 Pascal 或 FORTRAN 例程定义;如果未包含,则会再次对其进行处理以查找 C 定义。
在 C 或 C++ 程序中,标记 main 将被特殊对待。构成的标记是通过以下方式创建的:将 M 附加到 file 之前,并删除尾部的 .c、.cc、.C 或 .cxx(如果有),还将删除前导路径名组件。这使得 ctags 可以在具有多个程序的目录中使用。
选项
与输出相关的选项的优先顺序是:–x、–v,然后是其余的选项。支持以下选项:
- –a
将输出附加到现有的 tags 文件。
- –B
使用后向搜索模式 (?. . . ?).
- –f tagsfile
将标记描述放置在名为 tagsfile 而非 tags 的文件中。
- –F
使用前向搜索模式 (/. . . /)(缺省值)。
- –t
为 typedef 创建标记。/usr/xpg4/bin/ctags 缺省情况下为 typedef 创建标记。
- –u
在标记中更新指定的文件,也就是说,将删除对它们的所有引用,并且将新值附加到文件。注意:此选项是以一种相当慢的方式实现的;仅重新生成 tags 文件通常更快。
- –v
在标准输出上生成索引,列出函数名称、文件名称和页号(采用 64 行页面)。因为输出按词典顺序排序,所以通过 sort –f 运行输出可能更可取。
- –w
禁止警告诊断消息。
- –x
生成对象名称列表、定义了每个名称的行号和文件名,以及该行的文本,并在标准输出上输出该信息。这是可输出为脱机可读取函数索引的一个简单索引。
操作数
支持以下 file 操作数:
- file.c
基名以 .c 后缀结尾的文件将被视为 C 语言源代码。
- file.h
基名以 .h 后缀结尾的文件将被视为 C 语言源代码。
- file.f
基名以 .f 后缀结尾的文件将被视为 FORTRAN 语言源代码。
示例
示例 1 按字母顺序生成条目
将 ctags 与 –v 选项一起使用将按可能不是始终适合 vgrind 的某种顺序生成条目。要按字母顺序生成结果,您可能需要通过 sort –f 运行输出。
example% ctags -v filename.c filename.h | sort -f > index
example% vgrind -x index
示例 2 构建标记文件
要为根目录为 sourcedir 的目录分层结构中的 C 源文件构建标记文件,请首先创建一个空的标记文件,然后运行 find(1)。
example% cd sourcedir ; rm -f tags ; touch tags
example% find . \( -name SCCS -prune -name \\
'*.c' -o -name '*.h' \) -exec ctags -u {} \;
请注意,必须严格按照示例所示输入空格。
环境变量
有关影响 ctags 执行的以下环境变量的说明,请参见 environ(5):LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH。
退出状态
将返回以下退出值:
- 0
成功完成。
- >0
出现错误。
文件
- tags
输出标记文件
属性
有关下列属性的说明,请参见 attributes(5):
/usr/bin/ctags
|
|
可用性
|
developer/base-developer-utilities
|
|
/usr/xpg4/bin/ctags
|
|
可用性
|
system/xopen/xcu4
|
接口稳定性
|
Committed(已确定)
|
标准
|
|
|
另请参见
ex(1)、lex(1)、vgrind(1)、vi(1)、yacc(1)、attributes(5)、environ(5)、standards(5)
附注
对于 FORTRAN 和 Pascal,对函数、子例程和过程的识别是以一种非常简单的方式执行的。不会尝试处理块结构;如果在不同的块中有同名的两个 Pascal 过程,则会失败。
用于确定是查找 C 函数还是查找 Pascal 和 FORTRAN 函数的方法是 hack。
ctags 实用程序不了解有关 #ifdefs 的信息。
ctags 实用程序应当了解 Pascal 类型。要检测 typedef,需要依赖格式良好的输入。使用 –tx 将仅显示 typedef 的最后一行。