## SYNOPSIS

           etags [-aCDGImRVh] [-i file] [-l language]
           [-o tagfile] [-r regexp]
           [--append] [--no-defines] [--no-globals] [--include=file]
           [--ignore-indentation] [--language=language] [--members]
           [--output=tagfile] [--regex=regexp] [--no-regex]
           [--ignore-case-regex=regexp] [--help] [--version] file ...

           gnuctags [-aCdgImRVh] [-BtTuvwx] [-l language]
           [-o tagfile] [-r regexp]
           [--append] [--backward-search] [--cxref] [--defines]
           [--forward-search] [--globals] [--ignore-indentation]
           [--language=language] [--members] [--output=tagfile]
           [--regex=regexp] [--ignore-case-regex=regexp] [--typedefs]
           [--typedefs-and-c++] [--update] [--no-warn] [--help]
           [--version] file ...

## DESCRIPTION

           The etags program is used to create a tag table file, in a
           format  understood  by  emacs(1);  the gnuctags program is
           used to create a similar table in a format  understood  by
           vi(1).  Both forms of the program understand the syntax of
           C, Objective C, C++, Java, Fortran,  Ada,  Cobol,  Erlang,
           LaTeX,  Emacs  Lisp/Common  Lisp, makefiles, Pascal, Perl,
           Postscript, Python, Prolog, Scheme and most assembler-like
           syntaxes.  Both forms read the files specified on the com
           mand line, and write  a  tag  table  (defaults:  TAGS  for
           etags,  tags for gnuctags) in the current working directo
           ry.  Files specified with  relative  file  names  will  be
           recorded  in the tag table with file names relative to the
           directory where the tag table  resides.   Files  specified
           with  absolute  file  names will be recorded with absolute
           file names.  The programs recognize the language  used  in
           an  input  file  based on its file name and contents.  The
           --language switch can be used to force parsing of the file
           names  following  the  switch  according to the given lan
           guage, overriding guesses based on filename extensions.

