HOME

TheInfoList



OR:

Ctags is a programming tool that generates an
index Index (or its plural form indices) may refer to: Arts, entertainment, and media Fictional entities * Index (''A Certain Magical Index''), a character in the light novel series ''A Certain Magical Index'' * The Index, an item on a Halo megastru ...
(or tag) file of names found in source and header files of various programming languages to aid code comprehension. Depending on the language, functions, variables,
class Class or The Class may refer to: Common uses not otherwise categorized * Class (biology), a taxonomic rank * Class (knowledge representation), a collection of individuals or objects * Class (philosophy), an analytical concept used differentl ...
members, macros and so on may be indexed. These tags allow definitions to be quickly and easily located by a text editor, a code search engine, or other utility. Alternatively, there is also an output mode that generates a cross reference file, listing information about various names found in a set of language files in human-readable form. The original Ctags was introduced in
BSD Unix The Berkeley Software Distribution or Berkeley Standard Distribution (BSD) is a discontinued operating system based on Research Unix, developed and distributed by the Computer Systems Research Group (CSRG) at the University of California, Berk ...
3.0 and was written by Ken Arnold, with Fortran support by Jim Kleckner and
Pascal Pascal, Pascal's or PASCAL may refer to: People and fictional characters * Pascal (given name), including a list of people with the name * Pascal (surname), including a list of people and fictional characters with the name ** Blaise Pascal, Fren ...
support by Bill Joy. It is part of the initial release of Single Unix Specification and XPG4 of 1992.


Editors that support ctags

