Provided by: universal-ctags_0+git20181215-2_amd64 bug

NAME

       ctags-universal - Generate tag files for source code

SYNOPSIS

       ctags-universal [options] [source_file(s)]
       etags [options] [source_file(s)]

DESCRIPTION

       The   ctags-universal   and  etags  programs  (hereinafter  collectively  referred  to  as
       ctags-universal, except where distinguished) generate an  index  (or  "tag")  file  for  a
       variety  of  language objects found in source file(s). This tag file allows these items to
       be quickly and easily located by a text editor or other utilities (client  tools).  A  tag
       signifies  a language object for which an index entry is available (or, alternatively, the
       index entry created for that object).

       Alternatively, ctags-universal 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.

       Tag index files are supported by numerous editors, which allow  the  user  to  locate  the
       object  associated  with  a  name appearing in a source file and jump to the file and line
       which  defines  the  name.  See  the  manual  of  your  favorite  editor  about  utilizing
       ctags-universal command and the tag index files in the editor.

       ctags-universal  is  capable  of  generating  different  kinds  of  tags  for each of many
       different languages. For a complete list of supported languages, the names by  which  they
       are   recognized,   and  the  kinds  of  tags  which  are  generated  for  each,  see  the
       --list-languages and --list-kinds-full options.

       This  man  page  describes  Universal-ctags,  an  implementation  of  ctags  derived  from
       Exuberant-ctags.    The   major   incompatible   changes   between   Universal-ctags   and
       Exuberant-ctags are enumerated in ctags-incompatibilities(7).

       One of the advantages of Exuberant-ctags is that it allows a user to define a  new  parser
       from  the  command  line.  Extending  this  capability  is  one  of  the major features of
       Universal-ctags. ctags-optlib(7) describes how the capability is extended.

       Newly introduced experimental features are not explained here. If you  are  interested  in
       such features and ctags-universal internals, visit http://docs.ctags.io/en/latest/.

