通用 ctags 可以在输出中生成一个标志,描述标签种类吗?

问题描述

我想在我的工具中显示一种用于解析 TAGS 文件标签。即:在我使用该工具显示的某些列表中的标记标识符之后附加“[func]”、“[macro]”、“[var]”等。

Universal-Ctags 能否识别标签类型并将其存储到输出文件中?如果是,如何运行它才能发生这种情况?

解决方法

如果您指定 -e 选项,

ctags 会生成一个 TAGS 文件。 TAGS 文件不包含类型信息。

如果不指定 -e 选项,ctags 会生成一个包含类型信息的标签文件。您的工具可以利用这些信息。

$ cat input.py 
def f():
    pass
v = []
$ ./ctags --fields=+K input.py 
$ cat tags
!_TAG_FILE_FORMAT   2   /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED   1   /0=unsorted,1=sorted,2=foldcase/
!_TAG_OUTPUT_EXCMD  mixed   /number,pattern,mixed,or combineV2/
!_TAG_OUTPUT_FILESEP    slash   /slash or backslash/
!_TAG_OUTPUT_MODE   u-ctags /u-ctags or e-ctags/
!_TAG_PATTERN_LENGTH_LIMIT  96  /0 for no limit/
!_TAG_PROC_CWD  /home/jet/var/ctags-github/ //
!_TAG_PROGRAM_AUTHOR    Universal Ctags Team    //
!_TAG_PROGRAM_NAME  Universal Ctags /Derived from Exuberant Ctags/
!_TAG_PROGRAM_URL   https://ctags.io/   /official site/
!_TAG_PROGRAM_VERSION   5.9.0   /p5.9.20210314.0/
f   input.py    /^def f():$/;"  function
v   input.py    /^v = []$/;"    variable

如果只想打印标识符和类型的名称,可以使用 ctags 的 -x 选项:

$ ./ctags --_xformat='%{name} [%{kind}]' -x -o - --fields=+K input.py 
f [function]
v [variable]