universal-ctags/ctags
GitHub: universal-ctags/ctags
一个持续维护的 ctags 实现,为多种编程语言生成标签文件以支持源码导航和代码分析。
Stars: 7099 | Forks: 651
# Universal Ctags
[](https://scan.coverity.com/projects/4355)
[](https://coveralls.io/github/universal-ctags/ctags?branch=master)
[](https://ci.appveyor.com/project/universalctags/ctags/branch/master)
[](https://docs.ctags.io)
[](https://dl.circleci.com/status-badge/redirect/gh/universal-ctags/ctags/tree/master)

[](https://gurubase.io/g/universal-ctags)
[Universal Ctags](https://ctags.io/)(缩写为 u-ctags)是一个*维护中* 的 `ctags` 实现。
`ctags` 为编程语言的源文件中找到的语言对象生成索引(或标签)文件。
这个索引使得文本编辑器和其他工具可以轻松定位被索引的项目。
由 Darren Hiebert 维护的 [Exuberant Ctags](http://ctags.sourceforge.net/)(e-ctags)是 Universal Ctags 的前身,它通过多语言支持、用户定义通过正则表达式搜索的新语言的能力(在 Universal Ctags 中称为 optlib),以及生成 emacs 风格 TAGS 文件的能力,改进了传统的 `ctags`。
但遗憾的是,该项目的活动已经停滞。
Universal Ctags 的目标是继续 Exuberant Ctags 的开发。
Reza Jelveh 最初在 GitHub 上创建了一个 Exuberant Ctags 的个人分支。
随着兴趣和参与度的增长,决定将其作为一个独立的项目 Universal Ctags 进行开发。
该项目的目标是维护一个通用/统一的工作空间,让有兴趣改进 ctags 的人可以一起工作。
Universal Ctags 的一些主要特性包括:
* 更多改进的语言支持
* 新的扩展 C/C++ 语言解析器等
* 完全扩展的 optlib(从命令行定义新语言解析器的功能)
* 交互模式(实验性)
## 最新构建和安装包
如果你想尝试最新的 Universal Ctags 而不想自己构建...
### Windows
每日构建版本可在 [ctags-win32](https://github.com/universal-ctags/ctags-win32) 项目中找到。
前往 [releases](https://github.com/universal-ctags/ctags-win32/releases) 页面下载 zip 包。
### Unix-like
夜间构建版本可在 [ctags-nightly-build](https://github.com/universal-ctags/ctags-nightly-build) 项目中找到。
前往 [releases](https://github.com/universal-ctags/ctags-nightly-build/releases) 页面下载 tarball 归档文件。
### Mac
近期构建版本可通过 [`universal-ctags` Homebrew formula](https://formulae.brew.sh/formula/universal-ctags) 获取。
### Snap
前往 [ctags-snap](https://github.com/universal-ctags/ctags-snap) 并克隆 `ctags-snap` 仓库。然后按照说明构建 Universal Ctags 的 snap 包。Snapcraft 将自动从 GitHub 获取源代码。
## 如何构建和安装
要在 GNU/Linux、OSX 或 Windows 10 WSL 上使用 Autotools(Autoconf 和 Automake)构建,
```
$ git clone https://github.com/universal-ctags/ctags.git
$ cd ctags
$ ./autogen.sh
$ ./configure # use --prefix=/where/you/want to override installation directory, defaults to /usr/local
$ make
$ make install # may require extra privileges depending on where to install
```
假定使用 GNU make 作为 `make` 命令。
更多信息请参阅
[`docs/autotools.rst`](https://github.com/universal-ctags/ctags/blob/master/docs/autotools.rst)。
要在 Windows 上构建,请参阅
[`docs/windows.rst`](https://github.com/universal-ctags/ctags/blob/master/docs/windows.rst)
了解更多信息。
要在 OSX 上构建,请参阅
[`docs/osx.rst`](https://github.com/universal-ctags/ctags/blob/master/docs/osx.rst)
了解更多信息。
## 手册
Universal Ctags 的主要文档是 man pages。
用户应首先查阅
[ctags(1)](https://docs.ctags.io/en/latest/man/ctags.1.html),如有必要再查阅[其他 man pages](https://docs.ctags.io/en/latest/man-pages.html)。
[Universal Ctags Hacking Guide](https://docs.ctags.io) 也包含 man pages,主要面向开发者,并提供了 man pages 之外的额外信息,包括实验性功能。
另请参阅本仓库中的 `*/README.md`。
## 与 exuberant-ctags 的差异
你可能对 Universal Ctags 与 Exuberant Ctags 有何不同感兴趣。
详情请参阅
[ctags-incompatibilities(7)](https://docs.ctags.io/en/latest/man/ctags-incompatibilities.7.html)
和 [Introduced changes](https://docs.ctags.io/en/latest/news.html)。
最显著的不兼容变化:
* Universal Ctags 在启动时不加载 `~/.ctags` 和 `./.ctags`。
相反,它加载 `~/.ctags.d/*.ctags` 和 `./.ctags.d/*.ctags`。
* Universal Ctags 对可用于种类字母和种类名称的字符比 Exuberant-ctags 更严格。
- 字母必须是字母字符(`[a-zA-EG-Z]`)。
`F` 保留给 `file` 种类。
- 名称的首字符必须是字母,其余字符必须是字母数字(`[a-zA-Z][a-zA-Z0-9]*`)。
详细的背景解释在
[#1737](https://github.com/universal-ctags/ctags/pull/1737) 中。
如果你想复用为 Exuberant-ctags 编写的 `.ctags`,
你必须检查使用 `--regex-=...` 选项定义的种类字母和名称。更新定义时,建议使用 `--kinddef-=...` 选项。
## [CVE-2022-4515](https://access.redhat.com/security/cve/CVE-2022-4515)
它不影响 Universal Ctags。
它已于 2016 年在 [e00c55d7a0204dc1d0ae316141323959e1e16162](https://github.com/universal-ctags/ctags/commit/e00c55d7a0204dc1d0ae316141323959e1e16162) 中修复。感谢报告者。
欢迎提交 Pull-requests!
标签:CTags, DevOps工具, Emacs, IDE支持, SOC Prime, Universal CTags, Vim, 云安全监控, 代码导航, 代码索引, 代码补全辅助, 代码阅读, 多语言支持, 安全测试框架, 客户端加密, 客户端加密, 开发工具, 文本编辑器插件, 标签文件, 源代码分析, 符号索引, 解析器, 软件维护, 逆向工具, 静态分析