Universal Ctags (abbreviated as u-ctags) is a maintainedimplementation of ctags.ctags generates an index (or tag) file of language objects found in sourcefiles for programming languages.This index makes it easy for text editors and other tools to locate the indexeditems.
Exuberant Ctags (e-ctags) maintained by DarrenHiebert, the ancestor of Universal Ctags, improved traditional ctags withmulti-language support, the ability for the user to define new languagessearched by regular expressions (called optlib in Universal Ctags), and theability to generate emacs-style TAGS files.But the activity of the project unfortunately stalled.
Universal Ctags has the objective of continuing the development of ExuberantCtags.Reza Jelveh reza.jelveh@gmail.com initially created a personal fork ofExuberant Ctags on GitHub.As interest and participation grew, it was decided to move development to adedicated project as Universal Ctags.The goal of this project is to maintain a common/unified working space wherepeople interested in making ctags better can work together.
Some of the major features of Universal Ctags are:
more numbers of improved language supportnew extended C/C++ language parser, etc.fully extended optlib (a feature to define a new language parser from acommand line)interactive mode (experimental)The latest build and packageIf you want to try the latest Universal Ctags without building it yourself...
WindowsDaily builds are available at the ctags-win32 project.Go to the releases page to download zip packages.
Unix-likeNightly builds are available at the ctags-nightly-build project.Go to the releases page to download tarball archives.
MacRecent builds are available via the universal-ctags Homebrew formula.
SnapGo to ctags-snap andclone the ctags-snap repo. Then, follow instructions to build thesnap package of Universal Ctags. Snapcraft will automatically fetch the sourcecode from GitHub.
How to build and installTo build with Autotools (Autoconf and Automake) on GNU/Linux, OSX, or Windows 10 WSL,
$ 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 installGNU make is assumed as the make command.
Seedocs/autotools.rstfor more information.
To build on Windows, seedocs/windows.rstfor more information.
To build on OSX, seedocs/osx.rstfor more information.
ManualThe primary documents of Universal Ctags are man pages.Users should first consult thectags(1), and other manpages if necessary.
Universal Ctags Hacking Guide, which also includes theman pages, is primarily for developers and provides additional information tothe man pages, including experimental features.
See also */README.md on this repository.
Differences from exuberant-ctagsYou may be interested in how Universal Ctags is different from Exuberant Ctags.Seectags-incompatibilities(7)and Introduced changes for details.
The most significant incompatible changes:
Universal Ctags doesn't load ~/.ctags and ./.ctags at starting up time.Instead, it loads ~/.ctags.d/*.ctags and ./.ctags.d/*.ctags.
Universal Ctags is more strict about characters that can beused in kind letters and kind names than Exuberant-ctags.
The letter must be an alphabetical character ([a-zA-EG-Z]).F is reserved for file kind.
The first character of the name must be alphabetic, andthe rest characters must be alphanumeric ([a-zA-Z][a-zA-Z0-9]*).
The detailed background is explained in#1737.
If you want to reuse your .ctags written for Exuberant-ctags,you must review kind letters and names defined with --regex-=...options. When updating the definitions, using --kinddef-=... optionis appreciated.
CVE-2022-4515It is not affected to Universal Ctags.It was fixed in e00c55d7a0204dc1d0ae316141323959e1e16162 in 2016. Thanks to the reporter.
Pull-requests are welcome!