universal-ctags/ctags

GitHub: universal-ctags/ctags

一个持续维护的 ctags 实现,为多种编程语言生成标签文件以支持源码导航和代码分析。

Stars: 7099 | Forks: 651

# Universal Ctags [![Coverity Scan Build Status](https://scan.coverity.com/projects/4355/badge.svg)](https://scan.coverity.com/projects/4355) [![Coverage Status](https://coveralls.io/repos/universal-ctags/ctags/badge.svg?branch=master&service=github)](https://coveralls.io/github/universal-ctags/ctags?branch=master) [![Build status](https://ci.appveyor.com/api/projects/status/6hk2p5lv6jsrd9o7/branch/master?svg=true)](https://ci.appveyor.com/project/universalctags/ctags/branch/master) [![RTD build status](https://readthedocs.org/projects/ctags/badge)](https://docs.ctags.io) [![CircleCI Build Status](https://dl.circleci.com/status-badge/img/gh/universal-ctags/ctags/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/universal-ctags/ctags/tree/master) ![GitHub Actions/VALGRIND](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/2ca7bf2b6d191048.svg) [![Gurubase](https://img.shields.io/badge/Gurubase-Ask%20Universal%20Ctags%20Guru-006BFF)](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, 云安全监控, 代码导航, 代码索引, 代码补全辅助, 代码阅读, 多语言支持, 安全测试框架, 客户端加密, 客户端加密, 开发工具, 文本编辑器插件, 标签文件, 源代码分析, 符号索引, 解析器, 软件维护, 逆向工具, 静态分析