## OPTIONS

           Some options make sense only for the vi  style  tag  files
           produced  by gnuctags; etags does not recognize them.  The
           programs accept unambiguous abbreviations for long  option
           names.

           -a, --append
                  Append  to  existing  tag file.  (For vi-format tag
                  files, see also --update.)

           -B, --backward-search
                  Tag files written in the format expected by vi con
                  tain regular expression search instructions; the -B
                  option writes them  using  the  delimiter  `?',  to

           -D, --no-defines
                  Do  not  create tag entries for C preprocessor con
                  stant definitions and  enum  constants.   This  may
                  make  the  tags  file  much  smaller if many header
                  files are tagged.  This is the default behavior for
                  gnuctags.

           -g, --globals
                  Create  tag entries for global variables in C, C++,
                  Objective C, Java, and Perl.  This is  the  default
                  behavior for etags.

           -G, --no-globals
                  Do  not  tag  global variables.  Typically this re
                  duces the file size by one fourth.  This is the de
                  fault behavior for gnuctags.

           -i file, --include=file
                  Include  a  note  in  the tag file indicating that,
                  when searching for a tag, one should  also  consult
                  the tags file file after checking the current file.
                  This options is only accepted by etags.

           -I, --ignore-indentation
                  Don't rely on indentation as much  as  we  normally
                  do.   Currently,  this  means  not to assume that a
                  closing brace in the  first  column  is  the  final
                  brace  of  a  function or structure definition in C
                  and C++.

           -l language, --language=language
                  Parse the following files according  to  the  given
                  language.  More than one such options may be inter
                  mixed with filenames.  Use --help to get a list  of
                  the  available languages and their default filename
                  extensions.  The `auto' language can be used to re
                  store  automatic detection of language based on the
                  file name.  The `none' language may be used to dis
                  able   language  parsing  altogether;  only  regexp
                  matching is done in this case (see the --regex  op
                  tion).

           -m, --members
                  Create  tag  entries for variables that are members
                  of structure-like constructs in C++,  Objective  C,
                  Java.

           -M, --no-members
                  Do  not  tag member variables.  This is the default
                  behavior.

           --packages-only
                  freely intermixed with filenames and the -R option.
                  The regexps are cumulative, i.e. each  option  will
                  add  to  the previous ones.  The regexps are of the
                  form:
                       /tagregexp[/nameregexp]/

                  where tagregexp is used to  match  the  lines  that
                  must  be tagged.  It should not match useless char
                  acters.  If the match is such that more  characters
                  than  needed  are unavoidably matched by tagregexp,
                  it may be useful to add  a  nameregexp,  to  narrow
                  down the tag scope.  gnuctags ignores regexps with
                  out a nameregexp.  The syntax  of  regexps  is  the
                  same as in emacs.
                  Here are some examples.  All the regexps are quoted
                  to protect them from shell interpretation.

                  Tag the DEFVAR macros in the emacs source files:
                  --regex='/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"'

                  Tag VHDL files (this example is a single long line,
                  broken here for formatting reasons):
                  --language=none --regex='/[ \t]*\(ARCHITECTURE\|\
                  CONFIGURATION\) +[^ ]* +OF/' --regex='/[ \t]*\
                  \(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\( BODY\)?\
                  \|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/'

                  Tag TCL files (this last example shows the usage of
                  a tagregexp):
                  --lang=none --regex='/proc[ \t]+\([^ \t]+\)/\1/'

                  A regexp can be preceded by {lang}, thus  restrict
                  ing  it  to  match  lines of files of the specified
                  language.  Use etags --help to obtain a list of the
                  recognised languages.  This feature is particularly
                  useful inside regex files.  A regex  file  contains
                  one  regex  per line.  Empty lines, and those lines
                  beginning with space or tab are ignored.  Lines be
                  ginning  with @ are references to regex files whose
                  name follows the @ sign.  Other lines  are  consid
                  ered   regular  expressions  like  those  following
                  --regex.
                  For example, the command
                  etags --regex=@regex.file *.c
                  reads the regexes contained in the file regex.file.

           -R, --no-regex
                  Don't  do any more regexp matching on the following
                  files.  May be freely intermixed with filenames and
                  the --regex option.

           -t, --typedefs
                  isting entries for the given files and then rewrit
                  ing the new entries at the end of  the  tags  file.
                  It is often faster to simply rebuild the entire tag
                  file than to use this.  Only gnuctags accepts  this
                  option.

           -v, --vgrind
                  Instead  of  generating a tag file, write index (in
                  vgrind format) to standard output.   Only  gnuctags
                  accepts this option.

           -w, --no-warn
                  Suppress  warning messages about duplicate entries.
                  The etags program does not check for duplicate  en
                  tries, so this option is not allowed with it.

           -x, --cxref
                  Instead  of  generating  a  tag file, write a cross
                  reference (in cxref  format)  to  standard  output.
                  Only gnuctags accepts this option.

           -h, -H, --help
                  Print usage information.

           -V, --version
                  Print  the  current version of the program (same as
                  the version of the emacs etags is shipped with).

## SEE ALSO

           `emacs' entry in info; GNU Emacs Manual, Richard Stallman.
           ctags(1), cxref(1), emacs(1), gctags(1), vgrind(1), vi(1).

## COPYING

           Copyright (c) 1999, 2001 Free Software Foundation, Inc.

           Permission is granted  to  make  and  distribute  verbatim
           copies  of this document provided the copyright notice and
           this permission notice are preserved on all copies.

           Permission is granted to copy and distribute modified ver
           sions  of  this document under the conditions for verbatim
           copying, provided that the entire resulting  derived  work
           is  distributed  under  the  terms  of a permission notice
           identical to this one.

           Permission is granted to copy and distribute  translations
           of  this  document  into another language, under the above
           conditions for modified versions, except that this permis
           sion notice may be stated in a translation approved by the
           Free Software Foundation.