Fact-checked by Grok 2 weeks ago

ctags

Ctags is a command-line tool that generates an index file, known as a tags file, containing references to programming language elements such as functions, variables, classes, and macros found in source code files, thereby enabling text editors and other development tools to provide rapid navigation to these symbols across large codebases. Originally developed as part of the early Unix ecosystem, the ctags utility first appeared in Version 2 of the Berkeley Software Distribution (2BSD) in 1979, with initial support for indexing C, Fortran, and Pascal source files to facilitate quick lookups of functions and subroutines. Over the decades, ctags has evolved significantly; the Exuberant Ctags implementation, maintained by Darren Hiebert starting in the 1990s, expanded support to dozens of programming languages including C++, Java, Perl, Python, and Ruby, while introducing features like regular expression-based parsing and hierarchical tag organization. This was further advanced by the Universal Ctags project, launched in 2015 as a community-driven fork, which continues active development with enhancements for modern languages, improved parser accuracy, and compatibility with tools like Vim, Emacs, and Neovim through tag formats compatible with editors like Vim, Emacs, and Neovim, including the traditional Unix format and Emacs-compatible etags format. Today, ctags remains a lightweight, extensible indexer essential for software development workflows, supporting over 40 languages and producing output in formats like the traditional Unix tags file or JSON for integration with advanced IDEs.

Overview

Purpose and Functionality

Ctags is a command-line utility that generates a "tags" file serving as an index of language objects, such as functions, variables, classes, and macros, parsed from files across various programming languages. This index facilitates rapid location and navigation to these objects, enhancing by allowing text editors to directly to definitions. The primary functionality of ctags involves scanning source files to extract identifiers and their locations, producing entries in the tags file that map each symbol's name to its defining file and position, either via a search pattern or an explicit . Editors like Vim or then query this file to enable features such as "go to definition," streamlining code exploration without manual searching. By supporting parsers for numerous languages—including C, C++, Java, Python, and others—ctags improves browsing efficiency in large-scale projects, where understanding symbol relationships is essential. Included in the POSIX standard since 1992 as part of IEEE Std 1003.2, ctags remains a foundational tool in Unix-like environments, valued for its simplicity and integration despite advancements in integrated development environments. Modern variants, such as Universal Ctags, build on this core to offer extended language support and output formats.

History

The original ctags utility was developed by Ken Arnold and first appeared in 3BSD, released in 1979 as part of the Berkeley Software Distribution for enhancing navigation in the editor. Initial language support included , with parsing added by Jim Kleckner and Pascal support contributed by . Ctags achieved formal standardization with its inclusion in the initial release of the (SUS) and XPG4 in 1992, ensuring portability across systems. In the 1990s, development shifted toward extended capabilities, exemplified by Exuberant Ctags, initiated by Darren Hiebert, which introduced an extended tag file format supporting more languages and detailed indexing beyond the original simple format. Maintenance of Exuberant Ctags ceased after its final release (version 5.8) in 2009. This led to the creation of Universal Ctags as a community-driven of Exuberant Ctags in 2015, aimed at continuing enhancements and addressing limitations in support for contemporary programming paradigms. As of November 2025, Universal Ctags remains actively maintained, with ongoing updates such as version 6.2.1 released on October 25, 2025, featuring improved parser accuracy for modern languages including and Go to better handle their syntax and constructs. Ctags has persisted as a core utility in operating systems, influencing the development of symbol indexing mechanisms in integrated development environments () by providing a foundational model for efficient code navigation.

Technical Aspects

Tag File Format