''Tag index files'' are supported by many source code editors, including: * Atom * BBEdit 8+ *
CodeLite CodeLite is a free and open-source IDE for the C, C++, PHP, and JavaScript (Node.js) programming languages. History In August 2006, Eran Ifrah started an autocomplete project named CodeLite. The idea was to create a code completion library b ...
(via built-in ctagsd language server) *
Cloud9 IDE Cloud9 IDE is an Online IDE (integrated development environment), published as open source from version 2.0, until version 3.0. It supports multiple programming languages, including C, C++, PHP, Ruby, Perl, Python, JavaScript with Node.js, an ...
(uses it internally but does not expose it) * CygnusEd *
Emacs Emacs , originally named EMACS (an acronym for "Editor MACroS"), is a family of text editors that are characterized by their extensibility. The manual for the most widely used variant, GNU Emacs, describes it as "the extensible, customizable, s ...
and XEmacs * EmEditor Professional * Far Manager (via Ctags Source Navigator plugin) *
Geany Geany (IPA:dʒiːni ) is a free and open-source lightweight GUI text editor using Scintilla and GTK, including basic IDE features. It is designed to have short load times, with limited dependency on separate packages or external libraries o ...
* Gedit (vi
gedit-symbol-browser-plugin
*
JED Jed or JED may refer to: Places * Jed River, New Zealand * Jed Water, a river in Scotland * Jed, West Virginia, United States, an unincorporated community People and fictional characters * Jed (given name), a list of people and fictional charact ...
* jEdit (via plugins CodeBrowser, Tags, ClassBrowser, CtagsSideKick, or Jump) *
JOE Joe or JOE may refer to: Arts Film and television * ''Joe'' (1970 film), starring Peter Boyle * ''Joe'' (2013 film), starring Nicolas Cage * ''Joe'' (TV series), a British TV series airing from 1966 to 1971 * ''Joe'', a 2002 Canadian animated ...
* KDevelop * Kate *
mcedit GNU Midnight Commander (also known as mc, the command used to start it, and as mouseless commander in older versions) is a free cross-platform orthodox file manager. It was started by Miguel de Icaza in 1994 as a clone of the then-popular Nort ...
(Midnight Commander builtin editor) * NEdit *
Notepad++ Notepad++ is a text and source code editor for use with Microsoft Windows. It supports tabbed editing, which allows working with multiple open files in a single window. The product's name comes from the C postfix increment operator. Notepad++ ...
(via OpenCTags plug-in) * QDevelop * TSE (via macro) * TextMate (via CodeBrowser-PlugIn) *
UltraEdit UltraEdit is a commercial text editor for Microsoft Windows, Linux and OS X created in 1994 by the founder of IDM Computer Solutions Inc., Ian D. Mead, and owned by Idera, Inc. since August 2021. The editor contains tools for programmers, includi ...
*
TextPad TextPad is a text editor for Microsoft Windows developed by Helios Software Solutions. It is currently in its eighth major version. TextPad was initially released in 1992 as shareware, with users requested to pay a registration fee to support ...
* VEDIT * vi (and derivatives such as
Elvis Elvis Aaron Presley (January 8, 1935 – August 16, 1977), or simply Elvis, was an American singer and actor. Dubbed the "Honorific nicknames in popular music, King of Rock and Roll", he is regarded as Cultural impact of Elvis Presley, one ...
, Nvi,
Vim Vim means enthusiasm and vigor. It may also refer to: * Vim (cleaning product) * Vim Comedy Company, a movie studio * Vim Records * Vimentin, a protein * "Vim", a song by Machine Head on the album ''Through the Ashes of Empires'' * Vim (text ed ...
, vile, etc.) * Visual Studio Code *
Xedit (X11) The X.Org Foundation is a non-profit corporation chartered to research, develop, support, organize, administrate, standardize, promote, and defend a free and open accelerated graphics stack. This includes, but is not limited to, the following p ...


Variants of ctags

There are a few other implementations of the ''ctags'' program:


Etags

GNU
Emacs Emacs , originally named EMACS (an acronym for "Editor MACroS"), is a family of text editors that are characterized by their extensibility. The manual for the most widely used variant, GNU Emacs, describes it as "the extensible, customizable, s ...
comes with two ctags utilities, etags and ctags, which are compiled from the same source code. Etags generates a tag table file for Emacs, while the ctags command is used to create a similar table in a format understood by vi. They have different sets of command line options: etags does not recognize and ignores options which only make sense for vi style tag files produced by the ctags command.


Exuberant Ctags

Exuberant Ctags, written and maintained by
Darren Hiebert Darren is a masculine given name of uncertain etymological origins. Some theories state that it originated from an Anglicisation of the Irish first name Darragh or Dáire, meaning "Oak Tree". According to other sources, it is thought to come from ...
until 2009, was initially distributed with
Vim Vim means enthusiasm and vigor. It may also refer to: * Vim (cleaning product) * Vim Comedy Company, a movie studio * Vim Records * Vimentin, a protein * "Vim", a song by Machine Head on the album ''Through the Ashes of Empires'' * Vim (text ed ...
, but became a separate project upon the release of Vim 6. It includes support for Emacs and compatibility. Exuberant Ctags includes support for over 40 programming languages with the ability to add support for even more using regular expressions.


Universal Ctags

Universal Ctags is a fork of Exuberant Ctags, with the objective of continuing its development. A few parsers are rewritten to better support the languages.


Language-specific

creates ctags compatible tag files for Haskell source files. It includes support for creating Emacs etags files. is a ctags-compatible code indexing solution for JavaScript. It is specialized for JavaScript and uses the CommonJS packaging system. It outperforms ''Exuberant Ctags'' for JavaScript code, finding more tags than the latter.


Tags file formats

There are multiple tag file formats. Some of them are described below. In the following, represents the byte with hexadecimal representation . Every line ends with a line feed (LF, = ).


Ctags and descendants

The original ''ctags'' and the Exuberant/Universal descendants have similar file formats:


Ctags

This is the format used by ''vi'' and various clones. The tags file is normally named "tags". The tags file is a list of lines, each line in the format: \t\t The fields are specified as follows: * – Any identifier, not containing white space * – Exactly one tab () character, although many versions of ''vi'' can handle any amount of white space. * – The name of the file where is defined, relative to the current directory * – An ex mode command that will take the editor to the location of the tag. For POSIX implementations of ''vi'' this may only be a search or a line number, providing added security against arbitrary command execution. The tags file is sorted on the field which allows for fast searching of the tags file.


Extended Ctags

This is the format used by
Vim Vim means enthusiasm and vigor. It may also refer to: * Vim (cleaning product) * Vim Comedy Company, a movie studio * Vim Records * Vimentin, a protein * "Vim", a song by Machine Head on the album ''Through the Ashes of Empires'' * Vim (text ed ...
's Exuberant Ctags and Universal Ctags. These programs can generate an original ''ctags'' file format or an extended format that attempts to retain backward compatibility. The extended tags file is a list of lines, each line in the format: \t\t t">"\t The fields up to and including are the same as for ctags above. Optional additional fields are indicated by square brackets (" ..) and include: * – semicolon + double quote: Ends the in a way that looks like the start of a comment to ''vi'' or ''ex''. * – extension fields: tab separated "key:value" pairs for more information. This format is compatible with non-POSIX ''vi'' as the additional data is interpreted as a comment. POSIX implementations of ''vi'' must be changed to support it, however.


Etags

This is the format used by Emacs ''etags''. The tags file is normally named "TAGS". The etags files consists of multiple sections—one section per input source file. Sections are plain-text with several non-printable ascii characters used for special purposes. These characters are represented as underlined hexadecimal codes below. A section starts with a two line header (the first two bytes make up a magic number): \x0c , The header is followed by tag definitions, one definition per line, with the format: \x7f\x01, can be omitted if the name of the tag can be deduced from the text at the tag definition.


Example

Given a single line test.c source code: #define CCC(x) The TAGS (etags) file would look like this: \x0c test.c,21 #define CCC(\x7fCCC\x011,0 The tags (ctags) file may look like:
CCC(	test.c	1
or more flexibly using a search:
CCC(	test.c	/^#define CCC(/


See also

*
GNU GLOBAL GNU GLOBAL is a software tool for source code tagging to aid code comprehension. It works in a uniform fashion in various environments (GNU Emacs, Vim, GNU less, GNU Bash, web browsers, etc.), allowing users to find all objects declared in the ...


References


External links

*
Universal Ctags homepage

Exuberant Ctags homepage

Ctags on VMS

source code for Emacs vtags.el module
{{Unix commands Code comprehension tools Code navigation tools Free computer programming tools Unix programming tools Standard Unix programs Unix SUS2008 utilities Software using the BSD license fr:Ctags