Merge pull request #11 from esorton/bugfix/add-constexpr-keyword-to-arduino-ctags
[arduino-ctags.git] / ctags.1
blob2d890060fdde526fb6e57d376df87577b7cf95a2
1 .TH CTAGS 1 "Version 5.8" "Darren Hiebert" "Exuberant Ctags"
4 .SH "NAME"
5 ctags \- Generate tag files for source code
8 .SH SYNOPSIS
9 .TP 6
10 \fBctags\fP [\fBoptions\fP] [\fIfile(s)\fP]
11 .TP 6
12 \fBetags\fP [\fBoptions\fP] [\fIfile(s)\fP]
15 .SH "DESCRIPTION"
16 The \fBctags\fP and \fBetags\fP programs (hereinafter collectively referred to
17 as \fBctags\fP, except where distinguished) generate an index (or "tag") file
18 for a variety of language objects found in \fIfile(s)\fP.
19 This tag file allows these items to be quickly and easily located by a text
20 editor or other utility. A "tag" signifies a language object for which an
21 index entry is available (or, alternatively, the index entry created for that
22 object).
24 Alternatively, \fBctags\fP can generate a cross reference file which lists, in
25 human readable form, information about the various source objects found in a
26 set of language files.
28 Tag index files are supported by numerous editors, which allow the user to
29 locate the object associated with a name appearing in a source file and jump
30 to the file and line which defines the name. Those known about at the time of
31 this release are:
33 .RS 4
34 \fBVi\fP(1) and its derivatives (e.g. Elvis, Vim, Vile, Lemmy),
35 \fBCRiSP\fP,
36 \fBEmacs\fP,
37 \fBFTE\fP (Folding Text Editor),
38 \fBJED\fP,
39 \fBjEdit\fP,
40 \fBMined\fP,
41 \fBNEdit\fP (Nirvana Edit),
42 \fBTSE\fP (The SemWare Editor),
43 \fBUltraEdit\fP,
44 \fBWorkSpace\fP,
45 \fBX2\fP,
46 \fBZeus\fP
47 .RE
49 \fBCtags\fP is capable of generating different kinds of tags for each of many
50 different languages. For a complete list of supported languages, the names
51 by which they are recognized, and the kinds of tags which are generated for
52 each, see the \fB\-\-list\-languages\fP and \fB\-\-list\-kinds\fP options.
55 .SH "SOURCE FILES"
57 Unless the \fB\-\-language\-force\fP option is specified, the language of each
58 source file is automatically selected based upon a mapping of file names to
59 languages. The mappings in effect for each language may be display using the
60 \fB\-\-list\-maps\fP option and may be changed using the \fB\-\-langmap\fP option.
61 On platforms which support it, if the name of a file is not mapped
62 to a language and the file is executable, the first line of the file is
63 checked to see if the file is a "#!" script for a recognized language.
65 By default, all other files names are ignored. This permits running
66 \fBctags\fP on all files in either a single directory (e.g. "ctags *"), or on
67 all files in an entire source directory tree (e.g. "ctags \-R"), since only
68 those files whose names are mapped to languages will be scanned.
70 [The reason that .h extensions are mapped to C++ files rather than C files
71 is because it is common to use .h extensions in C++, and no harm results in
72 treating them as C++ files.]
75 .SH "OPTIONS"
77 Despite the wealth of available options, defaults are set so that \fBctags\fP
78 is most commonly executed without any options (e.g. "ctags *", or "ctags \-R"),
79 which will create a tag file in the current directory for all recognized
80 source files. The options described below are provided merely to allow custom
81 tailoring to meet special needs.
83 Note that spaces separating the single-letter options from their parameters
84 are optional.
86 Note also that the boolean parameters to the long form options (those
87 beginning with "\-\-" and that take a "\fI[=yes\fP|\fIno]\fP" parameter) may
88 be omitted, in which case "\fB=\fP\fIyes\fP" is implied. (e.g. \fB\-\-sort\fP
89 is equivalent to \fB\-\-sort\fP=\fIyes\fP). Note further that "=\fI1\fP" and
90 "=\fIon\fP" are considered synonyms for "=\fIyes\fP", and that "=\fI0\fP"
91 and "=\fIoff\fP" are considered synonyms for "=\fIno\fP".
93 Some options are either ignored or useful only when used while running in
94 etags mode (see \fB\-e\fP option). Such options will be noted.
96 Most options may appear anywhere on the command line, affecting only those
97 files which follow the option. A few options, however, must appear before the
98 first file name and will be noted as such.
100 Options taking language names will accept those names in either upper or lower
101 case. See the \fB\-\-list\-languages\fP option for a complete list of the
102 built-in language names.
104 .TP 5
105 .B \-a
106 Equivalent to \fB\-\-append\fP.
108 .TP 5
109 .B \-B
110 Use backward searching patterns (e.g. ?pattern?). [Ignored in etags mode]
112 .TP 5
113 .B \-e
114 Enable etags mode, which will create a tag file for use with the Emacs editor.
115 Alternatively, if \fBctags\fP is invoked by a name containing the string
116 "etags" (either by renaming, or creating a link to, the executable), etags
117 mode will be enabled. This option must appear before the first file name.
119 .TP 5
120 .BI \-f " tagfile"
121 Use the name specified by \fItagfile\fP for the tag file (default is "tags",
122 or "TAGS" when running in etags mode). If \fItagfile\fP is specified as
123 "\-", then the tag file is written to standard output instead. \fBCtags\fP
124 will stubbornly refuse to take orders if \fItagfile\fP exists and its first
125 line contains something other than a valid tags line. This will save your neck
126 if you mistakenly type "ctags \-f *.c", which would otherwise overwrite your
127 first C file with the tags generated by the rest! It will also refuse to
128 accept a multi-character file name which begins with a '\-' (dash) character,
129 since this most likely means that you left out the tag file name and this
130 option tried to grab the next option as the file name. If you really want to
131 name your output tag file "\-ugly", specify it as "./\-ugly". This option must
132 appear before the first file name. If this option is specified more than once,
133 only the last will apply.
135 .TP 5
136 .B \-F
137 Use forward searching patterns (e.g. /pattern/) (default).
138 [Ignored in etags mode]
140 .TP 5
141 .BI \-h  " list"
142 Specifies a list of file extensions, separated by periods, which are to be
143 interpreted as include (or header) files. To indicate files having no
144 extension, use a period not followed by a non-period character (e.g. ".",
145 "..x", ".x."). This option only affects how the scoping of a particular kinds
146 of tags is interpreted (i.e. whether or not they are considered as globally
147 visible or visible only within the file in which they are defined); it does
148 not map the extension to any particular language. Any tag which is located in
149 a non-include file and cannot be seen (e.g. linked to) from another file is
150 considered to have file-limited (e.g. static) scope. No kind of tag appearing
151 in an include file will be considered to have file-limited scope. If the first
152 character in the list is a plus sign, then the extensions in the list will be
153 appended to the current list; otherwise, the list will replace the current
154 list. See, also, the \fB\-\-file\-scope\fP option. The default list is
155 ".h.H.hh.hpp.hxx.h++.inc.def". To restore the default list, specify \fB\-h\fP
156 \fIdefault\fP. Note that if an extension supplied to this option is not
157 already mapped to a particular language (see \fBSOURCE FILES\fP, above), you
158 will also need to use either the \fB\-\-langmap\fP or \fB\-\-language\-force\fP
159 option.
161 .TP 5
162 .BI \-I " identifier\-list"
163 Specifies a list of identifiers which are to be specially handled while
164 parsing C and C++ source files. This option is specifically provided to handle
165 special cases arising through the use of preprocessor macros. When the
166 identifiers listed are simple identifiers, these identifiers will be ignored
167 during parsing of the source files. If an identifier is suffixed with a '+'
168 character, \fBctags\fP will also ignore any parenthesis-enclosed argument list
169 which may immediately follow the identifier in the source files. If two
170 identifiers are separated with the '=' character, the first identifiers is
171 replaced by the second identifiers for parsing purposes. The list of
172 identifiers may be supplied directly on the command line or read in from a
173 separate file. If the first character of \fIidentifier\-list\fP is '@', '.' or
174 a pathname separator ('/' or '\\'), or the first two characters specify a
175 drive letter (e.g. "C:"), the parameter \fIidentifier\-list\fP will be
176 interpreted as a filename from which to read a list of identifiers, one per
177 input line. Otherwise, \fIidentifier\-list\fP is a list of identifiers (or
178 identifier pairs) to be specially handled, each delimited by a either a comma
179 or by white space (in which case the list should be quoted to keep the entire
180 list as one command line argument). Multiple \fB\-I\fP options may be supplied.
181 To clear the list of ignore identifiers, supply a single dash ("\-") for
182 \fIidentifier\-list\fP.
184 This feature is useful when preprocessor macros are used in such a way that
185 they cause syntactic confusion due to their presence. Indeed, this is the best
186 way of working around a number of problems caused by the presence of
187 syntax-busting macros in source files (see \fBCAVEATS\fP, below). Some
188 examples will illustrate this point.
190 .RS 8
191 int foo ARGDECL4(void *, ptr, long int, nbytes)
195 In the above example, the macro "ARGDECL4" would be mistakenly interpreted to
196 be the name of the function instead of the correct name of "foo". Specifying
197 \fB\-I\fP \fIARGDECL4\fP results in the correct behavior.
199 .RS 8
200 /* creates an RCS version string in module */
202 MODULE_VERSION("$Revision: 690 $")
206 In the above example the macro invocation looks too much like a function
207 definition because it is not followed by a semicolon (indeed, it could even be
208 followed by a global variable definition that would look much like a K&R style
209 function parameter declaration). In fact, this seeming function definition
210 could possibly even cause the rest of the file to be skipped over while trying
211 to complete the definition. Specifying \fB\-I\fP \fIMODULE_VERSION+\fP would
212 avoid such a problem.
214 .RS 8
215 CLASS Example {
217     // your content here
223 The example above uses "CLASS" as a preprocessor macro which expands to
224 something different for each platform. For instance CLASS may be defined as
225 "class __declspec(dllexport)" on Win32 platforms and simply "class" on UNIX.
226 Normally, the absence of the C++ keyword "class" would cause the source file
227 to be incorrectly parsed. Correct behavior can be restored by specifying
228 \fB\-I\fP \fICLASS=class\fP.
230 .TP 5
231 .BI \-L " file"
232 Read from \fIfile\fP a list of file names for which tags should be generated.
233 If \fIfile\fP is specified as "\-", then file names are read from standard
234 input. File names read using this option are processed following file names
235 appearing on the command line. Options are also accepted in this input. If
236 this option is specified more than once, only the last will apply. \fBNote:\fP
237 \fIfile\fP is read in line-oriented mode, where a new line is the only
238 delimiter and non-trailing white space is considered significant, in order
239 that file names containing spaces may be supplied (however, trailing white
240 space is stripped from lines); this can affect how options are parsed if
241 included in the input.
243 .TP 5
244 .B \-n
245 Equivalent to \fB\-\-excmd\fP=\fInumber\fP.
247 .TP 5
248 .B \-N
249 Equivalent to \fB\-\-excmd\fP=\fIpattern\fP.
251 .TP 5
252 .BI \-o " tagfile"
253 Equivalent to \fB\-f\fP \fItagfile\fP.
255 .TP 5
256 .B \-R
257 Equivalent to \fB\-\-recurse\fP.
259 .TP 5
260 .B \-u
261 Equivalent to \fB\-\-sort\fP=\fIno\fP (i.e. "unsorted").
263 .TP 5
264 .B \-V
265 Equivalent to \fB\-\-verbose\fP.
267 .TP 5
268 .B \-w
269 This option is silently ignored for backward-compatibility with the ctags
270 of SVR4 Unix.
272 .TP 5
273 .B \-x
274 Print a tabular, human-readable cross reference (xref) file to standard output
275 instead of generating a tag file. The information contained in the output
276 includes: the tag name; the kind of tag; the line number, file name, and
277 source line (with extra white space condensed) of the file which defines the
278 tag. No tag file is written and all options affecting tag file output will be
279 ignored. Example applications for this feature are generating a listing of all
280 functions located in a source file (e.g. \fBctags \-x \-\-c\-kinds\fP=\fIf\fP
281 \fIfile\fP), or generating a list of all externally visible global variables
282 located in a source file (e.g. \fBctags \-x \-\-c\-kinds\fP=\fIv\fP
283 \fB\-\-file\-scope\fP=\fIno file\fP). This option must appear before the first
284 file name.
286 .TP 5
287 \fB\-\-append\fP[=\fIyes\fP|\fIno\fP]
288 Indicates whether tags generated from the specified files should be appended
289 to those already present in the tag file or should replace them. This option
290 is off by default. This option must appear before the first file name.
292 .TP 5
293 \fB\-\-etags\-include\fP=\fIfile\fP
294 Include a reference to \fIfile\fP in the tag file. This option may be
295 specified as many times as desired. This supports Emacs' capability to use a
296 tag file which "includes" other tag files. [Available only in etags mode]
298 .TP 5
299 \fB\-\-exclude\fP=[\fIpattern\fP]
300 Add \fIpattern\fP to a list of excluded files and directories. This option
301 may be specified as many times as desired. For each file name considered by
302 \fBctags\fP, each \fIpattern\fP specified using this option will be compared
303 against both the complete path (e.g. some/path/base.ext) and the base name
304 (e.g. base.ext) of the file, thus allowing patterns which match a given file
305 name irrespective of its path, or match only a specific path. If appropriate
306 support is available from the runtime library of your C compiler, then
307 \fIpattern\fP may contain the usual shell wildcards (not regular expressions)
308 common on Unix (be sure to quote the option parameter to protect the wildcards
309 from being expanded by the shell before being passed to \fBctags\fP; also be
310 aware that wildcards can match the slash character, '/'). You can determine if
311 shell wildcards are available on your platform by examining the output of the
312 \fB\-\-version\fP option, which will include "+wildcards" in the compiled
313 feature list; otherwise, \fIpattern\fP is matched against file names using a
314 simple textual comparison.
316 If \fIpattern\fP begins with the character '@', then the rest of the string
317 is interpreted as a file name from which to read exclusion patterns, one per
318 line. If \fIpattern\fP is empty, the list of excluded patterns is cleared.
319 Note that at program startup, the default exclude list contains "EIFGEN",
320 "SCCS", "RCS", and "CVS", which are names of directories for which it is
321 generally not desirable to descend while processing the \fB\-\-recurse\fP
322 option.
324 .TP 5
325 \fB\-\-excmd\fP=\fItype\fP
326 Determines the type of EX command used to locate tags in the source file.
327 [Ignored in etags mode]
329 The valid values for \fItype\fP (either the entire word or the first letter is
330 accepted) are:
332 .RS 5
333 .TP 9
334 .I number
335 Use only line numbers in the tag file for locating tags. This has four
336 advantages:
337 .PD 0
338 .RS 9
339 .TP 4
341 Significantly reduces the size of the resulting tag file.
342 .TP 4
344 Eliminates failures to find tags because the line defining the tag has
345 changed, causing the pattern match to fail (note that some editors, such as
346 \fBvim\fP, are able to recover in many such instances).
347 .TP 4
349 Eliminates finding identical matching, but incorrect, source lines (see
350 \fBBUGS\fP, below).
351 .TP 4
353 Retains separate entries in the tag file for lines which are identical in
354 content. In \fIpattern\fP mode, duplicate entries are dropped because the
355 search patterns they generate are identical, making the duplicate entries
356 useless.
358 .PD 1
361 However, this option has one significant drawback: changes to the source files
362 can cause the line numbers recorded in the tag file to no longer correspond
363 to the lines in the source file, causing jumps to some tags to miss the target
364 definition by one or more lines. Basically, this option is best used when the
365 source code to which it is applied is not subject to change. Selecting this
366 option type causes the following options to be ignored: \fB\-BF\fP.
368 .TP 9
369 .I pattern
370 Use only search patterns for all tags, rather than the line numbers usually
371 used for macro definitions. This has the advantage of not referencing obsolete
372 line numbers when lines have been added or removed since the tag file was
373 generated.
375 .TP 9
376 .I mixed
377 In this mode, patterns are generally used with a few exceptions. For C, line
378 numbers are used for macro definition tags. This was the default format
379 generated by the original \fBctags\fP and is, therefore, retained as the
380 default for this option. For Fortran, line numbers are used for common blocks
381 because their corresponding source lines are generally identical, making
382 pattern searches useless for finding all matches.
385 .TP 5
386 \fB\-\-extra\fP=\fI[+|\-]flags\fP
387 Specifies whether to include extra tag entries for certain kinds of
388 information. The parameter \fIflags\fP is a set of one-letter flags, each
389 representing one kind of extra tag entry to include in the tag file. If
390 \fIflags\fP is preceded by by either the '+' or '\-' character, the effect of
391 each flag is added to, or removed from, those currently enabled; otherwise the
392 flags replace any current settings. The meaning of each flag is as follows:
395 .RS 8
396 .TP 4
397 .I f
398 Include an entry for the base file name of every source file (e.g.
399 "example.c"), which addresses the first line of the file.
400 .TP 4
401 .I q
402 Include an extra class-qualified tag entry for each tag which is a member
403 of a class (for languages for which this information is extracted; currently
404 C++, Eiffel, and Java). The actual form of the qualified tag depends upon the
405 language from which the tag was derived (using a form that is most natural for
406 how qualified calls are specified in the language). For C++, it is in the form
407 "class::member"; for Eiffel and Java, it is in the form "class.member". This
408 may allow easier location of a specific tags when multiple occurrences of a
409 tag name occur in the tag file. Note, however, that this could potentially
410 more than double the size of the tag file.
413 .TP 5
414 \fB\-\-fields\fP=\fI[+|\-]flags\fP
415 Specifies the available extension fields which are to be included in the
416 entries of the tag file (see \fBTAG FILE FORMAT\fP, below, for more
417 information). The parameter \fIflags\fP is a set of one-letter flags, each
418 representing one type of extension field to include, with the following
419 meanings (disabled by default unless indicated):
422 .PD 0
423 .RS 8
424 .TP 4
425 .I a
426 Access (or export) of class members
427 .TP 4
428 .I f
429 File-restricted scoping [enabled]
430 .TP 4
431 .I i
432 Inheritance information
433 .TP 4
434 .I k
435 Kind of tag as a single letter [enabled]
436 .TP 4
437 .I K
438 Kind of tag as full name
439 .TP 4
440 .I l
441 Language of source file containing tag
442 .TP 4
443 .I m
444 Implementation information
445 .TP 4
446 .I n
447 Line number of tag definition
448 .TP 4
449 .I s
450 Scope of tag definition [enabled]
451 .TP 4
452 .I S
453 Signature of routine (e.g. prototype or parameter list)
454 .TP 4
455 .I z
456 Include the "kind:" key in kind field
457 .TP 4
458 .I t
459 Type and name of a variable or typedef as "typeref:" field [enabled]
460 .PD 1
463 .RS 5
464 Each letter or group of letters may be preceded by either '+' to add it to the
465 default set, or '\-' to exclude it. In the absence of any preceding '+' or '\-'
466 sign, only those kinds explicitly listed in \fIflags\fP will be included in
467 the output (i.e. overriding the default set). This option is ignored if the
468 option \fB\-\-format\fP=\fI1\fP has been specified. The default value 
469 of this option is \fIfkst\fP.
472 .TP 5
473 \fB\-\-file\-scope\fP[=\fIyes\fP|\fIno\fP]
474 Indicates whether tags scoped only for a single file (i.e. tags which cannot
475 be seen outside of the file in which they are defined, such as "static" tags)
476 should be included in the output. See, also, the \fB\-h\fP option. This option
477 is enabled by default.
479 .TP 5
480 \fB\-\-filter\fP[=\fIyes\fP|\fIno\fP]
481 Causes \fBctags\fP to behave as a filter, reading source file names from
482 standard input and printing their tags to standard output on a file-by-file
483 basis. If \fB\-\-sorted\fP is enabled, tags are sorted only within the source
484 file in which they are defined. File names are read from standard input in
485 line-oriented input mode (see note for \fB\-L\fP option) and only after file
486 names listed on the command line or from any file supplied using the \fB\-L\fP
487 option. When this option is enabled, the options \fB\-f\fP, \fB\-o\fP,
488 and \fB\-\-totals\fP are ignored. This option is quite esoteric and is disabled
489 by default. This option must appear before the first file name.
491 .TP 5
492 \fB\-\-filter\-terminator\fP=\fIstring\fP
493 Specifies a string to print to standard output following the tags for each
494 file name parsed when the \fB\-\-filter\fP option is enabled. This may permit an
495 application reading the output of ctags to determine when the output for each
496 file is finished. Note that if the file name read is a directory and
497 \fB\-\-recurse\fP is enabled, this string will be printed only one once at the
498 end of all tags found for by descending the directory. This string will always
499 be separated from the last tag line for the file by its terminating newline.
500 This option is quite esoteric and is empty by default. This option must appear
501 before the first file name.
503 .TP 5
504 \fB\-\-format\fP=\fIlevel\fP
505 Change the format of the output tag file. Currently the only valid values for
506 \fIlevel\fP are \fI1\fP or \fI2\fP. Level 1 specifies the original tag file
507 format and level 2 specifies a new extended format containing extension fields
508 (but in a manner which retains backward-compatibility with original
509 \fBvi\fP(1) implementations). The default level is 2. This option must appear
510 before the first file name. [Ignored in etags mode]
512 .TP 5
513 .B \-\-help
514 Prints to standard output a detailed usage description, and then exits.
516 .TP 5
517 \fB\-\-if0\fP[=\fIyes\fP|\fIno\fP]
518 Indicates a preference as to whether code within an "#if 0" branch of a
519 preprocessor conditional should be examined for non-macro tags (macro tags are
520 always included). Because the intent of this construct is to disable code, the
521 default value of this option is \fIno\fP. Note that this indicates a
522 preference only and does not guarantee skipping code within an "#if 0" branch,
523 since the fall-back algorithm used to generate tags when preprocessor
524 conditionals are too complex follows all branches of a conditional. This
525 option is disabled by default.
527 .TP 5
528 \fB\-\-<LANG>\-kinds\fP=\fI[+|\-]kinds\fP
529 Specifies a list of language-specific kinds of tags (or kinds) to include in
530 the output file for a particular language, where \fB<LANG>\fP is
531 case-insensitive and is one of the built-in language names (see the
532 \fB\-\-list\-languages\fP option for a complete list). The parameter \fIkinds\fP
533 is a group of one-letter flags designating kinds of tags (particular to the
534 language) to either include or exclude from the output. The specific sets of
535 flags recognized for each language, their meanings and defaults may be list
536 using the \fB\-\-list\-kinds\fP option. Each letter or group of letters may be
537 preceded by either '+' to add it to, or '\-' to remove it from, the default
538 set. In the absence of any preceding '+' or '\-' sign, only those kinds
539 explicitly listed in \fIkinds\fP will be included in the output (i.e.
540 overriding the default for the specified language).
542 As an example for the C language, in order to add prototypes and external
543 variable declarations to the default set of tag kinds, but exclude macros,
544 use \fB\-\-c\-kinds\fP=\fI+px\-d\fP; to include only tags for functions, use
545 \fB\-\-c\-kinds\fP=\fIf\fP.
547 .TP 5
548 \fB\-\-langdef\fP=\fIname\fP
549 Defines a new user-defined language, \fIname\fP, to be parsed with regular
550 expressions. Once defined, \fIname\fP may be used in other options taking
551 language names. The typical use of this option is to first define the
552 language, then map file names to it using \fI\-\-langmap\fP, then specify
553 regular expressions using \fI\-\-regex\-<LANG>\fP to define how its tags are
554 found.
556 .TP 5
557 \fB\-\-langmap\fP=\fImap[,map[...]]\fP
558 Controls how file names are mapped to languages (see the \fB\-\-list\-maps\fP
559 option). Each comma-separated \fImap\fP consists of the language name (either
560 a built-in or user-defined language), a colon, and a list of file extensions
561 and/or file name patterns. A file extension is specified by preceding the
562 extension with a period (e.g. ".c"). A file name pattern is specified by
563 enclosing the pattern in parentheses (e.g. "([Mm]akefile)"). If appropriate
564 support is available from the runtime library of your C compiler, then the
565 file name pattern may contain the usual shell wildcards common on Unix (be
566 sure to quote the option parameter to protect the wildcards from being
567 expanded by the shell before being passed to \fBctags\fP). You can determine
568 if shell wildcards are available on your platform by examining the output of
569 the \fB\-\-version\fP option, which will include "+wildcards" in the compiled
570 feature list; otherwise, the file name patterns are matched against file names
571 using a simple textual comparison. When mapping a file extension, it will
572 first be unmapped from any other languages.
574 If the first character in a map is a plus sign, then the extensions and file
575 name patterns in that map will be appended to the current map for that
576 language; otherwise, the map will replace the current map. For example, to
577 specify that only files with extensions of .c and .x are to be treated as C
578 language files, use "\fB\-\-langmap\fP=\fIc:.c.x\fP"; to also add files with
579 extensions of .j as Java language files, specify
580 "\fB\-\-langmap\fP=\fIc:.c.x,java:+.j\fP". To map makefiles (e.g. files
581 named either "Makefile", "makefile", or having the extension ".mak") to a
582 language called "make", specify "\fB\-\-langmap\fP=\fImake:([Mm]akefile).mak\fP".
583 To map files having no extension, specify a period not followed by a
584 non-period character (e.g. ".", "..x", ".x."). To clear the mapping for a
585 particular language (thus inhibiting automatic generation of tags for that
586 language), specify an empty extension list (e.g.
587 "\fB\-\-langmap\fP=\fIfortran:\fP"). To restore the default language mappings
588 for all a particular language, supply the keyword "default" for the mapping.
589 To specify restore the default language mappings for all languages, specify
590 "\fB\-\-langmap\fP=\fIdefault\fP". Note that file extensions are tested before
591 file name patterns when inferring the language of a file.
593 .TP 5
594 \fB\-\-language\-force\fP=\fIlanguage\fP
595 By default, \fBctags\fP automatically selects the language of a source file,
596 ignoring those files whose language cannot be determined (see
597 \fBSOURCE FILES\fP, above). This option forces the specified \fIlanguage\fP
598 (case-insensitive; either built-in or user-defined) to be used for every
599 supplied file instead of automatically selecting the language based upon its
600 extension. In addition, the special value \fIauto\fP indicates that the
601 language should be automatically selected (which effectively disables this
602 option).
604 .TP 5
605 \fB\-\-languages\fP=\fI[+|\-]list\fP
606 Specifies the languages for which tag generation is enabled, with \fIlist\fP
607 containing a comma-separated list of language names (case-insensitive; either
608 built-in or user-defined). If the first language of \fIlist\fP is not preceded
609 by either a '+' or '\-', the current list will be cleared before adding or
610 removing the languages in \fIlist\fP. Until a '\-' is encountered, each
611 language in the list will be added to the current list. As either the '+' or
612 \&'\-' is encountered in the list, the languages following it are added or
613 removed from the current list, respectively. Thus, it becomes simple to
614 replace the current list with a new one, or to add or remove languages from
615 the current list. The actual list of files for which tags will be generated
616 depends upon the language extension mapping in effect (see the \fB\-\-langmap\fP
617 option). Note that all languages, including user-defined languages are enabled
618 unless explicitly disabled using this option. Language names included in
619 \fIlist\fP may be any built-in language or one previously defined with
620 \fB\-\-langdef\fP. The default is "all", which is also accepted as a valid
621 argument. See the \fB\-\-list\-languages\fP option for a complete list of the
622 built-in language names.
624 .TP 5
625 \fB\-\-license\fP
626 Prints a summary of the software license to standard output, and then exits.
628 .TP 5
629 \fB\-\-line\-directives\fP[=\fIyes\fP|\fIno\fP]
630 Specifies whether "#line" directives should be recognized. These are present
631 in the output of preprocessors and contain the line number, and possibly the
632 file name, of the original source file(s) from which the preprocessor output
633 file was generated. When enabled, this option will cause \fBctags\fP to
634 generate tag entries marked with the file names and line numbers of their
635 locations original source file(s), instead of their actual locations in the
636 preprocessor output. The actual file names placed into the tag file will have
637 the same leading path components as the preprocessor output file, since it is
638 assumed that the original source files are located relative to the
639 preprocessor output file (unless, of course, the #line directive specifies an
640 absolute path). This option is off by default. \fBNote:\fP This option is
641 generally only useful when used together with the \fB\-\-excmd\fP=\fInumber\fP
642 (\fB\-n\fP) option. Also, you may have to use either the \fB\-\-langmap\fP or
643 \fB\-\-language\-force\fP option if the extension of the preprocessor output file
644 is not known to \fBctags\fP.
646 .TP 5
647 \fB\-\-links\fP[=\fIyes\fP|\fIno\fP]
648 Indicates whether symbolic links (if supported) should be followed. When
649 disabled, symbolic links are ignored. This option is on by default.
651 .TP 5
652 \fB\-\-list\-kinds\fP[=\fIlanguage\fP|\fIall\fP]
653 Lists the tag kinds recognized for either the specified language or all
654 languages, and then exits. Each kind of tag recorded in the tag file is
655 represented by a one-letter flag, which is also used to filter the tags placed
656 into the output through use of the \fB\-\-<LANG>\-kinds\fP option. Note that some
657 languages and/or tag kinds may be implemented using regular expressions and
658 may not be available if regex support is not compiled into \fBctags\fP (see
659 the \fB\-\-regex\-<LANG>\fP option). Each kind listed is enabled unless followed
660 by "[off]".
662 .TP 5
663 \fB\-\-list\-maps\fP[=\fIlanguage\fP|\fIall\fP]
664 Lists the file extensions and file name patterns which associate a file name
665 with a language for either the specified language or all languages, and then
666 exits. See the \fB\-\-langmap\fP option, and \fBSOURCE FILES\fP, above.
668 .TP 5
669 \fB\-\-list\-languages\fP
670 Lists the names of the languages understood by \fBctags\fP, and then exits.
671 These language names are case insensitive and may be used in the
672 \fB\-\-language\-force\fP, \fB\-\-languages\fP, \fB\-\-<LANG>\-kinds\fP, and
673 \fB\-\-regex\-<LANG>\fP options.
675 .TP 5
676 \fB\-\-options\fP=\fIfile\fP
677 Read additional options from \fIfile\fP. The file should contain one option
678 per line. As a special case, if
679 \fB\-\-options\fP=\fINONE\fP is specified as the first option on the command
680 line, it will disable the automatic reading of any configuration options from
681 either a file or the environment (see \fBFILES\fP).
683 .TP 5
684 \fB\-\-recurse\fP[=\fIyes\fP|\fIno\fP]
685 Recurse into directories encountered in the list of supplied files. If the
686 list of supplied files is empty and no file list is specified with the
687 \fB\-L\fP option, then the current directory (i.e. ".") is assumed. Symbolic
688 links are followed. If you don't like these behaviors, either explicitly
689 specify the files or pipe the output of \fBfind\fP(1) into \fBctags \-L\-\fP
690 instead. \fBNote:\fP This option is not supported on all platforms at present.
691 It is available if the output of the \fB\-\-help\fP option includes this option.
692 See, also, the \fB\-\-exclude\fP to limit recursion.
694 .TP 5
695 \fB\-\-regex\-<LANG>\fP=\fI/regexp/replacement/[kind\-spec/][flags]\fP
696 The \fI/regexp/replacement/\fP pair define a regular expression replacement
697 pattern, similar in style to \fBsed\fP substitution commands, with which to
698 generate tags from source files mapped to the named language, \fB<LANG>\fP,
699 (case-insensitive; either a built-in or user-defined language). The regular
700 expression, \fIregexp\fP, defines an extended regular expression (roughly that
701 used by \fBegrep\fP(1)), which is used to locate a single source line
702 containing a tag and may specify tab characters using \\t. When a matching
703 line is found, a tag will be generated for the name defined by
704 \fIreplacement\fP, which generally will contain the special back-references
705 \\1 through \\9 to refer to matching sub-expression groups within
706 \fIregexp\fP. The '/' separator characters shown in the parameter to the
707 option can actually be replaced by any character. Note that whichever
708 separator character is used will have to be escaped with a backslash ('\\')
709 character wherever it is used in the parameter as something other than a
710 separator. The regular expression defined by this option is added to the
711 current list of regular expressions for the specified language unless the
712 parameter is omitted, in which case the current list is cleared.
714 Unless modified by \fIflags\fP, \fIregexp\fP is interpreted as a Posix
715 extended regular expression. The \fIreplacement\fP should expand for all
716 matching lines to a non-empty string of characters, or a warning message will
717 be reported. An optional kind specifier for tags matching \fIregexp\fP may
718 follow \fIreplacement\fP, which will determine what kind of tag is reported in
719 the "kind" extension field (see \fBTAG FILE FORMAT\fP, below). The full form
720 of \fIkind\-spec\fP is in the form of a single letter, a comma, a name (without
721 spaces), a comma, a description, followed by a separator, which specify
722 the short and long forms of the kind value and its textual description
723 (displayed using \fB\-\-list\-kinds\fP). Either the kind name and/or the
724 description may be omitted. If \fIkind\-spec\fP is omitted, it defaults to
725 "\fIr,regex\fP". Finally, \fIflags\fP are one or more single-letter characters
726 having the following effect upon the interpretation of \fIregexp\fP:
729 .RS 8
730 .TP 4
731 .I b
732 The pattern is interpreted as a Posix basic regular expression.
733 .TP 4
734 .I e
735 The pattern is interpreted as a Posix extended regular expression (default).
736 .TP 4
737 .I i
738 The regular expression is to be applied in a case-insensitive manner.
741 .RS 5
742 Note that this option is available only if \fBctags\fP was compiled with
743 support for regular expressions, which depends upon your platform. You can
744 determine if support for regular expressions is compiled in by examining the
745 output of the \fB\-\-version\fP option, which will include "+regex" in the
746 compiled feature list.
748 For more information on the regular expressions used by \fBctags\fP, see
749 either the \fBregex(5,7)\fP man page, or the GNU info documentation for regex
750 (e.g. "info regex").
753 .TP 5
754 \fB\-\-sort\fP[=\fIyes\fP|\fIno\fP|\fIfoldcase\fP]
755 Indicates whether the tag file should be sorted on the tag name (default is
756 \fIyes\fP). Note that the original \fBvi\fP(1) required sorted tags. 
757 The \fIfoldcase\fP value specifies case insensitive (or case-folded) sorting.
758 Fast binary searches of tag files sorted with case-folding will require
759 special support from tools using tag files, such as that found in the ctags
760 readtags library, or Vim version 6.2 or higher (using "set ignorecase"). This
761 option must appear before the first file name. [Ignored in etags mode]
763 .TP 5
764 \fB\-\-tag\-relative\fP[=\fIyes\fP|\fIno\fP]
765 Indicates that the file paths recorded in the tag file should be relative to
766 the directory containing the tag file, rather than relative to the current
767 directory, unless the files supplied on the command line are specified with
768 absolute paths. This option must appear before the first file name. The
769 default is \fIyes\fP when running in etags mode (see the \fB\-e\fP
770 option), \fIno\fP otherwise.
772 .TP 5
773 \fB\-\-totals\fP[=\fIyes\fP|\fIno\fP]
774 Prints statistics about the source files read and the tag file written during
775 the current invocation of \fBctags\fP. This option is off by default.
776 This option must appear before the first file name.
778 .TP 5
779 \fB\-\-verbose\fP[=\fIyes\fP|\fIno\fP]
780 Enable verbose mode. This prints out information on option processing and a
781 brief message describing what action is being taken for each file considered
782 by \fBctags\fP. Normally, \fBctags\fP does not read command line arguments
783 until after options are read from the configuration files (see \fBFILES\fP,
784 below) and the \fBCTAGS\fP environment variable. However, if this option is
785 the first argument on the command line, it will take effect before any options
786 are read from these sources. The default is \fIno\fP.
788 .TP 5
789 \fB\-\-version\fP
790 Prints a version identifier for \fBctags\fP to standard output, and then
791 exits. This is guaranteed to always contain the string "Exuberant Ctags".
794 .SH "OPERATIONAL DETAILS"
796 As \fBctags\fP considers each file name in turn, it tries to determine the
797 language of the file by applying the following three tests in order: if the
798 file extension has been mapped to a language, if the file name matches a shell
799 pattern mapped to a language, and finally if the file is executable and its
800 first line specifies an interpreter using the Unix-style "#!" specification
801 (if supported on the platform). If a language was identified, the file is
802 opened and then the appropriate language parser is called to operate on the
803 currently open file. The parser parses through the file and adds an entry to
804 the tag file for each language object it is written to handle. See
805 \fBTAG FILE FORMAT\fP, below, for details on these entries.
807 This implementation of \fBctags\fP imposes no formatting requirements on C
808 code as do legacy implementations. Older implementations of ctags tended to
809 rely upon certain formatting assumptions in order to help it resolve coding
810 dilemmas caused by preprocessor conditionals.
812 In general, \fBctags\fP tries to be smart about conditional preprocessor
813 directives. If a preprocessor conditional is encountered within a statement
814 which defines a tag, \fBctags\fP follows only the first branch of that
815 conditional (except in the special case of "#if 0", in which case it follows
816 only the last branch). The reason for this is that failing to pursue only one
817 branch can result in ambiguous syntax, as in the following example:
820 #ifdef TWO_ALTERNATIVES
822 struct {
824 #else
826 union {
828 #endif
829 .RS 4
830 short a;
832 long b;
837 Both branches cannot be followed, or braces become unbalanced and \fBctags\fP
838 would be unable to make sense of the syntax.
840 If the application of this heuristic fails to properly parse a file,
841 generally due to complicated and inconsistent pairing within the conditionals,
842 \fBctags\fP will retry the file using a different heuristic which does not
843 selectively follow conditional preprocessor branches, but instead falls back
844 to relying upon a closing brace ("}") in column 1 as indicating the end of a
845 block once any brace imbalance results from following a #if conditional branch.
847 \fBCtags\fP will also try to specially handle arguments lists enclosed in
848 double sets of parentheses in order to accept the following conditional
849 construct:
852 extern void foo __ARGS((int one, char two));
855 Any name immediately preceding the "((" will be automatically ignored and
856 the previous name will be used.
858 C++ operator definitions are specially handled. In order for consistency with
859 all types of operators (overloaded and conversion), the operator name in the
860 tag file will always be preceded by the string "operator " (i.e. even if the
861 actual operator definition was written as "operator<<").
863 After creating or appending to the tag file, it is sorted by the tag name,
864 removing identical tag lines.
867 .SH "TAG FILE FORMAT"
869 When not running in etags mode, each entry in the tag file consists of a
870 separate line, each looking like this in the most general case:
872 .RS 1
873 tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields
876 The fields and separators of these lines are specified as follows:
878 .PD 0
879 .RS 4
880 .TP 4
882 tag name
883 .TP 4
885 single tab character
886 .TP 4
888 name of the file in which the object associated with the tag is located
889 .TP 4
891 single tab character
892 .TP 4
894 EX command used to locate the tag within the file; generally a search pattern
895 (either /pattern/ or ?pattern?) or line number (see \fB\-\-excmd\fP). Tag file
896 format 2 (see \fB\-\-format\fP) extends this EX command under certain
897 circumstances to include a set of extension fields (described below) embedded
898 in an EX comment immediately appended to the EX command, which leaves it
899 backward-compatible with original \fBvi\fP(1) implementations.
901 .PD 1
903 A few special tags are written into the tag file for internal purposes. These
904 tags are composed in such a way that they always sort to the top of the file.
905 Therefore, the first two characters of these tags are used a magic number to
906 detect a tag file for purposes of determining whether a valid tag file is
907 being overwritten rather than a source file.
909 Note that the name of each source file will be recorded in the tag file
910 exactly as it appears on the command line. Therefore, if the path you
911 specified on the command line was relative to the current directory, then it
912 will be recorded in that same manner in the tag file. See, however, the
913 \fB\-\-tag\-relative\fP option for how this behavior can be modified.
915 Extension fields are tab-separated key-value pairs appended to the end of the
916 EX command as a comment, as described above. These key value pairs appear in
917 the general form "\fIkey\fP:\fIvalue\fP". Their presence in the lines of the
918 tag file are controlled by the \fB\-\-fields\fP option. The possible keys and
919 the meaning of their values are as follows:
921 .TP 12
922 .I access
923 Indicates the visibility of this class member, where \fIvalue\fP is specific
924 to the language.
926 .TP 12
927 .I file
928 Indicates that the tag has file-limited visibility. This key has no
929 corresponding value.
931 .TP 12
932 .I kind
933 Indicates the type, or kind, of tag. Its value is either one of the
934 corresponding one-letter flags described under the various
935 \fB\-\-<LANG>\-kinds\fP options above, or a full name. It is permitted (and is,
936 in fact, the default) for the key portion of this field to be omitted. The
937 optional behaviors are controlled with the \fB\-\-fields\fP option.
939 .TP 12
940 .I implementation
941 When present, this indicates a limited implementation (abstract vs. concrete)
942 of a routine or class, where \fIvalue\fP is specific to the language
943 ("virtual" or "pure virtual" for C++; "abstract" for Java).
945 .TP 12
946 .I inherits
947 When present, \fIvalue\fP. is a comma-separated list of classes from which
948 this class is derived (i.e. inherits from).
950 .TP 12
951 .I signature
952 When present, \fIvalue\fP is a language-dependent representation of the
953 signature of a routine. A routine signature in its complete form specifies the
954 return type of a routine and its formal argument list. This extension field is
955 presently supported only for C-based languages and does not include the return
956 type.
959 In addition, information on the scope of the tag definition may be available,
960 with the key portion equal to some language-dependent construct name and its
961 value the name declared for that construct in the program. This scope entry
962 indicates the scope in which the tag was found. For example, a tag generated
963 for a C structure member would have a scope looking like "struct:myStruct".
966 .SH "HOW TO USE WITH VI"
967 Vi will, by default, expect a tag file by the name "tags" in the current
968 directory. Once the tag file is built, the following commands exercise the tag
969 indexing feature:
970 .TP 12
971 .B vi \-t tag
972 Start vi and position the cursor at the file and line where "tag" is defined.
973 .TP 12
974 .B :ta tag
975 Find a tag.
976 .TP 12
977 .B Ctrl-]
978 Find the tag under the cursor.
979 .TP 12
980 .B Ctrl-T
981 Return to previous location before jump to tag (not widely implemented).
984 .SH "HOW TO USE WITH GNU EMACS"
985 Emacs will, by default, expect a tag file by the name "TAGS" in the current
986 directory. Once the tag file is built, the following commands exercise the
987 tag indexing feature:
988 .TP 10
989 .B "M-x visit\-tags\-table <RET> FILE <RET>"
990 Select the tag file, "FILE", to use.
991 .TP 10
992 .B "M-. [TAG] <RET>"
993 Find the first definition of TAG. The default tag is the identifier under the
994 cursor.
995 .TP 10
996 .B "M-*"
997 Pop back to where you previously invoked "M-.".
998 .TP 10
999 .B "C-u M-."
1000 Find the next definition for the last tag.
1003 For more commands, see the \fITags\fP topic in the Emacs info document.
1006 .SH "HOW TO USE WITH NEDIT"
1007 NEdit version 5.1 and later can handle the new extended tag file format (see
1008 \fB\-\-format\fP). To make NEdit use the tag file, select "File\->Load Tags
1009 File". To jump to the definition for a tag, highlight the word, the press
1010 Ctrl-D. NEdit 5.1 can can read multiple tag files from different directories.
1011 Setting the X resource nedit.tagFile to the name of a tag file instructs NEdit
1012 to automatically load that tag file at startup time.
1015 .SH "CAVEATS"
1016 Because \fBctags\fP is neither a preprocessor nor a compiler, use of
1017 preprocessor macros can fool \fBctags\fP into either missing tags or
1018 improperly generating inappropriate tags. Although \fBctags\fP has been
1019 designed to handle certain common cases, this is the single biggest cause of
1020 reported problems. In particular, the use of preprocessor constructs which
1021 alter the textual syntax of C can fool \fBctags\fP. You can work around many
1022 such problems by using the \fB\-I\fP option.
1024 Note that since \fBctags\fP generates patterns for locating tags (see
1025 the \fB\-\-excmd\fP option), it is entirely possible that the wrong line may be
1026 found by your editor if there exists another source line which is identical to
1027 the line containing the tag. The following example demonstrates this condition:
1030 int variable;
1032 /* ... */
1034 void foo(variable)
1036 int variable;
1039 .RS 4
1040 /* ... */
1045 Depending upon which editor you use and where in the code you happen to be, it
1046 is possible that the search pattern may locate the local parameter declaration
1047 in foo() before it finds the actual global variable definition, since the
1048 lines (and therefore their search patterns are identical). This can be avoided
1049 by use of the \fB\-\-excmd\fP=\fIn\fP option.
1052 .SH "BUGS"
1053 \fBCtags\fP has more options than \fBls\fP(1).
1055 When parsing a C++ member function definition (e.g. "className::function"),
1056 \fBctags\fP cannot determine whether the scope specifier is a class name or a
1057 namespace specifier and always lists it as a class name in the scope portion
1058 of the extension fields. Also, if a C++ function is defined outside of the
1059 class declaration (the usual case), the access specification (i.e. public,
1060 protected, or private) and implementation information (e.g. virtual, pure
1061 virtual) contained in the function declaration are not known when the tag is
1062 generated for the function definition. It will, however be available for
1063 prototypes (e.g \fB\-\-c++\-kinds\fP=\fI+p\fP).
1065 No qualified tags are generated for language objects inherited into a class.
1068 .SH "ENVIRONMENT VARIABLES"
1070 .TP 8
1071 .B CTAGS
1072 If this environment variable exists, it will be expected to contain a set of
1073 default options which are read when \fBctags\fP starts, after the
1074 configuration files listed in \fBFILES\fP, below, are read, but before any
1075 command line options are read. Options appearing on the command line will
1076 override options specified in this variable. Only options will be read from
1077 this variable. Note that all white space in this variable is considered a
1078 separator, making it impossible to pass an option parameter containing an
1079 embedded space. If this is a problem, use a configuration file instead.
1081 .TP 8
1082 .B ETAGS
1083 Similar to the \fBCTAGS\fP variable above, this variable, if found, will be
1084 read when \fBetags\fP starts. If this variable is not found, \fBetags\fP will
1085 try to use \fBCTAGS\fP instead.
1087 .TP 8
1088 .B TMPDIR
1089 On Unix-like hosts where mkstemp() is available, the value of this variable
1090 specifies the directory in which to place temporary files. This can be useful
1091 if the size of a temporary file becomes too large to fit on the partition
1092 holding the default temporary directory defined at compilation time.
1093 \fBctags\fP creates temporary files only if either (1) an emacs-style tag file
1094 is being generated, (2) the tag file is being sent to standard output, or (3)
1095 the program was compiled to use an internal sort algorithm to sort the tag
1096 files instead of the the sort utility of the operating system. If the sort
1097 utility of the operating system is being used, it will generally observe this
1098 variable also. Note that if \fBctags\fP is setuid, the value of TMPDIR will be
1099 ignored.
1102 .SH "FILES"
1103 .PD 0
1104 .I /ctags.cnf (on MSDOS, MSWindows only)
1106 .I /etc/ctags.conf
1108 .I /usr/local/etc/ctags.conf
1110 .I $HOME/.ctags
1112 .I $HOME/ctags.cnf (on MSDOS, MSWindows only)
1114 .I .ctags
1116 .I ctags.cnf (on MSDOS, MSWindows only)
1118 If any of these configuration files exist, each will be expected to contain a
1119 set of default options which are read in the order listed when \fBctags\fP
1120 starts, but before the \fBCTAGS\fP environment variable is read or any command
1121 line options are read. This makes it possible to set up site-wide, personal
1122 or project-level defaults. It is possible to compile \fBctags\fP to read an
1123 additional configuration file before any of those shown above, which will be
1124 indicated if the output produced by the \fB\-\-version\fP option lists the
1125 "custom-conf" feature. Options appearing in the \fBCTAGS\fP environment
1126 variable or on the command line will override options specified in these
1127 files. Only options will be read from these files. Note that the option files
1128 are read in line-oriented mode in which spaces are significant (since
1129 shell quoting is not possible). Each line of the file is read as one command
1130 line parameter (as if it were quoted with single quotes). Therefore, use new
1131 lines to indicate separate command-line arguments.
1132 .PD 1
1135 .I tags
1136 The default tag file created by \fBctags\fP.
1138 .I TAGS
1139 The default tag file created by \fBetags\fP.
1141 .SH "SEE ALSO"
1142 The official Exuberant Ctags web site at:
1145 http://ctags.sourceforge.net
1148 Also \fBex\fP(1), \fBvi\fP(1), \fBelvis\fP, or, better yet, \fBvim\fP, the
1149 official editor of \fBctags\fP. For more information on \fBvim\fP, see the VIM
1150 Pages web site at:
1153 http://www.vim.org/
1157 .SH "AUTHOR"
1158 Darren Hiebert <dhiebert at users.sourceforge.net>
1160 http://DarrenHiebert.com/
1163 .SH "MOTIVATION"
1164 "Think ye at all times of rendering some service to every member of the human
1165 race."
1167 "All effort and exertion put forth by man from the fullness of his heart is
1168 worship, if it is prompted by the highest motives and the will to do service
1169 to humanity."
1172 \-\- From the Baha'i Writings
1176 .SH "CREDITS"
1177 This version of \fBctags\fP was originally derived from and inspired by the
1178 ctags program by Steve Kirkendall <kirkenda@cs.pdx.edu> that comes with the
1179 Elvis vi clone (though virtually none of the original code remains).
1181 Credit is also due Bram Moolenaar <Bram@vim.org>, the author of \fBvim\fP, who
1182 has devoted so much of his time and energy both to developing the editor as a
1183 service to others, and to helping the orphans of Uganda.
1185 The section entitled "HOW TO USE WITH GNU EMACS" was shamelessly stolen from
1186 the info page for GNU \fBetags\fP.