The tag file format in ctags is a structure designed to index s from files, enabling efficient lookups by editors and tools. The original format, introduced in early UNIX implementations, consists of simple tab-separated lines in the structure {tagname}\t{filename}\t{searchpattern}, where {tagname} is the identifier (e.g., a function name), {filename} specifies the source file path relative to the tags file location, and {searchpattern} provides a search command to locate the , such as a line number (e.g., 42), a forward search pattern enclosed in slashes (e.g., /^main$\)$/), a backward search in question marks (e.g., ?^main\($?), or an exact pattern. This format supports binary search for fast retrieval when the file is sorted alphabetically by tagname, and it allows duplicate tags, though their selection may vary unpredictably. Extended formats, building on the original since Exuberant Ctags (version 1.7 in ), append optional fields after a ;"" followed by tab-separated key-value pairs, preserving for tools like that ignore comments. The full structure becomes {tagname}\t{filename}\t{searchpattern}[;""\t{field1}\t{field2}...], where fields are in the form key:value (e.g., kind:f for a ), with values escaping special characters like tabs (\t) or newlines (\n). Common fields include kind to denote the symbol type (e.g., f for , v for , c for ), line for the exact (overriding search patterns for precision), signature for the parameter list or full prototype (e.g., signature:(int argc, char** argv)), access for visibility (e.g., public or private in object-oriented languages), and language-specific extensions like class or struct for context. Universal Ctags further evolves this by adding fields such as roles for reference tracking (e.g., R for references like #include directives) and parser-specific extras, while maintaining the core and structure for . The format is inherently text-based, using or ASCII encoding for portability across systems, with line endings supporting Unix (\n), (\r\n), or Macintosh (\r) conventions. While primarily uncompressed text to ensure readability and easy editing, some modern variants like Universal Ctags support optional compression via external tools (e.g., ) when generating files, though this is not part of the standard specification and requires explicit handling by consuming applications. is ensured by treating extended fields as ignorable comments in legacy parsers; for instance, original-format tools will still locate symbols using the first three fields, ignoring anything after ;"". Pseudo-tag lines, starting with !_TAG_, provide file (e.g., !_TAG_FILE_FORMAT\t2 for extended format, !_TAG_FILE_SORTED\t1 for sorted status) without affecting symbol entries. To illustrate, consider this sample extended entry for a C function:
main	main.c	/^main(int argc, char** argv)$/;"	kind:f	signature:(int argc,char** argv)	line:10	access:public
Breaking it down: main is the tagname (function identifier); main.c is the ; /^main(int argc, char** argv)$/ is the search (a regex to find the definition); kind:f specifies a ; signature:(int argc,char** argv) captures the parameters; line:10 gives the precise location; and access:public indicates visibility. This entry supports both basic lookups (via the first three fields) and enriched queries in advanced tools like Vim, which can filter by kind or .

Language Parsing Mechanisms

Ctags analyzes through a combination of hardcoded parsers implemented and regular expression-based patterns tailored to individual syntaxes, enabling the extraction of symbols such as functions, variables, and classes. Hardcoded parsers process input via character-oriented or line-based I/O interfaces, allowing fine-grained control over tokenization and context tracking, while regex approaches match patterns directly on lines for simpler identifications. Parser types vary by language complexity: keyword-based methods suffice for straightforward elements, such as recognizing macros via the #define directive and associating them with object-like or function-like definitions. For more intricate structures, like classes and decorators, dedicated parsers employ to generate tokens followed by syntactic interpretation to discern hierarchies and attributes. Regex-based parsers, often used for custom or less mature language support, apply patterns to capture single-line declarations but operate in a context-insensitive manner unless augmented with callbacks. In handling scope and types, parsers track contextual elements where syntax permits, such as enclosing namespaces in C/C++ (e.g., tagging using namespace std; declarations), inheritance chains including template parameters (e.g., deriving from C<A>), and overloads by emitting distinct tags for each variant. This detection relies on stateful parsing to nest symbols appropriately, though support is language-specific and absent for constructs without explicit syntactic markers. A key limitation of ctags parsing is the absence of full semantic analysis, as it depends solely on syntactic pattern matching rather than type inference or runtime evaluation, leading to incomplete resolution in dynamic languages like where variable types or method bindings may vary at execution. For instance, while 's parser can tag local variables and lambda assignments, it cannot disambiguate polymorphic behaviors without deeper execution simulation. Similarly, C/C++ parsing skips recursive macro expansions across included files and may misassign scopes in single-pass mode for anonymous structures. Performance is achieved through linear scanning of files, reading content sequentially via functions like getcFromInputFile() for character-level processing or line-based alternatives, which scales efficiently for large codebases but can slow under heavy macro expansion (up to 2x overhead in C/C++). Recursive directory traversal is supported to index entire projects, though regex-heavy parsers may incur up to 4x slowdown compared to optimized hardcoded ones on voluminous inputs. Extensibility allows users to add or refine parsers without recompiling the core tool; in extended versions like Universal Ctags, this is facilitated via optlib files defining regex patterns (e.g., --langdef=MyLang --regex-MyLang=/pattern/name/kind/), supporting ERE or PCRE2 for advanced matching, including multi-line and scope-aware flags. Custom hardcoded parsers can also be integrated by authoring C modules that populate a parserDefinition structure and linking them during build. Mature implementations support over 40 languages, ranging from C and Python to less common ones like Verilog and Tcl, with parsing accuracy improving in well-maintained parsers (e.g., enhanced C/C++ and Python) but varying for niche or evolving syntaxes due to reliance on manual updates.

Usage

Command-Line Interface

The command-line interface of ctags allows users to generate, append, and query tag files from source code directories via terminal invocation, with the basic syntax ctags [options] [source_file(s)] for processing specified files or directories. This enables indexing of symbols such as functions, variables, and classes across multiple languages, producing a default output file named tags unless otherwise specified. For recursive generation over directory trees, the -R option (equivalent to --recurse=yes) scans subdirectories automatically, making it suitable for large projects. Key options facilitate customization of the tagging process. The -a flag (or --append=yes) adds new tags to an existing file without overwriting it, useful for incremental updates. Output file naming is controlled via -f <tagfile>, where specifying - directs output to stdout, and the default is tags. Language selection occurs through --languages=[+|-](<list>|all), enabling or disabling parsers for specific languages like C, , or , with all as the default. For Emacs compatibility, -e (or --output-format=etags) generates files in the etags format. Output control is refined with --fields=[+|-][<flags>|*], which specifies extension fields; for instance, --fields=+iaK includes (i), level (a), and kind (K) information for object-oriented languages. Filtering mechanisms enhance precision in tag generation. The --exclude=<pattern> option skips files or directories matching glob patterns, such as excluding build artifacts. Custom languages can be defined on the fly using --langdef=<name>, which accepts regex-based patterns for parsing non-standard file types. For querying without full generation, -x (or --output-format=xref) lists symbols in a cross-reference format, displaying names, locations, and attributes akin to a grep-like summary. Error handling addresses common invocation issues. Unsupported languages result in files being ignored unless overridden with --language-force=<lang>, which applies a specified parser regardless of file extension. Parse failures, often from complex macros or directives, can be mitigated using -I <inclusion-file> to define substitutions, though severe cases may require manual adjustments. Portability varies across implementations; for example, options like -R are standard in Universal Ctags but may differ or be absent in older variants, as detailed in compatibility guides. Users should consult --help for implementation-specific availability. ctags can be briefly integrated into build systems like Makefiles for automated execution during compilation.

Editor Integration

Ctags tag files enable enhanced code navigation in various text editors and integrated development environments (IDEs) by providing a static index of symbols such as functions, variables, and classes, allowing users to jump to definitions and references efficiently. This integration is particularly valuable in lightweight editors without advanced (LSP) support, where ctags serves as a simple yet effective mechanism for symbol lookup and traversal. In Vim and Vi, ctags integration is native and central to the editor's design, originally developed to support quick navigation in the editor. Users configure tag files via the :set tags command, typically specifying paths like set tags=./tags,tags;, which searches for files named "tags" in the current directory and upwards. Key commands include :tag symbol to jump to a symbol's definition, :tselect symbol to resolve ambiguities by listing matches for selection, and :tnext or :tprev to navigate the tag stack, which maintains a history of up to 20 jumps for returning via CTRL-T. Additionally, CTRL-] jumps to the identifier under the cursor, enhancing interactive workflow. Emacs integrates ctags through its etags variant, which generates a TAGS file compatible with Emacs' navigation system, though distinct from the standard ctags format. The M-. (find-tag) command jumps to a tag's definition, while M-* pops back to the previous location, mirroring Vim's tag stack functionality. This setup allows seamless cross-file navigation, with the TAGS file serving as the central index for objects. Support extends to other editors via plugins or built-in features that load and query ctags files for pattern-based symbol searching. In Geany, the GeanyCtags plugin generates project-specific ".tags" files using the system's ctags command and enables querying through context menus like "Find Tag Definition" or "Find Tag Declaration," displaying results in the Messages window for selection. Kate's CTags plugin indexes directories into common or session-specific databases, supporting "Go to Definition" jumps from the cursor or search field, with configurable ctags commands for updates. For Sublime Text, the CTags package handles large tag files efficiently via binary search, offering navigation shortcuts like ctrl+t, ctrl+t for definitions and ctrl+t, ctrl+b to jump back, compatible with both Exuberant and Universal ctags. Typical workflows involve automatic tag file regeneration to maintain accuracy, such as using Vim autocommands triggered on file save—for example, an autocommand like autocmd BufWritePost *.c,*.h silent! !ctags -R rebuilds tags recursively after editing C files. Plugins like vim-easytags further automate this by updating tags within seconds of edits, configurable to scope from single files to entire projects. Advanced features enabled by ctags include symbol completion and go-to-definition in resource-constrained environments, where editors the tag file to suggest completions or link identifiers without full language . This proves essential for Unix-based workflows, where ctags remains ubiquitous for its simplicity and low overhead compared to dynamic tools. However, ctags' static indexing imposes limitations, requiring manual or scripted updates after code changes, as unaltered tag files may reference outdated locations. It lacks , potentially leading to stale navigation in rapidly evolving codebases without regeneration hooks.

Variants and Implementations

Original ctags

The original ctags was introduced by Ken Arnold in 2BSD, released in 1979, with initial support for indexing C, Fortran (added by Jim Kleckner), and Pascal (added by Bill Joy). It was designed primarily to assist in navigating source code within the vi editor lineage, specifically generating a tags file from specified source files to enable quick jumps to function and object definitions. At its core, original ctags performs basic indexing by scanning source files for defined objects such as subroutines, typedefs, and macros, producing a simple tab-separated tags file with three fields: the object name, the containing file, and an extended pattern for locating the definition. This format lacks any extensions, additional metadata, or structured fields beyond the essentials, focusing solely on enabling the editor's :tag command for lookup. Key limitations of the original implementation include the absence of recursive directory processing, requiring explicit or directory lists on the command line without automatic traversal of subdirectories. It supports only a modest set of approximately seven languages in total—C, Pascal, , , lex, and —relying on rudimentary, hardcoded parsing rules tailored to each without provisions for user-defined or extensible parsers. Furthermore, the absence of fields denoting object kinds (e.g., vs. ) or signatures often results in ambiguous tag matches during editor lookups, as multiple entities sharing the same name cannot be easily distinguished. Despite these constraints, original ctags persists in many traditional systems, such as , where it is bundled as a utility, though it sees limited standalone use in contemporary workflows favoring more advanced tools. Its enduring legacy lies in popularizing the tab-separated, line-based tag file format as the foundational , which later variants extended while maintaining . This baseline design influenced the evolution toward more feature-rich implementations in the decades that followed.

Exuberant Ctags

Exuberant Ctags is an extended reimplementation of the original ctags utility, developed by Hiebert as a multilanguage indexer for definitions. The project began with its first public release, version 1.0, on May 31, 1996. It rapidly evolved to address limitations in the original tool, introducing significant enhancements that made it suitable for diverse programming environments. Key improvements in Exuberant Ctags include support for over 40 programming languages, such as , , , , , and many others, achieved through regex-based parsing mechanisms. Unlike the original ctags, it features an extended file that incorporates additional fields beyond the basic tag name, file, and ; for example, the "kind" field denotes object types like "f" for functions, enabling more precise navigation and querying. Other notable features encompass recursive directory searching with the -R option for indexing entire projects, language-specific customization via flags like --c-kinds to select tag kinds (e.g., functions, variables), and the ability to define custom parsers directly from the command line using regular expressions. These capabilities allowed users to tailor tag generation without modifying the source code. During the 2000s, Exuberant Ctags became widely adopted as the preferred tagging tool among Vim users, particularly valued for its robust parsing of C and C++ code constructs, including classes, namespaces, and preprocessor directives. It was initially bundled with Vim distributions, further solidifying its integration into text editor workflows. The tool's performance is optimized for efficiency in processing large codebases through lightweight pattern matching, though it relies on static syntactic analysis without deeper semantic understanding. Development ceased after the release of version 5.8 on July 9, 2009, with no further updates due to the maintainer's shift in focus. The source code remains openly available under the GNU General Public License (GPL). This discontinuation prompted community efforts, including a that evolved into Universal Ctags to continue enhancements.

Universal Ctags

Universal Ctags is an actively maintained of Exuberant Ctags, initiated in 2015 by Masatake YAMATO and other contributors to continue development after the original project stalled. The project began as a personal repository by Reza Jelveh before being transferred to the universal-ctags organization, enabling collaborative enhancements while preserving the core functionality of generating index files for navigation. As of November 2025, Universal Ctags continues regular releases, including version 6.0 in December 2024, 6.2.1 in June 2025, and further updates such as 6.2.20251109.0 in November 2025, introducing parsers for modern languages such as , , and , alongside improvements to existing ones. These updates have expanded support to over 50 language parsers, facilitating broader adoption in diverse development environments. Enhancements include a refined regex engine for more accurate in custom parsers, an advanced optparser for flexible command-line option handling via the optlib library, and extended support for pseudotags, such as those embedding file headers or project metadata directly into tag files. Additionally, JSON output has been optimized for better integration with integrated development environments (), enabling structured data export for tools requiring programmatic access to tags. Universal Ctags maintains full backward compatibility with Exuberant Ctags options and tag file formats, allowing seamless replacement in existing workflows without modification. Its modern relevance lies in providing rapid static indexing that complements dynamic tools like the (LSP) for semantic navigation, particularly in resource-constrained settings. The project benefits from an active community, with ongoing contributions, and is widely integrated into plugins for editors such as Vim and Neovim, enhancing code jumping and symbol resolution capabilities.

Emacs etags

Emacs etags, also known simply as etags, was developed as part of by and has been included in the distribution since its initial public release in 1985. It utilizes the etags command-line tool to generate tag files specifically tailored for the editor environment. The etags file format uses form feed characters (ASCII 014, \f) as to separate sections in a , distinguishing it from the tab-separated formats of other ctags variants, and employs ASCII 014 (form feed, \f) as a delimiter to separate sections. Each entry follows the structure {tagname}\f{filename},{searchpattern}\f, where the searchpattern enables to locate the tag definition via matching, and the file includes a for efficient navigation. This format supports the same core languages as traditional ctags implementations, such as , , , and , through built-in parsers that recognize syntax based on file extensions or contents, but it is optimized for Emacs' find-tag function to facilitate quick jumps to definitions. Additionally, etags incorporates regex-based tagging, allowing users to define custom tags using s via the --regex option or by setting --language=none for purely regex-driven processing. Invocation of etags is straightforward, typically as etags [options] files, which generates a file named TAGS in the current directory by default. The -o option specifies a custom output file, while the -e flag ensures compatibility with format when used in contexts involving other ctags tools. Etags serves as a parallel implementation to the original ctags, which focuses on compatibility, but adapts the tagging mechanism for Emacs-specific workflows. In terms of limitations, the etags format is less extensible than modern variants like Universal Ctags, lacking support for extended fields such as tag kinds (e.g., , ) that provide richer metadata. Within Emacs, etags enables dynamic loading of tags tables, allowing seamless integration across multiple files or projects via commands like visit-tags-table or by setting the tags-table-list , which supports hierarchical or distributed tag management for large codebases.

Specialized Variants

Specialized variants of ctags address limitations in general-purpose implementations by incorporating language-specific parsing logic, often leveraging native compilers or interpreters for greater accuracy in tagging symbols, types, and structures unique to those languages. ghc-tags is a -specific tool released in by Andrzej Rybczak that uses the GHC API to produce precise, type-aware ctags and etags files supporting modules and data types. It enables multi-core processing of source files and fast incremental updates, making it suitable for large Haskell projects where standard ctags may miss nuanced type information or hierarchical relationships. jsctags, developed in 2010 by Patrick Walton, is tailored for and generates ctags-compatible indexes using via the Narcissus parser, which analyzes abstract syntax trees to identify definitions in dynamic contexts like modules. This approach provides faster and more reliable tagging for JavaScript features compared to general ctags, particularly in handling global and exported symbols without executing code paths. hothasktags, another Haskell-focused variant from 2017, extends ctags generation by incorporating import lists and qualified imports for improved navigation in editor environments. These specialized tools commonly extend Exuberant or Universal ctags foundations by customizing parsers to resolve language quirks, such as Haskell's or JavaScript's dynamic scoping. They offer advantages in precision for dynamic or strongly typed languages, where broader ctags variants often produce incomplete or erroneous tags due to regex-based limitations. As of 2025, such implementations continue to bridge gaps in Universal ctags for evolving language ecosystems, including support for modern features in and .

Examples

Basic Command-Line Usage

To generate a tags file for all source files in the current directory, use the following command:
ctags *
This creates a file named tags containing entries for symbols in the files. For recursive generation across subdirectories:
ctags -R
To specify a custom output file and exclude certain files:
ctags -f mytags --exclude=*.o -R .
The resulting tags file might contain entries like:
main    main.c    /^main\(\)$/"    f
where main is the tag name, main.c is the , and the pattern locates the .

Editor Integration

In Vim, after generating a tags file, jump to a definition with:
:ta main
or from the command line:
vi -t main
This loads the and positions the cursor at the . Similar integration exists for using M-. (find-tag).

References

  1. [1]
    universal-ctags/ctags: A maintained ctags implementation - GitHub
    ctags generates an index (or tag) file of language objects found in source files for programming languages. This index makes it easy for text editors and other ...Universal Ctags · Ctags Win32 · Issues 192 · Pull requests 44
  2. [2]
    ctags(1) - OpenBSD manual pages
    The ctags utility is compliant with the IEEE Std 1003.1-2008 (“POSIX.1 ... HISTORY. The ctags command appeared in 2BSD. BUGS. Recognition of functions ...
  3. [3]
    Universal Ctags 0.3.0 documentation
    ctags can generate a cross reference file which lists, in human readable form, information about the various language objects found in a set of source files.
  4. [4]
    ctags
    The ctags utility creates a tags file or an index of objects from C-language or FORTRAN source files specified by the pathname operands.
  5. [5]
    ctags(1): make tag files for source code - Linux man page
    ctags can generate a cross reference file which lists, in human readable form, information about the various source objects found in a set of language files.
  6. [6]
    Summary of POSIX.1-2001 Options - FreeBSD
    User Portability Utilities (1003.2-1992). Related utilities: alias, at, batch, bg, command, crontab, split, ctags, df, du, ex, expand, fc, fg, file, jobs ...<|separator|>
  7. [7]
  8. [8]
    Exuberant Ctags
    A multilanguage implementation of Ctags ; About. What is ctags? Unique features · Supported languages · Supporting tools · Exuberant user feedback. Documentation.
  9. [9]
    Will universal-ctags replace exuberant-ctags? · Issue #446 - GitHub
    Jul 20, 2015 · The intent is to provide a modernized version of exuberant ctags with more features and active, community-driven maintainership.
  10. [10]
  11. [11]
    Static Analysis at GitHub - ACM Queue
    Sep 16, 2021 · This analysis was introduced by a program named ctags , developed by Ken Arnold and released in 1979 as part of BSD Unix 3.0. As its name ...Missing: date | Show results with:date
  12. [12]
    Tag file format - Exuberant Ctags - SourceForge
    The {version-number} used in the tag file format line reserves the value of "1" for tag files complying with the original UNIX vi/ctags format, and reserves ...
  13. [13]
    Changes to the tags file format - Universal Ctags Hacking Guide
    A tag has a name , an input file name, and a pattern as basic information. Some fields like language: , signature: , etc are attached to the tag as optional ...Missing: specification | Show results with:specification
  14. [14]
    How to Add Support for a New Language to Exuberant Ctags
    The job of this parser definition function is to create an instance of the parserDefinition structure (using parserNew() ) and populate it with information ...
  15. [15]
    Writing a parser in C - Universal Ctags
    In order to do its job, the parser should read the file stream using using one of the two I/O interfaces: either the character-oriented getcFromInputFile() , or ...
  16. [16]
    The new C/C++ parser — Universal Ctags 0.3.0 documentation
    The new parser supports the definition of real preprocessor macros via the -D option. All types of macros are supported, including the ones with parameters and ...Missing: mechanism | Show results with:mechanism
  17. [17]
    The new Python parser - Universal Ctags Hacking Guide
    The parser has been rewritten from scratch separating lexical analysis (generating tokens) from syntactical analysis (understanding what the lexemes mean).Missing: mechanism | Show results with:mechanism
  18. [18]
    Extending ctags with Regex parser (optlib)
    Universal Ctags follows and extends the design of Exuberant Ctags in more powerful ways and call the feature as optlib parser.Missing: mechanism | Show results with:mechanism
  19. [19]
    Languages Supported by Exuberant Ctags
    Languages Supported by Exuberant Ctags: Ant; Assembler; ASP; Awk; BASIC; BETA; C; C++; C#; COBOL; DOS Batch; Eiffel; Erlang; Flex; Fortran; HTML; Java ...
  20. [20]
    tagsrch.txt - Vim help
    A tag is an identifier that appears in a "tags" file. It is a sort of label that can be jumped to. For example: In C programs each function name can be used as ...
  21. [21]
    Tags Tables (GNU Emacs Manual)
    To produce a tags table, you run the etags shell command on a document or the source code file. The ' etags ' program writes the tags to a tags table file, or ...
  22. [22]
    Plugins for Geany [geanyctags]
    GeanyCtags adds a simple support for generating and querying ctags files for a Geany project. It requires that the ctags command is installed in a system path.
  23. [23]
    CTags Plugin - KDE Documentation -
    The CTags plugin uses two different database files for the index. On the CTags settings page in Kate's configuration you can add or remove directories ...
  24. [24]
    CTags support for Sublime Text - GitHub
    This Sublime Text package provides support for working with tags generated by Exuberant CTags or Universal CTags.
  25. [25]
    Autocmd to update ctags file - Vim Tips Wiki - Fandom
    To automatically update the ctags file when a file is written, add this to your vimrc: function! DelTagOfFile(file) let fullpath = a:file let cwd = getcwd()Missing: regeneration | Show results with:regeneration
  26. [26]
    xolox/vim-easytags: Automated tag file generation and syntax ...
    Edit any file type supported by Exuberant Ctags and within ten seconds the plug-in should create/update your tags file ( ~/.vimtags on UNIX, ~/_vimtags on ...
  27. [27]
    ctags-faq — Universal Ctags 0.3.0 documentation
    Universal Ctags is an unofficial fork of Exuberant Ctags, reading *.ctags under ~/.ctags.d, unlike Exuberant Ctags which reads ~/.ctags.
  28. [28]
    Untitled
    Sh AUTHOR Ken Arnold; FORTRAN added by Jim Kleckner; Bill Joy added Pascal and .Fl x , replacing .Ar cxref ; C typedefs added by Ed Pelegri-Llopart. .Sh ...Missing: original | Show results with:original<|control11|><|separator|>
  29. [29]
    UNIX History - University of Utah - Mac Managers
    Jun 6, 2006 · By 1978 3BSD had been released. Using 3BSD's good reputation, Prof. ... As a result of this contract, BSD UNIX was used to implement an early ...
  30. [30]
    Change Notes - Exuberant Ctags
    ctags-2.0.4 (Sat May 23 1998) * Added sorting time to the output of ... lsm to distribution ctags-1.0 (Fri May 31 1996) * First public release.
  31. [31]
    ctags-exuberant(1) - Debian Manpages
    Aug 14, 2023 · NEdit version 5.1 and later can handle the new extended tag file format (see --format). To make NEdit use the tag file, select "File->Load Tags ...Options · Tag File Format · How To Use With Gnu Emacs
  32. [32]
    Exuberant Ctags - Bare Bones Software
    Exuberant Ctags. Exuberant Ctags is copyright1996-2004 by Darren Hiebert. Exuberant Ctags is included under the terms of the GNU General Public License (GPL).Missing: history | Show results with:history
  33. [33]
    Releases · universal-ctags/ctags - GitHub
    ... ctags. Universal Ctags 6.2.0. May 31. @masatake masatake · v6.2.0 · 74ff528. Compare. Choose a tag to compare. Loading. View all tags · Universal Ctags 6.2.0 ...
  34. [34]
    Create Tags Table (GNU Emacs Manual)
    ### Summary of Creating Tags Tables with `etags`
  35. [35]
    etags(1) - Arch manual pages
    The etags program is used to create a tag table file, in a format understood by emacs(1); the ctags program is used to create a similar table in a format ...
  36. [36]
    Output formats — Universal Ctags 0.3.0 documentation
    The command line option --output-format= format chooses an output format. Supported format are u-ctags, e-ctags, etags, xref, and json.Missing: specification | Show results with:specification
  37. [37]
    ghc-tags: Utility for generating ctags and etags with GHC API.
    Jun 6, 2024 · ghc-tags. Build Status Hackage. A command line tool that generates etags (Emacs) and ctags (Vim, VSCode with ctagsx etc.) ...Missing: hasktags Blake Rain<|separator|>
  38. [38]
  39. [39]
    Introducing jsctags - Miscellany
    May 25, 2010 · The project's known as jsctags, and it's located here on GitHub. It requires only the node.js framework, which was selected because it's well- ...
  40. [40]
  41. [41]
    hothasktags: Generates ctags for Haskell, incorporating import lists ...
    Jan 25, 2017 · hothasktags generates ctags files for Haskell, with knowledge of import lists and qualified imports. It provides a smart go-to-definition ...Missing: hasktags Blake Rain 2010