SOURCE FILES

       Unless  the  --language-force  option  is  specified,  the language of each source file is
       automatically selected based upon a mapping of file names to languages.  The  mappings  in
       effect  for each language may be displayed using the --list-maps option and may be changed
       using the --langmap or --map-<LANG> options.

       If the name of a file is not mapped to a language, ctags-universal tries to  heuristically
       guess  the  language  for  the  file  by  inspecting  its  content.  See "Determining file
       language".

       All files that have no file name mapping and no guessed parser are ignored.  This  permits
       running  ctags-universal on all files in either a single directory (e.g.  "ctags-universal
       *"), or on all files in an entire source directory tree (e.g. "ctags-universal -R"), since
       only those files whose names are mapped to languages will be scanned.

       The same extensions are mapped to multiple parsers. For example, ".h" are mapped to C++, C
       and ObjectiveC. These mappings can cause  issues.  ctags-universal  tries  to  select  the
       proper parser for the source file by applying heuristics to its content, however it is not
       perfect.     In    case    of    issues    one    can    use    --language-force=language,
       --langmap=map[,map[...]],  or  the  --map-<LANG>=-pattern|extension  options. (Some of the
       heuristics are applied whether --guess-language-eagerly is given or not.)

   Determining file language
       If ctags-universal cannot select  a  parser  from  the  mapping  of  file  names,  various
       heuristic tests are conducted to determine the language:

       template file name testing
              If the file name has an ".in" extension, ctags-universal applies the mapping to the
              file name without the extension. For example, "config.h" is tested for a file named
              "config.h.in".

       interpreter testing
              The  first  line  of the file is checked to see if the file is a "#!"  script for a
              recognized language.  ctags-universal looks for a parser having the same name.

              If ctags-universal finds no such parser, ctags-universal  looks  for  the  name  in
              alias  lists.  For  example,  consider  if  the  first line is "#!/bin/sh".  Though
              ctags-universal has a "shell" parser, it doesn't have a "sh" parser. However,  "sh"
              is  listed  as  an alias for "shell", therefore ctags-universal selects the "shell"
              parser for the file.

              An exception is "env". If "env" is specified, ctags-universal reads more  lines  to
              find real interpreter specification.

              To  display  the list of aliases, use --list-aliases option.  To add/remove an item
              to/from the list, use the --alias-<LANG>=[+|-]aliasPattern option.

       zsh autoload tag testing
              If the first line starts with "#compdef" or  "#autoload",  ctags-universal  regards
              the line as "zsh".

       emacs mode at the first line testing
              The  Emacs editor has multiple editing modes specialized for programming languages.
              Emacs can recognize a marker called modeline in a file and utilize the  marker  for
              the mode selection. This heuristic test does the same as what Emacs does.

              ctags-universal  treats  MODE as a name of interpreter and applies the same rule of
              "interpreter" testing if the first line has one of the following patterns:

                 -*- mode: MODE -*-

              or

                 -*- MODE -*-

       emacs mode at the EOF testing
              Emacs editor recognizes another marker at the end of file as a mode specifier. This
              heuristic test does the same as what Emacs does.

              ctags-universal  treats  MODE as a name of an interpreter and applies the same rule
              of "interpreter" heuristic testing, if the lines at the tail of the file  have  the
              following pattern:

                 Local Variables:
                 ...
                 mode: MODE
                 ...
                 End:

              3000 characters are sought from the end of file to find the pattern.

       vim modeline testing
              Like  the  modeline  of  the  Emacs  editor,  Vim  editor  has  the  same  concept.
              ctags-universal treats TYPE as a name of interpreter and applies the same  rule  of
              "interpreter"  heuristic  testing  if  the last 5 lines of the file have one of the
              following patterns:

                 filetype=TYPE

              or

                 ft=TYPE

       PHP marker testing
              If the first line is started with "<?php",  ctags-universal  regards  the  line  as
              "php".

       Looking  into  the file contents is a more expensive operation than file name matching. So
       ctags-universal runs the testings in limited conditions.  "interpreter" testing is enabled
       only  when a file is an executable or the --guess-language-eagerly (-G in short) option is
       given. The other heuristic tests are enabled only when -G option is given.

       The --print-language option can be used just to print the results of parser selections for
       given files instead of generating a tags file.

       Examples:

          $ ctags-universal --print-language config.h.in input.m input.unknown
          config.h.in: C++
          input.m: MatLab
          input.unknown: NONE

       NONE means that ctags-universal does not select any parser for the file.

TAG ENTRIES

       A  tag  is  an  index  for  a  language  object. The concept of a tag and related items in
       Exuberant-ctags are refined and extended in Universal-ctags.

       A tag is categorized into definition tags or reference tags.  In general,  Exuberant-ctags
       only  tags  definitions of language objects: places where newly named language objects are
       introduced.  Universal-ctags, on the other hand,  can  also  tag  references  of  language
       objects:  places  where  named  language objects are used. However, support for generating
       reference tags is new and limited to specific areas of specific languages in  the  current
       version.

   Fields
       A  tag  can  record  various information, called fields. The essential fields are: name of
       language objects, input, pattern, and line. input: is the name of source file where  name:
       is  defined  or referenced. pattern: can be used to search the name in input:. line is the
       line number where name: is defined or referenced in input:.

       ctags-universal offers extension fields. See also the descriptions of --list-fields option
       and --fields option.

   Kinds
       kind:  is  a  field which represents the kind of language object specified by a tag. Kinds
       used and defined are very different between  parsers.  For  example,  C  language  defines
       "macro",   "function",   "variable",   "typedef",   etc.  See  also  the  descriptions  of
       --list-kinds-full option and --kinds-<LANG> option.

   Extras
       Generally, ctags-universal tags only language objects appearing in source files, as is. In
       other  words, a value for a name: field should be found on the source file associated with
       the name:. An "extra" type tag (extra) is for tagging a language object with  a  processed
       name,  or for tagging something not associated with a language object. A typical extra tag
       is "qualified", which tags a language object with  a  class-qualified  or  scope-qualified
       name.

       The following example demonstrates the "qualified" extra tag.

          package Bar;
          import Baz;

          class Foo {
                  // ...
          }

       For  the  above  source  file,  ctags-universal  tags  "Bar" and "Foo" by default.  If the
       "qualified" extra is enabled from the command line (--extras=+q), then "Bar.Foo"  is  also
       tagged even though the string "Bar.Foo" is not in the source code.

       See also the descriptions of --list-extras option and --extras option in "OPTION ITEMS".

   Roles
       Role  is  a newly introduced concept in Universal-ctags. Role is a concept associated with
       reference tags, and is not implemented widely yet.

       As described previously in "Kinds", the "kind"  field  represents  the  type  of  language
       object  specified  with  a  tag,  such  as  a function vs. a variable.  Specific kinds are
       defined for reference tags, such as the C++ kind "header" for header file,  or  Java  kind
       "package"  for  package statements. For such reference kinds, a "roles" field can be added
       to distinguish the role of the reference kind. In other words, the "kind" field identifies
       the  "what"  of  the  language object, whereas the "roles" field identifies the "how" of a
       referenced language object. Roles are only used with specific kinds.

       For example, for the source file used for demonstrating in the "Extras" subsection,  "Baz"
       is tagged as a reference tag with kind "package" and with role "imported". Another example
       is for a C++ "header" kind tag, generated by "#include" statements:  the  roles:system  or
       roles:local  fields  will  be added depending on whether the include file name begins with
       "<" or not.

       See also the descriptions of --list-roles option.

   Language-specific fields and extras
       Exuberant-ctags has the concept of "fields" and "extras". They are common between  parsers
       of    different   languages.   Universal-ctags   extends   this   concept   by   providing
       language-specific fields and extras.

COMMAND LINE INTERFACE

       Despite the wealth of available options, defaults are set so that ctags-universal is  most
       commonly  executed  without  any  options  (e.g.  "ctags-universal *", or "ctags-universal
       -R"), which will create a tag file in the current  directory  for  all  recognized  source
       files.  The  options described below are provided merely to allow custom tailoring to meet
       special needs.

       Note that spaces separating the single-letter options from their parameters are optional.

       Note also that the boolean parameters to the long form options (those beginning with  "--"
       and  that  take  a "[=yes|no]" parameter) may be omitted, in which case "=yes" is implied.
       (e.g. --sort is equivalent to --sort=yes).  Note further that "=1", "=on", and "=true" are
       considered  synonyms  for  "=yes",  and  that  "=0",  "=off",  and "=false" are considered
       synonyms for "=no".

       Some options are either ignored or useful only when used while running in etags mode  (see
       -e option). Such options will be noted.

       Most  options  may  appear  anywhere on the command line, affecting only those files which
       follow the option. A few options, however, must appear before the first file name and will
       be noted as such.

       Options  taking  language names will accept those names in either upper or lower case. See
       the --list-languages option for a complete list of the built-in language names.

   Letters and names
       Some options take letters as parameters (e.g.  --kinds-<LANG>  option).   Specifying  just
       letters  help  a  user create a complicated command line quickly.  However, a command line
       including sequences of single letters becomes difficult to understand.

       Universal-ctags accepts names in addition to such letters. The names and  letters  can  be
       mixed in an option parameter by surrounding each name by braces. Thus, for an example, the
       following three notations for --kinds-C option have the same meaning:

          --kinds-C=+pLl
          --kinds-C=+{prototype}{label}{local}
          --kinds-C=+{prototype}L{local}

       Note that braces may be meta characters in your shell. Put single quotes in such case.

       --list-... options shows letters and associated names.

   List options
       Universal-ctags introduces many --list-... options  that  provide  the  internal  data  of
       Universal-ctags.  Both  users  and  client  tools may use the data. --with-list-header and
       --machinable options adjust the output of the most of --list-... options.

       The  default  setting  (--with-list-header=yes   and   --machinable=no)   is   for   using
       interactively  from  a terminal. The header that explains the meaning of columns is simply
       added to the output, and each column is aligned in all lines. The header line starts  with
       a hash ('#') character.

       For  scripting in a client tool, --with-list-header=no and --machinable=yes may be useful.
       The header is not added to the output, and each column is separated by tab characters.

       Note the order of columns will change in the  future  release.   However,  labels  in  the
       header  will  not  change. So by scanning the header, a client tool can find the index for
       the target column.

OPTION ITEMS

       ctags-universal has more options than listed here.  Options starting  with  an  underscore
       character,  such  as  --_echo=msg,  are  not  listed  here.  They  are experimental or for
       debugging purpose.

       -a     Equivalent to --append.

       -B     Use backward searching patterns (e.g. ?pattern?). [Ignored in etags mode]

       -e     Same as --output-format=etags.  Enable etags mode, which will create a tag file for
              use  with  the Emacs editor. Alternatively, if ctags-universal is invoked by a name
              containing the string "etags" (either by renaming,  or  creating  a  link  to,  the
              executable),  etags mode will be enabled.  This option must appear before the first
              file name.

       -f tagfile
              Use the name specified by tagfile for the tag file (default is  "tags",  or  "TAGS"
              when  running  in  etags  mode).  If tagfile is specified as "-", then the tags are
              written to standard output instead. ctags-universal will stubbornly refuse to  take
              orders  if  tagfile exists and its first line contains something other than a valid
              tags line. This will save your neck if  you  mistakenly  type  "ctags-universal  -f
              *.c",  which would otherwise overwrite your first C file with the tags generated by
              the rest! It will also refuse to accept a multi-character file  name  which  begins
              with a '-' (dash) character, since this most likely means that you left out the tag
              file name and this option tried to grab the next option as the file  name.  If  you
              really  want  to  name  your output tag file "-ugly", specify it as "./-ugly". This
              option must appear before the first file name. If this  option  is  specified  more
              than once, only the last will apply.

       -F     Use forward searching patterns (e.g. /pattern/) (default). [Ignored in etags mode]

       -G     Equivalent to --guess-language-eagerly.

       -h list
              Specifies  a  list  of  file  extensions,  separated  by  periods,  which are to be
              interpreted as include (or header) files. To indicate files  having  no  extension,
              use  a period not followed by a non-period character (e.g. ".", "..x", ".x."). This
              option only affects how the scoping of particular kinds  of  tags  are  interpreted
              (i.e. whether or not they are considered as globally visible or visible only within
              the file in which they  are  defined);  it  does  not  map  the  extension  to  any
              particular  language.  Any tag which is located in a non-include file and cannot be
              seen (e.g. linked to) from another file is considered to  have  file-limited  (e.g.
              static)  scope.  No  kind of tag appearing in an include file will be considered to
              have file-limited scope. If the first character in the list is a  plus  sign,  then
              the  extensions  in  the  list will be appended to the current list; otherwise, the
              list will replace the current list. See, also, the --file-scope option. The default
              list  is  ".h.H.hh.hpp.hxx.h++.inc.def".  To  restore  the default list, specify -h
              default. Note that if an extension supplied to this option is not already mapped to
              a particular language (see "SOURCE FILES", above), you will also need to use either
              the --langmap or --language-force option.

       -I identifier-list
              Specifies a list of identifiers which are to be specially handled while  parsing  C
              and  C++ source files. This option is specifically provided to handle special cases
              arising through the use of preprocessor macros.  When the  identifiers  listed  are
              simple  identifiers, these identifiers will be ignored during parsing of the source
              files. If an identifier is suffixed with a '+' character, ctags-universal will also
              ignore  any  parenthesis-enclosed  argument  list  which may immediately follow the
              identifier in the source files. If two  identifiers  are  separated  with  the  '='
              character,  the first identifiers is replaced by the second identifiers for parsing
              purposes. The list of identifiers may be supplied directly on the command  line  or
              read  in  from  a separate file.  If the first character of identifier-list is '@',
              '.' or a pathname separator ('/' or ''), or the  first  two  characters  specify  a
              drive  letter  (e.g.  "C:"), the parameter identifier-list will be interpreted as a
              filename from which to read a list of identifiers, one per input line.   Otherwise,
              identifier-list  is  a  list  of  identifiers (or identifier pairs) to be specially
              handled, each delimited by either a comma or by white space (in which case the list
              should be quoted to keep the entire list as one command line argument). Multiple -I
              options may be supplied. To clear the list of ignore identifiers, supply  a  single
              dash ("-") for identifier-list.

              This  feature  is  useful when preprocessor macros are used in such a way that they
              cause syntactic confusion due to their presence. Indeed, this is the  best  way  of
              working around a number of problems caused by the presence of syntax-busting macros
              in source files (see "CAVEATS").  Some examples will illustrate this point.

                 int foo ARGDECL4(void *, ptr, long int, nbytes)

              In the above example, the macro "ARGDECL4" would be mistakenly  interpreted  to  be
              the  name  of  the  function  instead  of the correct name of "foo". Specifying "-I
              ARGDECL4" results in the correct behavior.

                 /* creates an RCS version string in module */
                 MODULE_VERSION("$Revision$")

              In the above example the macro invocation looks too much like a function definition
              because  it  is not followed by a semicolon (indeed, it could even be followed by a
              global variable definition that would look much like a K&R style function parameter
              declaration).  In  fact, this seeming function definition could possibly even cause
              the rest of the file to be skipped over while trying to  complete  the  definition.
              Specifying "-I MODULE_VERSION+" would avoid such a problem.

                 CLASS Example {
                         // your content here
                 };

              The  example  above uses "CLASS" as a preprocessor macro which expands to something
              different  for  each  platform.  For  instance  CLASS  may  be  defined  as  "class
              __declspec(dllexport)" on Win32 platforms and simply "class" on UNIX. Normally, the
              absence of the C++ keyword "class" would cause the source file  to  be  incorrectly
              parsed. Correct behavior can be restored by specifying "-I CLASS=class".

       -L file
              Read from file a list of file names for which tags should be generated.  If file is
              specified as "-", then file names are read from standard  input.  File  names  read
              using this option are processed following file names appearing on the command line.
              Options are also accepted in this input. If this  option  is  specified  more  than
              once,  only  the last will apply. Note: file is read in line-oriented mode, where a
              new line  is  the  only  delimiter  and  non-trailing  white  space  is  considered
              significant,  in  order that file names containing spaces may be supplied (however,
              trailing white space is stripped from lines);  this  can  affect  how  options  are
              parsed if included in the input.

       -n     Equivalent to --excmd=number.

       -N     Equivalent to --excmd=pattern.

       -o tagfile
              Equivalent to -f tagfile.

       -R     Equivalent to --recurse.

       -u     Equivalent to --sort=no (i.e. "unsorted").

       -V     Equivalent to --verbose.

       -w     This  option  is silently ignored for backward-compatibility with the ctags of SVR4
              Unix.

       -x     Print a tabular, human-readable cross reference  (xref)  file  to  standard  output
              instead of generating a tag file. The information contained in the output includes:
              the tag name; the kind of tag; the line number, file name, and  source  line  (with
              extra  white  space  condensed)  of  the file which defines the tag. No tag file is
              written and all  options  affecting  tag  file  output  will  be  ignored.  Example
              applications  for this feature are generating a listing of all functions located in
              a source file (e.g. "ctags-universal -x --c-kinds=f file"), or generating a list of
              all   externally   visible   global  variables  located  in  a  source  file  (e.g.
              "ctags-universal -x --c-kinds=v --file-scope=no file").  This  option  must  appear
              before the first file name.

       --alias-<LANG>=[+|-]aliasPattern
              Adds  ('+')  or removes ('-') an alias pattern to a language specified with <LANG>.
              ctags-universal refers to the alias pattern in "Determining file language" stage.

              The parameter aliasPattern is not a list. Use  this  option  multiple  times  in  a
              command line to add or remove multiple alias patterns.

              To  restore  the  default  language  aliases,  specify  "default"  as the parameter
              aliasPattern. Using "all" for <LANG> has meaning in following two cases:

              --alias-all=
                     This clears aliases setting of all languages.

              --alias-all=default
                     This restores the default languages aliases for all languages.

       --append[=yes|no]
              Indicates whether tags generated from the specified files  should  be  appended  to
              those  already present in the tag file or should replace them.  This option is "no"
              by default. This option must appear before the first file name.

       --etags-include=file
              Include a reference to file in the tag file. This option may be specified  as  many
              times  as  desired.  This  supports  Emacs'  capability  to  use  a  tag file which
              "includes" other tag files. [Available only in etags mode]

       --exclude=[pattern]
              Add pattern to a list of  excluded  files  and  directories.  This  option  may  be
              specified   as   many   times   as  desired.  For  each  file  name  considered  by
              ctags-universal, each pattern specified using this option will be compared  against
              both the complete path (e.g.  some/path/base.ext) and the base name (e.g. base.ext)
              of the file, thus allowing patterns which match a given file name  irrespective  of
              its  path,  or match only a specific path. If appropriate support is available from
              the runtime library of your C compiler, then pattern may contain  the  usual  shell
              wildcards  (not  regular  expressions)  common on Unix (be sure to quote the option
              parameter to protect the wildcards from being expanded by the  shell  before  being
              passed  to  ctags-universal;  also  be  aware  that  wildcards  can match the slash
              character, '/').  You can determine  if  shell  wildcards  are  available  on  your
              platform  by examining the output of the --list-features option, which will include
              "wildcards" in the compiled feature list; otherwise,  pattern  is  matched  against
              file names using a simple textual comparison.

              If  pattern  begins  with  the  character  '@',  then  the  rest  of  the string is
              interpreted as a file name from which to read exclusion patterns, one per line.  If
              pattern is empty, the list of excluded patterns is cleared.

              Note  that  at  program  startup, the default exclude list contains names of common
              hidden and system files, patterns for binary files, and directories for which it is
              generally  not  desirable  to descend while processing the --recurse option. To see
              the list of built-in exclude patterns, use --list-excludes.

       --excmd=type
              Determines the type of EX command used to locate tags in the source file.  [Ignored
              in etags mode]

              The  valid values for type (either the entire word or the first letter is accepted)
              are:

              number Use only line numbers in the tag file  for  locating  tags.  This  has  four
                     advantages:

                     1. Significantly reduces the size of the resulting tag file.

                     2. Eliminates  failures  to  find tags because the line defining the tag has
                        changed, causing the pattern match to fail (note that some editors,  such
                        as vim, are able to recover in many such instances).

                     3. Eliminates  finding  identical matching, but incorrect, source lines (see
                        "BUGS").

                     4. Retains separate entries in the tag file for lines which are identical in
                        content.  In  pattern  mode,  duplicate  entries  are dropped because the
                        search patterns they generate are identical, making the duplicate entries
                        useless.

                     However,  this  option  has  one significant drawback: changes to the source
                     files can cause the line numbers recorded in  the  tag  file  to  no  longer
                     correspond  to  the  lines in the source file, causing jumps to some tags to
                     miss the target definition by one or more lines. Basically, this  option  is
                     best  used  when  the  source  code to which it is applied is not subject to
                     change. Selecting this option  type  causes  the  following  options  to  be
                     ignored: -BF.

              pattern
                     Use  only search patterns for all tags, rather than the line numbers usually
                     used for macro definitions.  This  has  the  advantage  of  not  referencing
                     obsolete  line  numbers  when lines have been added or removed since the tag
                     file was generated.

              mixed  In this mode, patterns are generally used with a  few  exceptions.   For  C,
                     line numbers are used for macro definition tags. This was the default format
                     generated by the original ctags and is, therefore, retained as  the  default
                     for  this  option.  For  Fortran,  line  numbers  are used for common blocks
                     because their corresponding source lines  are  generally  identical,  making
                     pattern searches useless for finding all matches.

       --extra=[+|-]flags|*
              Equivalent to --extras=[+|-]flags|*, which was introduced to make the option naming
              convention align to the other options like --kinds-<LANG>= and --fields=.

              This option is kept for backward-compatibility with Exuberant-ctags.

       --extras=[+|-]flags|*
              Specifies whether to include extra tag entries for certain  kinds  of  information.
              See also "Extras" subsection to know what are kinds.

              The  parameter  flags  is  a set of one-letter flags, each representing one kind of
              extra tag entry to include in the tag file.  If flags is preceded by either the '+'
              or  '-'  character,  the  effect  of  each flag is added to, or removed from, those
              currently enabled; otherwise the flags replace any current  settings.  All  entries
              are included  if '*' is given.

              This  --extras=  option  is  for  controlling  extras  common  in all languages (or
              language-independent  extras).   Universal-ctags  also  supports  language-specific
              extras.  (See  "Language-specific  fields  and  extras"  about  the  concept).  Use
              --extras-<LANG>= option for controlling them.

              The meaning of major extras is as follows (one-letter flag/name):

              F/fileScope
                     Equivalent to --file-scope.

              f/inputFile
                     Include an entry  for  the  base  file  name  of  every  source  file  (e.g.
                     "example.c"), which addresses the first line of the file.  If the end: field
                     is enabled, the end line number of the file can be attached to the tag.

              p/pseudo
                     Include pseudo tags. Enabled by default unless the tag file  is  written  to
                     standard output.

              q/qualified
                     Include  an  extra class-qualified or namespace-qualified tag entry for each
                     tag which is a member of a class or a namespace.

                     This may allow easier location of a specific tags when multiple  occurrences
                     of  a  tag  name  occur  in  the  tag  file.  Note, however, that this could
                     potentially more than double the size of the tag file.

                     The actual form of the qualified tag depends upon the  language  from  which
                     the  tag  was  derived  (using a form that is most natural for how qualified
                     calls are specified in the language). For C++ and Perl, it is  in  the  form
                     "class::member"; for Eiffel and Java, it is in the form "class.member".

                     Note:  Using  backslash  characters  as separators forming qualified name in
                     PHP. However, in tags output of Universal-ctags, a backslash character in  a
                     name is escaped with a backslash character.

              r/reference
                     Include reference tags. See "TAG ENTRIES" about reference tags.

              Inquire the output of --list-extras option for the other minor extras.

              A  name  associated  with an extra can be used as alternative to a one-letter flag.
              Some minor extras have no one-letters flag. In that case, names must  be  specified
              anyway. See "Letters and names" for more details.

       --extras-<LANG>=[+|-]flags|*
              Specifies whether to include extra tag entries for certain kinds of information for
              language  <LANG>.  Universal-ctags  introduces   language-specific   extras.   (See
              "Language-specific  fields  and  extras"  about  the  concept).  This option is for
              controlling them.

              Specifies "all" as <LANG> to apply the parameter flags to all languages; all extras
              are  enabled  with  specifying '*' as the parameter flags. If specifying nothing as
              the  parameter  flags  ("--extras-all="),  all  extras  are  disabled.  These   two
              combinations are useful for testing.

              Check  the  output  of  the  --list-extras=<LANG> option for the extras of specific
              language <LANG>.

       --fields-<LANG>=[+|-]flags|*
              Specifies which language-specific fields are to be included in the entries  of  the
              tag    file.    Universal-ctags    supports    language-specific    fields.    (See
              "Language-specific fields and extras"  about  the  concept).  This  option  is  for
              controlling them.

              Specify  "all" as <LANG> to apply the parameter flags to all fields; all fields are
              enabled with specifying '*' as the parameter flags. If specifying  nothing  as  the
              parameter  flags ("--fields-all="), all extras are disabled. These two combinations
              are useful for testing.

       --fields=[+|-]flags|*
              Specifies which available extension fields are to be included in  the  tag  entries
              (see "TAG FILE FORMAT", below, and, "Fields", above, for more information).

              The  parameter  flags  is  a set of one-letter flags, each representing one type of
              extension field to include.  Each letter or group of letters  may  be  preceded  by
              either  '+'  to  add it to the default set, or '-' to exclude it. In the absence of
              any preceding '+' or '-' sign, only those fields explicitly listed in flags will be
              included  in  the output (i.e. overriding the default set). All fields are included
              if '*' is given. This option is ignored if the option --format=1 (legacy  tag  file
              format) has been specified.

              This  --fields=  option  is  for  controlling  fields  common  in all languages (or
              language-independent  fields).   Universal-ctags  also  supports  language-specific
              fields.  (See  "Language-specific  fields  and  extras"  about  the  concept).  Use
              --fields-<LANG>= option for controlling them.

              The meaning of major fields is as follows (one-letter flag/name):

              a/access
                     Access (or export) of class members

              e/end  End lines of various items

              f/file File-restricted scoping. Enabled by default.

              i/inherits
                     Inheritance information.

              k      Kind of tag as a single letter. Enabled by default.  Exceptionally this  has
                     no name.

              K      Kind of tag as full name Exceptionally this has no name.

              l/language
                     Language of source file containing tag

              m/implementation
                     Implementation information

              n/line Line number of tag definition

              p/scopeKind
                     Kind of scope as full name

              r/roles
                     Roles  assigned to the tag.  For a definition tag, this field takes "def" as
                     a value.

              s      Scope of tag definition. Enabled by  default.   Exceptionally  this  has  no
                     name.

              S/signature
                     Signature of routine (e.g. prototype or parameter list)

              t/typeref
                     Type  and  name  of  a  variable,  typedef  or  return type of callable like
                     function as "typeref:" field.  Enabled by default.

              z/kind Include the "kind:" key in kind field

              Z      Include the "scope:" key in scope field.  Exceptionally this has no name.

              Check the output of the --list-fields option for the other minor fields.

              A name associated with a field can be used as alternative  to  a  one-letter  flag.
              Some  minor  fields have no one-letters flag. In that case, names must be specified
              anyway. See "Letters and names" for more details.

       --file-scope[=yes|no]
              Indicates whether tags scoped only for a single file (i.e.  tags  which  cannot  be
              seen  outside  of the file in which they are defined, such as "static" tags) should
              be included in the output. See, also, the -h option.  This  option  is  enabled  by
              default.

              Universal-ctags  provides  an  alternative  way  to  control  this option, with the
              "F/fileScope" extra, and recommends users to use the extra. However, this extra can
              cause issues.  See ctags-incompatibilities(7).

       --filter[=yes|no]
              Makes  ctags-universal  behave as a filter, reading source file names from standard
              input and printing their tags to standard output on a file-by-file basis. If --sort
              is  enabled, tags are sorted only within the source file in which they are defined.
              File names are read from standard input in line-oriented input mode (see  note  for
              -L  option)  and  only after file names listed on the command line or from any file
              supplied using the -L option. When this option is enabled, the options -f, -o,  and
              --totals  are  ignored.  This  option is quite esoteric and is disabled by default.
              This option must appear before the first file name.

       --filter-terminator=string
              Specifies a string to print to standard output following the  tags  for  each  file
              name  parsed  when  the  --filter option is enabled. This may permit an application
              reading the output of ctags-universal to determine when the output for each file is
              finished.  Note that if the file name read is a directory and --recurse is enabled,
              this string will be printed only  once  at  the  end  of  all  tags  found  for  by
              descending  the  directory.  This string will always be separated from the last tag
              line for the file by its terminating newline. This option is quite esoteric and  is
              empty by default. This option must appear before the first file name.

       --format=level
              Change the format of the output tag file. Currently the only valid values for level
              are 1 or 2. Level 1 specifies the original tag file format and level 2 specifies  a
              new  extended  format  containing  extension  fields (but in a manner which retains
              backward-compatibility with original vi(1) implementations). The default  level  is
              2. This option must appear before the first file name. [Ignored in etags mode]

       --guess-language-eagerly
              Looks into the file contents for heuristically guessing the proper language parser.
              See "Determining file language".

       --help Prints to standard output a detailed usage description, and then exits.

       --help-full
              Prints to standard output a detailed usage description about experimental features,
              and  then  exits.  Visit  http://docs.ctags.io/en/latest  for information about the
              latest exciting experimental features.

       --if0[=yes|no]
              Indicates a  preference  as  to  whether  code  within  an  "#if  0"  branch  of  a
              preprocessor  conditional  should  be  examined  for non-macro tags (macro tags are
              always included). Because the intent of this construct  is  to  disable  code,  the
              default  value of this option is no. Note that this indicates a preference only and
              does not guarantee skipping code within an "#if  0"  branch,  since  the  fall-back
              algorithm  used  to  generate  tags  when preprocessor conditionals are too complex
              follows all branches of a conditional. This option is disabled by default.

       --kinddef-<LANG>=letter,name,description
              See ctags-optlib(7).  Be not confused this with --kinds-<LANG>.

       --kinds-<LANG>=[+|-]kinds|*
              Specifies a list of language-specific kinds of tags (or kinds) to  include  in  the
              output  file for a particular language, where <LANG> is case-insensitive and is one
              of the built-in language names (see the  --list-languages  option  for  a  complete
              list). The parameter kinds is a group of one-letter flags designating kinds of tags
              (particular to the language) to either include or  exclude  from  the  output.  The
              specific  sets  of  flags recognized for each language, their meanings and defaults
              may be list using the --list-kinds-full option. Each letter or group of letters may
              be  preceded by either '+' to add it to, or '-' to remove it from, the default set.
              In the absence of any preceding '+' or '-' sign, only those kinds explicitly listed
              in  kinds  will  be  included  in  the  output (i.e. overriding the default for the
              specified language).

              Specify '*' as the parameter to include all kinds  implemented  in  <LANG>  in  the
              output.  Furthermore  if  "all"  is given as <LANG>, specification of the parameter
              kinds affects all languages defined in ctags-universal. Giving  "all"  makes  sense
              only when '*' is given as the parameter kinds.

              As  an example for the C language, in order to add prototypes and external variable
              declarations  to  the  default  set  of  tag  kinds,  but   exclude   macros,   use
              "--c-kinds=+px-d"; to include only tags for functions, use "--c-kinds=f".

              A  name associated with a kind can be used as alternative to a one-letter flag. See
              "Letters and names" for more details.

       --<LANG>-kinds=[+|-]kinds|*
              Equivalent to --kinds-<LANG>=.... This option is  kept  for  backward-compatibility
              with Exuberant-ctags.

       --langdef=name
              See ctags-optlib(7).

       --langmap=map[,map[...]]
              Controls  how file names are mapped to languages (see the --list-maps option). Each
              comma-separated  map  consists  of  the  language  name  (either  a   built-in   or
              user-defined  language),  a  colon,  and a list of file extensions and/or file name
              patterns. A file extension is specified by preceding the extension  with  a  period
              (e.g.  ".c").  A  file  name  pattern  is  specified  by  enclosing  the pattern in
              parentheses (e.g.  "([Mm]akefile)").

              If appropriate support is available from the runtime library of  your  C  compiler,
              then the file name pattern may contain the usual shell wildcards common on Unix (be
              sure to quote the option parameter to protect the wildcards from being expanded  by
              the  shell  before  being  passed  to  ctags-universal). You can determine if shell
              wildcards  are  available  on  your  platform  by  examining  the  output  of   the
              --list-features  option,  which  will  include  "wildcards" in the compiled feature
              list; otherwise, the file name patterns are matched  against  file  names  using  a
              simple textual comparison.

              When mapping a file extension with --langmap option, it will first be unmapped from
              any other languages. (--map-<LANG> option provides more fine-grained control.)

              If the first character in a map is a plus sign ('+'), then the extensions and  file
              name  patterns  in  that map will be appended to the current map for that language;
              otherwise, the map will replace the current map.  For example, to specify that only
              files  with  extensions  of  .c  and  .x are to be treated as C language files, use
              "--langmap=c:.c.x"; to also add files with extensions of .j as Java language files,
              specify  "--langmap=c:.c.x,java:+.j".  To  map  makefiles  (e.g. files named either
              "Makefile", "makefile", or having  the  extension  ".mak")  to  a  language  called
              "make",   specify   "--langmap=make:([Mm]akefile).mak".  To  map  files  having  no
              extension, specify a period not followed  by  a  non-period  character  (e.g.  ".",
              "..x", ".x.").

              To  clear  the  mapping  for  a  particular  language  (thus  inhibiting  automatic
              generation of tags for that  language),  specify  an  empty  extension  list  (e.g.
              "--langmap=fortran:").   To  restore the default language mappings for a particular
              language, supply the keyword "default" for the  mapping.  To  specify  restore  the
              default language mappings for all languages, specify "--langmap=default".

              Note  that  file name patterns are tested before file extensions when inferring the
              language  of  a  file.  This   order   of   Universal-ctags   is   different   from
              Exuberant-ctags.   See   ctags-incompatibilities(7)  for  the  background  of  this
              incompatible change.

       --language-force=language
              By default, ctags-universal automatically selects the language of  a  source  file,
              ignoring  those  files  whose  language  cannot  be determined (see "SOURCE FILES",
              above).  This  option  forces  the  specified  language  (case-insensitive;  either
              built-in   or  user-defined)  to  be  used  for  every  supplied  file  instead  of
              automatically selecting the language based upon its  extension.  In  addition,  the
              special  value  "auto" indicates that the language should be automatically selected
              (which effectively disables this option).

       --languages=[+|-]list
              Specifies the languages for which tag generation is enabled, with list containing a
              comma-separated  list  of  language  names  (case-insensitive;  either  built-in or
              user-defined). If the first language of list is not preceded by  either  a  '+'  or
              '-',  the  current list (the current settings of enabled/disabled languages managed
              in ctags-universal internally) will  be  cleared  before  adding  or  removing  the
              languages  in  list.  Until a '-' is encountered, each language in the list will be
              added to the current list.  As either the '+' or '-' is encountered  in  the  list,
              the   languages   following  it  are  added  or  removed  from  the  current  list,
              respectively.  Thus, it becomes simple to replace the current list with a new  one,
              or to add or remove languages from the current list.

              The actual list of files for which tags will be generated depends upon the language
              extension mapping in effect (see the --langmap option). Note that the most  of  all
              languages, including user-defined languages, are enabled unless explicitly disabled
              using this option. Language names included in list may be any built-in language  or
              one previously defined with --langdef. The default is "all", which is also accepted
              as a valid argument. See  the  --list-languages  option  for  a  list  of  the  all
              (built-in and user-defined) language names.

              Note  --languages=  option  works  cumulative way; the option can be specified with
              different arguments multiple times in a command line.

       --license
              Prints a summary of the software license to standard output, and then exits.

       --line-directives[=yes|no]
              Specifies whether "#line" directives should be recognized. These are present in the
              output of preprocessors and contain the line number, and possibly the file name, of
              the original source file(s) from which the preprocessor output file was  generated.
              When enabled, this option will cause ctags-universal to generate tag entries marked
              with the file names and line numbers of their locations  original  source  file(s),
              instead of their actual locations in the preprocessor output. The actual file names
              placed into the tag file  will  have  the  same  leading  path  components  as  the
              preprocessor  output  file,  since it is assumed that the original source files are
              located relative to the preprocessor output file  (unless,  of  course,  the  #line
              directive  specifies  an  absolute path). This option is off by default. Note: This
              option is generally only useful when used together  with  the  --excmd=number  (-n)
              option.   Also, you may have to use either the --langmap or --language-force option
              if the extension of the preprocessor output file is not known to ctags-universal.

       --links[=yes|no]
              Indicates whether symbolic links (if supported) should be followed.  When disabled,
              symbolic links are ignored. This option is on by default.

       --list-aliases[=language|all]
              Lists  the  aliases  for  either  the specified language or all languages, and then
              exits. The aliases are used when heuristically testing  a  language  parser  for  a
              source file.

       --list-excludes
              Lists the current exclusion patterns used to exclude files.

       --list-extras[=languages|all]
              Lists  the  extras recognized for either the specified language or "all" languages.
              See "Extras" subsection to know what are extras.

              An extra can be enabled or  disabled  with  --extras=  for  common  extras  in  all
              languages,  or  --extras-<LANG>=  for  the  specified language.  These option takes
              one-letter flag or name as a parameter for specifying an extra.

              The meaning of columns are as follows:

              LETTER One-letter flag. '-' means the extra does not have one-letter flag.

              NAME   The name of extra. The name is used in extras: field.

              ENABLED
                     Whether the extra is enabled or not. It takes "yes" or "no".

              LANGUAGE
                     The name of language if the extra is owned by a parser.   "NONE"  means  the
                     extra is common in parsers.

              DESCRIPTION
                     Human readable description for the extra.

       --list-features
              Lists the compiled features.

       --list-fields[=language|all]
              Lists  the  fields recognized for either the specified language or "all" languages.
              See "Fields" subsection to know what are fields.

              A field can be enabled  or  disabled  with  --fields=  for  common  extras  in  all
              languages,  or  --fields-<LANG>=  for  the  specified language.  These option takes
              one-letter flag or name as a parameter for specifying a field.

              The meaning of columns are as follows:

              LETTER One-letter flag. '-' means the field does not have one-letter flag.

              NAME   The name of field.

              ENABLED
                     Whether the field is enabled or not. It takes "yes" or "no".

              LANGUAGE
                     The name of language if the field is owned by a parser.   "NONE"  means  the
                     extra is common in parsers.

              JSTYPE Json type used in printing the value of field when "--output-format=json" is
                     specified.

                     Following characters are used for representing types.

                     s      string

                     i      integer

                     b      boolean (true or false)

                     The  representation  of  this  field  and  the   output   format   used   in
                     "--output-format=json" are still experimental.

              FIXED  Whether this field can be disabled or not. Some fields are printed always in
                     tags output. They have "yes" as the value for this column.

              DESCRIPTION
                     Human readable description for the field.

       --list-kinds[=language|all]
              Subset of --list-kinds-full. This option is kept  for  backward-compatibility  with
              Exuberant-ctags.

              This   option   prints   only   LETTER,   DESCRIPTION,   and   ENABLED   fields  of
              --list-kinds-full output. However, the presentation of ENABLED column is  different
              from  that  of  --list-kinds-full  option; "[off]" follows after description if the
              kind is disabled, and nothing follows     if enabled. The most  of  all  kinds  are
              enabled by default.

              The critical weakness of this option is that this option does not print the name of
              kind. Universal-ctags introduces --list-kinds-full because it considers that  names
              are important.

              This option does not work with --machinable nor --with-list-header.

       --list-kinds-full[=language|all]
              Lists  the  tag  kinds  recognized  for  either  the  specified  language  or "all"
              languages, and then exits. See "Kinds" subsection to learn what kinds are.

              Each kind of tag recorded in the tag file is represented by a one-letter  flag,  or
              name.  They  are also used to filter the tags placed into the output through use of
              the --kinds-<LANG> option.

              The meaning of columns are as follows:

              LANGUAGE
                     The name of language having the kind.

              LETTER One-letter flag. This must be unique in a language.

              NAME   Name of the kind. This can  be  used  as  the  alternative  one-letter  flag
                     described  above.  If  enabling  'K' field with --fields=+K, ctags-universal
                     uses name instead of letter in tags output. To enable/disable  a  kind  with
                     --kinds-<LANG>  option,  name  surrounded  by  braces instead of letter. See
                     "Letters and names" for details. This must be unique in a language.

              ENABLED
                     Whether the kind is enabled or not. It takes "yes" or "no".

              REFONLY
                     Whether the kind is specialized for reference tagging or not.  If the column
                     is  "yes",  the  kind  is  for  reference  tagging, and it is never used for
                     definition tagging. See also "TAG ENTRIES".

              NROLES The number of roles this kind has. See also "Roles".

              MASTER The master parser controlling enablement of the kind.  A kind belongs  to  a
                     language  (owner)  in  Universal-ctags;  enabling  and disabling a kind in a
                     language has no effect on a kind in another language even if both kinds  has
                     the same letter and/or the same name. In other words, the namespace of kinds
                     are separated by language.

                     However,  Exuberant-ctags  does  not  separate  the  kinds  of  C  and  C++.
                     Enabling/disabling  kindX  in  C  language  enables/disables  a  kind in C++
                     language having the same name  with  kindX.  To  emulate  this  behavior  in
                     Universal-ctags,   a   concept   named   "master   parser"   is  introduced.
                     Enabling/disabling some kinds are synchronized under the control of a master
                     language.

                        $ ctags --kinds-C=+'{local}' --list-kinds-full \
                          | grep -E '^(#|C\+\+ .* local)'
                        #LANGUAGE  LETTER NAME   ENABLED REFONLY NROLES MASTER DESCRIPTION
                        C++        l      local  yes     no      0      C      local variables
                        $ ctags --kinds-C=-'{local}' --list-kinds-full \
                          | grep -E '^(#|C\+\+ .* local)'
                        #LANGUAGE  LETTER NAME   ENABLED REFONLY NROLES MASTER DESCRIPTION
                        C++        l      local  no      no      0      C      local variables

                     You  see  "ENABLED"  field of "local" kind of C++ language is changed Though
                     "local" kind of C language is enabled/disabled. If you swap  the  languages,
                     you see the same result.

              DESCRIPTION
                     Human readable description for the kind.

       --list-languages
              Lists  the  names  of  the languages understood by ctags-universal, and then exits.
              These language names are case insensitive and may be used  in  many  other  options
              like --language-force, --languages, --kinds-<LANG>, --regex-<LANG>, and so on.

              Each  language  listed  is disabled if followed by "[disabled]".  To use the parser
              for such a language, specify the language as an argument of --languages=+ option.

              This option does not work with --machinable nor --with-list-header.

       --list-map-extensions[=language|all]
              Lists the file extensions which associate a file name with a  language  for  either
              the specified language or all languages, and then exits.

       --list-map-patterns[=language|all]
              Lists the file name patterns which associate a file name with a language for either
              the specified language or all languages, and then exits.

       --list-maps[=language|all]
              Lists file name patterns and the file extensions which associate a file name with a
              language  for  either  the specified language or all languages, and then exits. See
              the --langmap option, and "SOURCE FILES", above.

              To  list  the  file  extensions   or   file   name   patterns   individually,   use
              --list-map-extensions or --list-map-patterns option.  See the --langmap option, and
              "SOURCE FILES", above.

              This option does not work with --machinable nor --with-list-header.

       --list-regex-flags
              See ctags-optlib(7).

       --list-roles[=language|all[.kinds]]
              List the roles for either  the  specified  language  or  "all"  languages.  If  the
              parameter  kinds  is given after the parameter language or "all" with concatenating
              with '.', list only roles defined in the kinds. Both  one-letter  flags  and  names
              surrounded by braces are acceptable as the parameter kinds.

              The meaning of columns are as follows:

              LANGUAGE
                     Name of language having the role.

              KIND(L/N)
                     One-letter flag and name of kind having the role.

              NAME   Name of the role.

              ENABLED
                     Whether  the kind is enabled or not. It takes "yes" or "no".  (Currently all
                     roles are  enabled.  No  option  for  disabling  a  specified  role  is  not
                     implemented yet.)

              DESCRIPTION
                     Human readable description for the role.

       --machinable[=yes|no]
              Use  tab character as separators for --list- option output.  It may be suitable for
              scripting. See "List options" for considered use cases. Disabled by default.

       --map-<LANG>=[+|-]extension|pattern
              This option provides the way to control mapping(s) of file names to languages in  a
              more fine-grained way than --langmap option.

              In  ctags-universal,  more than one language can map to a file name pattern or file
              extension (N:1 map). Alternatively, --langmap option handle only 1:1 map, only  one
              language  mapping to one file name pattern or file extension.  A typical N:1 map is
              seen in C++ and ObjectiveC language; both languages have a map to ".h"  as  a  file
              extension.

              A file extension is specified by preceding the extension with a period (e.g. ".c").
              A file name pattern is specified by enclosing  the  pattern  in  parentheses  (e.g.
              "([Mm]akefile)").  A prefixed plus ('+') sign is for adding, and minus ('-') is for
              removing. No prefix means replacing the map of <LANG>.

              Unlike --langmap, extension (or pattern) is not a  list.   --map-<LANG>  takes  one
              extension  (or  pattern).  However,  the  option  can  be  specified with different
              arguments multiple times in a command line.

       --maxdepth
              Limits the depth of directory recursion enabled with the --recurse (-R) option.

       --options=pathname
              Read additional options from file or directory.

              ctags-universal searches pathname in optlib path  list  first.  If  ctags-universal
              cannot  find  a  file  or  directory  in  the list, ctags-universal reads a file or
              directory at the specified pathname.

              If a file is specified, it should contain one option per line. If  a  directory  is
              specified, files suffixed with ".ctags" under it are read in alphabetical order.

              As  a  special  case,  if  "--options=NONE" is specified as the first option on the
              command line, preloading is disabled; the option will disable the automatic reading
              of any configuration options from either a file or the environment (see "FILES").

       --options-maybe=pathname
              Same  as --options but doesn't cause an error if file (or directory) specified with
              pathname doesn't exist.

       --optlib-dir=[+]directory
              Add an optlib directory to or reset optlib path list.  By default, the optlib  path
              list is empty.

       --print-language
              Just prints the language parsers for specified source files, and then exits.

       --quiet[=yes|no]
              Write fewer messages (default is no).

       --recurse[=yes|no]
              Recurse into directories encountered in the list of supplied files.  If the list of
              supplied files is empty and no file list is specified with the -L option, then  the
              current directory (i.e. ".") is assumed.  Symbolic links are followed. If you don't
              like these behaviors, either explicitly specify the files or  pipe  the  output  of
              find(1) into ctags-universal -L- instead. Note: This option is not supported on all
              platforms at present. It is available if the output of the --help  option  includes
              this option. See, also, the --exclude to limit recursion.

       --regex-<LANG>=/regexp/replacement/[kind-spec/][flags]
              See ctags-optlib(7).

       --sort[=yes|no|foldcase]
              Indicates  whether  the tag file should be sorted on the tag name (default is yes).
              Note that the original vi(1) required sorted tags.  The  foldcase  value  specifies
              case  insensitive  (or  case-folded)  sorting.   Fast  binary searches of tag files
              sorted with case-folding will require special support from tools using  tag  files,
              such  as  that found in the ctags-universal readtags library, or Vim version 6.2 or
              higher (using "set ignorecase"). This option must  appear  before  the  first  file
              name. [Ignored in etags mode]

       --tag-relative[=yes|no]
              Indicates  that  the  file paths recorded in the tag file should be relative to the
              directory containing the tag file, rather than relative to the  current  directory,
              unless  the  files  supplied on the command line are specified with absolute paths.
              This option must appear before the first file name. The default is yes when running
              in etags mode (see the -e option), no otherwise.

       --totals[=yes|no]
              Prints  statistics  about the source files read and the tag file written during the
              current invocation of ctags-universal. This option is off by default.  This  option
              must appear before the first file name.

       --verbose[=yes|no]
              Enable  verbose  mode. This prints out information on option processing and a brief
              message describing  what  action  is  being  taken  for  each  file  considered  by
              ctags-universal.  Normally,  ctags-universal  does  not read command line arguments
              until after options are read from the configuration files (see "FILES", below)  and
              the  CTAGS  environment  variable. However, if this option is the first argument on
              the command line, it will take effect  before  any  options  are  read  from  these
              sources. The default is no.

       --version
              Prints a version identifier for ctags-universal to standard output, and then exits.
              This is guaranteed to always contain the string "Universal Ctags".

       --with-list-header[=yes|no]
              Print headers  describing  columns  in  --list-  option  output.   See  also  "List
              options".

OPERATIONAL DETAILS

       As ctags-universal considers each file name in turn, it tries to determine the language of
       the file by applying the following three tests in order: if the file  extension  has  been
       mapped  to  a  language, if the filename matches a shell pattern mapped to a language, and
       finally if the file is executable and its first line specifies an  interpreter  using  the
       Unix-style  "#!"  specification  (if  supported  on  the  platform). Additionallly, if the
       --guess-language-eagerly option is given, heuristic testing is also performed to determine
       if a language parser applies. (See "Determining file language")

       If  a language was identified, the file is opened and then the appropriate language parser
       is called to operate on the currently open file. The parser parses through  the  file  and
       adds  an  entry to the tag file for each language object it is written to handle. See "TAG
       FILE FORMAT", below, for details on these entries.

       This implementation of ctags-universal imposes no formatting requirements on C code as  do
       legacy  implementations.  Older  implementations  of  ctags  tended  to  rely upon certain
       formatting assumptions in order to help it resolve coding dilemmas caused by  preprocessor
       conditionals.

       In  general,  ctags-universal tries to be smart about conditional preprocessor directives.
       If a preprocessor conditional is encountered within  a  statement  which  defines  a  tag,
       ctags-universal  follows  only the first branch of that conditional (except in the special
       case of "#if 0", in which case it follows only the last branch). The reason  for  this  is
       that failing to pursue only one branch can result in ambiguous syntax, as in the following
       example:

          #ifdef TWO_ALTERNATIVES
          struct {
          #else
          union {
          #endif
                  short a;
                  long b;
          }

       Both branches cannot be followed, or braces become unbalanced and ctags-universal would be
       unable to make sense of the syntax.

       If  the  application  of  this  heuristic fails to properly parse a file, generally due to
       complicated and inconsistent pairing within the conditionals, ctags-universal  will  retry
       the  file  using  a  different  heuristic  which  does  not selectively follow conditional
       preprocessor branches, but instead falls back to relying upon a  closing  brace  ("}")  in
       column  1 as indicating the end of a block once any brace imbalance results from following
       a #if conditional branch.

       ctags-universal will also try to specially handle arguments lists enclosed in double  sets
       of parentheses in order to accept the following conditional construct:
          extern void foo __ARGS((int one, char two));

       Any  name  immediately  preceding  the "((" will be automatically ignored and the previous
       name will be used.

       C++ operator definitions are specially handled. In order for consistency with all types of
       operators  (overloaded  and  conversion), the operator name in the tag file will always be
       preceded by the string "operator " (i.e.  even  if  the  actual  operator  definition  was
       written as "operator<<").

       After  creating  or  appending  to  the  tag  file, it is sorted by the tag name, removing
       identical tag lines.

TAG FILE FORMAT

       When not running in etags mode, each entry in the tag file consists of  a  separate  line,
       each looking like this in the most general case:

       tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields

       The fields and separators of these lines are specified as follows:

          1. tag name

          2. single tab character

          3. name of the file in which the object associated with the tag is located

          4. single tab character

          5. EX  command  used  to  locate  the  tag  within the file; generally a search pattern
             (either /pattern/ or ?pattern?) or line number (see --excmd). Tag file format 2 (see
             --format)  extends  this  EX command under certain circumstances to include a set of
             extension fields (described below) embedded in an EX comment immediately appended to
             the   EX   command,   which   leaves  it  backward-compatible  with  original  vi(1)
             implementations.

       A few special tags are written into the tag file for internal purposes.   These  tags  are
       composed  in such a way that they always sort to the top of the file. Therefore, the first
       two characters of these tags are used a magic number to detect a tag file for purposes  of
       determining whether a valid tag file is being overwritten rather than a source file.

       Note  that  the  name  of  each source file will be recorded in the tag file exactly as it
       appears on the command line. Therefore, if the path you specified on the command line  was
       relative to the current directory, then it will be recorded in that same manner in the tag
       file. See, however, the --tag-relative option for how this behavior can be modified.

       Extension fields are tab-separated key-value pairs appended to the end of the  EX  command
       as  a  comment,  as  described  above.  These  key  value pairs appear in the general form
       "key:value". Their presence in the lines of the tag file are controlled  by  the  --fields
       option. The possible keys and the meaning of their values are as follows:

       access Indicates  the  visibility  of  this  class  member, where value is specific to the
              language.

       file   Indicates that the tag has file-limited visibility. This key has  no  corresponding
              value.

       kind   Indicates  the  type, or kind, of tag. Its value is either one of the corresponding
              one-letter flags described under the various --kinds-<LANG>  options  above,  or  a
              full  name.  It  is permitted (and is, in fact, the default) for the key portion of
              this field to be omitted. The optional behaviors are controlled with  the  --fields
              option.

       implementation
              When present, this indicates a limited implementation (abstract vs.  concrete) of a
              routine or class, where value is specific  to  the  language  ("virtual"  or  "pure
              virtual" for C++; "abstract" for Java).

       inherits
              When  present, value. is a comma-separated list of classes from which this class is
              derived (i.e. inherits from).

       signature
              When present, value is a language-dependent representation of the  signature  of  a
              routine.  A  routine  signature in its complete form specifies the return type of a
              routine and its formal argument list.  This extension field is presently  supported
              only for C-based languages and does not include the return type.

       In addition, information on the scope of the tag definition may be available, with the key
       portion equal to some language-dependent construct name and its value  the  name  declared
       for  that construct in the program.  This scope entry indicates the scope in which the tag
       was found.  For example, a tag generated for a C  structure  member  would  have  a  scope
       looking like "struct:myStruct".

HOW TO USE WITH VI

       Vi  will,  by default, expect a tag file by the name "tags" in the current directory. Once
       the tag file is built, the following commands exercise the tag indexing feature:

       vi -t tag
              Start vi and position the cursor at the file and line where "tag" is defined.

       :ta tag
              Find a tag.

       Ctrl-] Find the tag under the cursor.

       Ctrl-T Return to previous location before jump to tag (not widely implemented).

HOW TO USE WITH GNU EMACS

       Emacs will, by default, expect a tag file by the name "TAGS"  in  the  current  directory.
       Once the tag file is built, the following commands exercise the tag indexing feature:

       M-x visit-tags-table <RET> FILE <RET>
              Select the tag file, "FILE", to use.

       M-. [TAG] <RET>
              Find  the  first  definition  of  TAG.  The default tag is the identifier under the
              cursor.

       M-*    Pop back to where you previously invoked "M-.".

       C-u M-.
              Find the next definition for the last tag.

       For more commands, see the Tags topic in the Emacs info document.

HOW TO USE WITH NEDIT

       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 File". To jump to the definition for
       a tag, highlight the word, then press Ctrl-D. NEdit 5.1 can read multiple tag  files  from
       different  directories.  Setting  the  X  resource nedit.tagFile to the name of a tag file
       instructs NEdit to automatically load that tag file at startup time.

CAVEATS

       Because ctags-universal is neither a preprocessor nor  a  compiler,  use  of  preprocessor
       macros  can  fool  ctags-universal  into  either  missing  tags  or  improperly generating
       inappropriate tags. Although ctags-universal has been designed to  handle  certain  common
       cases,  this  is  the single biggest cause of reported problems. In particular, the use of
       preprocessor constructs which alter the textual syntax of C can fool ctags-universal.  You
       can work around many such problems by using the -I option.

       Note  that  since  ctags-universal  generates  patterns for locating tags (see the --excmd
       option), it is entirely possible that the wrong line may be found by your editor if  there
       exists  another  source  line  which  is  identical  to  the  line containing the tag. The
       following example demonstrates this condition:

          int variable;

          /* ... */
          void foo(variable)
          int variable;
          {
                  /* ... */
          }

       Depending upon which editor you use and where in the code you happen to be, it is possible
       that  the  search  pattern  may  locate the local parameter declaration in foo() before it
       finds the actual global variable definition, since the lines (and therefore  their  search
       patterns are identical).  This can be avoided by use of the --excmd=n option.

BUGS

       ctags-universal has more options than ls(1).

       When   parsing   a   C++   member   function   definition   (e.g.  "className::function"),
       ctags-universal cannot determine whether  the  scope  specifier  is  a  class  name  or  a
       namespace  specifier  and  always  lists  it  as  a class name in the scope portion of the
       extension fields. Also, if a C++ function is defined outside of the class declaration (the
       usual   case),   the  access  specification  (i.e.  public,  protected,  or  private)  and
       implementation  information  (e.g.  virtual,  pure  virtual)  contained  in  the  function
       declaration  are not known when the tag is generated for the function definition. It will,
       however be available for prototypes (e.g. "--c++-kinds=+p").

       No qualified tags are generated for language objects inherited into a class.

ENVIRONMENT VARIABLES

       CTAGS  If this environment variable exists, it will  be  expected  to  contain  a  set  of
              default options which are read when ctags-universal starts, after the configuration
              files listed in FILES, below, are read, but before any  command  line  options  are
              read. Options appearing on the command line will override options specified in this
              variable.  Only options will be read from this variable. Note that all white  space
              in  this variable is considered a separator, making it impossible to pass an option
              parameter containing an embedded space. If this is a problem, use  a  configuration
              file instead.

       ETAGS  Similar  to  the  CTAGS  variable above, this variable, if found, will be read when
              etags starts. If this variable is not found, etags will try to use CTAGS instead.

       TMPDIR On Unix-like hosts where  mkstemp()  is  available,  the  value  of  this  variable
              specifies  the  directory in which to place temporary files.  This can be useful if
              the size of a temporary file becomes too large to fit on the partition holding  the
              default  temporary  directory  defined at compilation time. ctags-universal creates
              temporary files only if either (1) an emacs-style tag file is being generated,  (2)
              the  tag  file is being sent to standard output, or (3) the program was compiled to
              use an internal sort algorithm to sort the tag files instead of the sort utility of
              the  operating  system.  If the sort utility of the operating system is being used,
              it will generally observe this variable  also.  Note  that  if  ctags-universal  is
              setuid, the value of TMPDIR will be ignored.

FILES

       $HOME/.ctags.d/*.ctags

       $HOMEDRIVE$HOMEPATH/ctags.d/*.ctags (on MSWindows only)

       .ctags.d/*.ctags

       ctags.d/*.ctags
          If  any  of  these configuration files exist, each will be expected to contain a set of
          default options which are read in the order listed  when  ctags-universal  starts,  but
          before  the  CTAGS  environment  variable is read or any command line options are read.
          This makes it possible to set up personal or project-level defaults. It is possible  to
          compile  ctags-universal  to  read an additional configuration file before any of those
          shown above, which will be indicated if the output produced  by  the  --version  option
          lists the "custom-conf" feature. Options appearing in the CTAGS environment variable or
          on the command line will override options specified in these files. Only  options  will
          be  read from these files. Note that the option files are read in line-oriented mode in
          which spaces are significant (since shell quoting is not possible) but  spaces  at  the
          beginning  of  a  line  are  ignored. Each line of the file is read as one command line
          parameter (as if it were quoted with single  quotes).   Therefore,  use  new  lines  to
          indicate  separate  command-line  arguments.   A line starting with '#' is treated as a
          comment.

          *.ctags files in a directory are loaded in alphabetical order.

       tags   The default tag file created by ctags-universal.

       TAGS   The default tag file created by etags.

SEE ALSO

       See ctags-optlib(7) for defining (or extending) a parser in a configuration file.

       The official Universal-ctags web site at:

       https://ctags.io/

       Also ex(1), vi(1), elvis, or, better yet, vim, the official editor  of  ctags.   For  more
       information on vim, see the VIM Pages web site at:

       http://www.vim.org/

AUTHOR

       Universal-ctags project https://ctags.io

       Darren Hiebert <dhiebert@users.sourceforge.net> http://DarrenHiebert.com/

MOTIVATION

       "Think ye at all times of rendering some service to every member of the human race."

       "All effort and exertion put forth by man from the fullness of his heart is worship, if it
       is prompted by the highest motives and the will to do service to humanity."

       -- From the Baha'i Writings

CREDITS

       This version of ctags-universal (Universal-ctags) derived from the  repository,  known  as
       fishman-ctags, started by Reza Jelveh.

       Some parsers are taken from tagmanager of Geany (https://www.geany.org/) project.

       The fishman-ctags was derived from Exuberant-ctags.

       Exuberant-ctags  was  originally  derived  from and inspired by the ctags program by Steve
       Kirkendall <kirkenda@cs.pdx.edu> that comes with the Elvis vi clone (though virtually none
       of the original code remains).

       Credit  is  also  due Bram Moolenaar <Bram@vim.org>, the author of vim, who has devoted so
       much of his time and energy both to developing the editor as a service to others,  and  to
       helping the orphans of Uganda.

       The section entitled "HOW TO USE WITH GNU EMACS" was shamelessly stolen from the info page
       for GNU etags.