TAGS文件包含定义
一个TAGS
文件包含其中的函数和类中定义的列表。通常将其放置在项目的根目录中,如下所示:
^L
configure,3945
as_fn_success () { as_fn_return 0; }^?as_fn_success^A180,5465
as_fn_failure () { as_fn_return 1; }^?as_fn_failure^A181,5502
as_fn_ret_success () { return 0; }^?as_fn_ret_success^A182,5539
as_fn_ret_failure () { return 1; }^?as_fn_ret_failure^A183,5574
这使Emacs可以查找定义。基本导航是内置的find-tag
,但是etags-select
在有多个匹配项时提供了更好的UI。
您也可以使用TAGS文件完成代码。例如,公司的etags后端使用TAGS文件。
TAGS文件可以通过不同的工具构建
ctags
(以前称为“通用标签”或“旺盛的标签”)可以生成TAGS文件,并支持最广泛的语言。它在github上得到了积极维护。
Emacs附带了两个生成TAGS文件的程序,称为etags
和ctags
。Emacs的ctags
仅仅是etags
用相同的CLI界面,通用CTAGS。为避免混淆,许多发行版都将这些程序重命名(例如ctags.emacs24
在Debian上)。
还有用于生成TAGS文件的特定于语言的工具,例如jsctags
和hasktags
。
其他档案格式
ebrowse
是Emacs附带的C程序。它索引C / C ++代码并生成一个BROWSE
文件。ebrowse.el提供了通常的查找定义和完成。您也可以BROWSE
直接在Emacs中打开文件,以获取定义了代码库的类/功能的概述。
GNU全球都有自己的数据库格式,它由一个的GTAGS
,GRTAGS
和GPATH
文件。您可以使用gtags
解析C / C ++代码的命令来生成这些文件。对于其他语言,GNU Global可以读取通用ctags生成的文件。
GNU Global还提供一个CLI界面,用于询问更复杂的问题,例如“在何处提到此符号?”。它附带了Emacs软件包gtags.el,但是ggtags.el在访问GNU Global数据库方面也很受欢迎。
Cscope的精神类似于GNU Global:它将C / C ++解析为自己的数据库格式。它还可以回答诸如“找到此功能的所有呼叫者/被呼叫者”之类的问题。
另请参阅此HN关于比较global和cscope的讨论。
客户端/服务器项目
rtags使用持久性服务器解析和索引C / C ++。它使用clang解析器,因此可以很好地处理C ++。它附带了一个Emacs软件包来查询服务器。
google-gtags是一个将大型TAGS文件存储在服务器上的项目。查询服务器时,它将提供与搜索相关的TAGS文件的子集。
语义(CEDET)
Semantic是内置的Emacs软件包,其中包含用于C / C ++的解析器,因此它也可以找到定义。它还可以从TAGS文件,csope数据库和其他来源导入数据。CEDET还包括使用此数据的IDE样式功能,例如,生成类层次结构的UML图。
GTags
您链接到的项目已经死了。如果有人在谈论gtags
,他们可能指的是GNU Global。