vim: update release.sh to vim 7.3
[msysgit/mtrensch.git] / share / vim / vim72 / doc / usr_29.txt
blob82dfaf585ce2cdba10b85d2957b52b1a451a481a
1 *usr_29.txt*    For Vim version 7.2.  Last change: 2008 Jun 28
3                      VIM USER MANUAL - by Bram Moolenaar
5                             Moving through programs
8 The creator of Vim is a computer programmer.  It's no surprise that Vim
9 contains many features to aid in writing programs.  Jump around to find where
10 identifiers are defined and used.  Preview declarations in a separate window.
11 There is more in the next chapter.
13 |29.1|  Using tags
14 |29.2|  The preview window
15 |29.3|  Moving through a program
16 |29.4|  Finding global identifiers
17 |29.5|  Finding local identifiers
19      Next chapter: |usr_30.txt|  Editing programs
20  Previous chapter: |usr_28.txt|  Folding
21 Table of contents: |usr_toc.txt|
23 ==============================================================================
24 *29.1*  Using tags
26 What is a tag?  It is a location where an identifier is defined.  An example
27 is a function definition in a C or C++ program.  A list of tags is kept in a
28 tags file.  This can be used by Vim to directly jump from any place to the
29 tag, the place where an identifier is defined.
30    To generate the tags file for all C files in the current directory, use the
31 following command: >
33         ctags *.c
35 "ctags" is a separate program.  Most Unix systems already have it installed.
36 If you do not have it yet, you can find Exuberant ctags here:
38         http://ctags.sf.net ~
40 Now when you are in Vim and you want to go to a function definition, you can
41 jump to it by using the following command: >
43         :tag startlist
45 This command will find the function "startlist" even if it is in another file.
46    The CTRL-] command jumps to the tag of the word that is under the cursor.
47 This makes it easy to explore a tangle of C code.  Suppose, for example, that
48 you are in the function "write_block".  You can see that it calls
49 "write_line".  But what does "write_line" do?  By placing the cursor on the
50 call to "write_line" and pressing CTRL-], you jump to the definition of this
51 function.
52    The "write_line" function calls "write_char".  You need to figure out what
53 it does.  So you position the cursor over the call to "write_char" and press
54 CTRL-].  Now you are at the definition of "write_char".
56         +-------------------------------------+
57         |void write_block(char **s; int cnt)  |
58         |{                                    |
59         |   int i;                            |
60         |   for (i = 0; i < cnt; ++i)         |
61         |      write_line(s[i]);              |
62         |}          |                         |
63         +-----------|-------------------------+
64                     |
65              CTRL-] |
66                     |    +----------------------------+
67                     +--> |void write_line(char *s)    |
68                          |{                           |
69                          |   while (*s != 0)          |
70                          |      write_char(*s++);     |
71                          |}       |                   |
72                          +--------|-------------------+
73                                   |
74                            CTRL-] |
75                                   |    +------------------------------------+
76                                   +--> |void write_char(char c)             |
77                                        |{                                   |
78                                        |    putchar((int)(unsigned char)c); |
79                                        |}                                   |
80                                        +------------------------------------+
82 The ":tags" command shows the list of tags that you traversed through:
84         :tags
85           # TO tag         FROM line  in file/text ~
86           1  1 write_line          8  write_block.c ~
87           2  1 write_char          7  write_line.c ~
88         > ~
90 Now to go back.  The CTRL-T command goes to the preceding tag.  In the example
91 above you get back to the "write_line" function, in the call to "write_char".
92    This command takes a count argument that indicates how many tags to jump
93 back.  You have gone forward, and now back.  Let's go forward again.  The
94 following command goes to the tag on top of the list: >
96         :tag
98 You can prefix it with a count and jump forward that many tags.  For example:
99 ":3tag".  CTRL-T also can be preceded with a count.
100    These commands thus allow you to go down a call tree with CTRL-] and back
101 up again with CTRL-T.  Use ":tags" to find out where you are.
104 SPLIT WINDOWS
106 The ":tag" command replaces the file in the current window with the one
107 containing the new function.  But suppose you want to see not only the old
108 function but also the new one?  You can split the window using the ":split"
109 command followed by the ":tag" command.  Vim has a shorthand command that does
110 both: >
111         :stag tagname
113 To split the current window and jump to the tag under the cursor use this
114 command: >
116         CTRL-W ]
118 If a count is specified, the new window will be that many lines high.
121 MORE TAGS FILES
123 When you have files in many directories, you can create a tags file in each of
124 them.  Vim will then only be able to jump to tags within that directory.
125    To find more tags files, set the 'tags' option to include all the relevant
126 tags files.  Example: >
128         :set tags=./tags,./../tags,./*/tags
130 This finds a tags file in the same directory as the current file, one
131 directory level higher and in all subdirectories.
132    This is quite a number of tags files, but it may still not be enough.  For
133 example, when editing a file in "~/proj/src", you will not find the tags file
134 "~/proj/sub/tags".  For this situation Vim offers to search a whole directory
135 tree for tags files.  Example: >
137         :set tags=~/proj/**/tags
140 ONE TAGS FILE
142 When Vim has to search many places for tags files, you can hear the disk
143 rattling.  It may get a bit slow.  In that case it's better to spend this
144 time while generating one big tags file.  You might do this overnight.
145    This requires the Exuberant ctags program, mentioned above.  It offers an
146 argument to search a whole directory tree: >
148         cd ~/proj
149         ctags -R .
151 The nice thing about this is that Exuberant ctags recognizes various file
152 types.  Thus this doesn't work just for C and C++ programs, also for Eiffel
153 and even Vim scripts.  See the ctags documentation to tune this.
154    Now you only need to tell Vim where your big tags file is: >
156         :set tags=~/proj/tags
159 MULTIPLE MATCHES
161 When a function is defined multiple times (or a method in several classes),
162 the ":tag" command will jump to the first one.  If there is a match in the
163 current file, that one is used first.
164    You can now jump to other matches for the same tag with: >
166         :tnext
168 Repeat this to find further matches.  If there are many, you can select which
169 one to jump to: >
171         :tselect tagname
173 Vim will present you with a list of choices:
175           # pri kind tag               file ~
176           1 F   f    mch_init          os_amiga.c ~
177                        mch_init() ~
178           2 F   f    mch_init          os_mac.c ~
179                        mch_init() ~
180           3 F   f    mch_init          os_msdos.c ~
181                        mch_init(void) ~
182           4 F   f    mch_init          os_riscos.c ~
183                        mch_init() ~
184         Enter nr of choice (<CR> to abort):  ~
186 You can now enter the number (in the first column) of the match that you would
187 like to jump to.  The information in the other columns give you a good idea of
188 where the match is defined.
190 To move between the matching tags, these commands can be used:
192         :tfirst                 go to first match
193         :[count]tprevious       go to [count] previous match
194         :[count]tnext           go to [count] next match
195         :tlast                  go to last match
197 If [count] is omitted then one is used.
200 GUESSING TAG NAMES
202 Command line completion is a good way to avoid typing a long tag name.  Just
203 type the first bit and press <Tab>: >
205         :tag write_<Tab>
207 You will get the first match.  If it's not the one you want, press <Tab> until
208 you find the right one.
209    Sometimes you only know part of the name of a function.  Or you have many
210 tags that start with the same string, but end differently.  Then you can tell
211 Vim to use a pattern to find the tag.
212    Suppose you want to jump to a tag that contains "block".  First type
213 this: >
215         :tag /block
217 Now use command line completion: press <Tab>.  Vim will find all tags that
218 contain "block" and use the first match.
219    The "/" before a tag name tells Vim that what follows is not a literal tag
220 name, but a pattern.  You can use all the items for search patterns here.  For
221 example, suppose you want to select a tag that starts with "write_": >
223         :tselect /^write_
225 The "^" specifies that the tag starts with "write_".  Otherwise it would also
226 be found halfway a tag name.  Similarly "$" at the end makes sure the pattern
227 matches until the end of a tag.
230 A TAGS BROWSER
232 Since CTRL-] takes you to the definition of the identifier under the cursor,
233 you can use a list of identifier names as a table of contents.  Here is an
234 example.
235    First create a list of identifiers (this requires Exuberant ctags): >
237         ctags --c-types=f -f functions *.c
239 Now start Vim without a file, and edit this file in Vim, in a vertically split
240 window: >
242         vim
243         :vsplit functions
245 The window contains a list of all the functions.  There is some more stuff,
246 but you can ignore that.  Do ":setlocal ts=99" to clean it up a bit.
247    In this window, define a mapping: >
249         :nnoremap <buffer> <CR> 0ye<C-W>w:tag <C-R>"<CR>
251 Move the cursor to the line that contains the function you want to go to.
252 Now press <Enter>.  Vim will go to the other window and jump to the selected
253 function.
256 RELATED ITEMS
258 You can set 'ignorecase' to make case in tag names be ignored.
260 The 'tagbsearch' option tells if the tags file is sorted or not.  The default
261 is to assume a sorted tags file, which makes a tags search a lot faster, but
262 doesn't work if the tags file isn't sorted.
264 The 'taglength' option can be used to tell Vim the number of significant
265 characters in a tag.
267 When you use the SNiFF+ program, you can use the Vim interface to it |sniff|.
268 SNiFF+ is a commercial program.
270 Cscope is a free program.  It does not only find places where an identifier is
271 declared, but also where it is used.  See |cscope|.
273 ==============================================================================
274 *29.2*  The preview window
276 When you edit code that contains a function call, you need to use the correct
277 arguments.  To know what values to pass you can look at how the function is
278 defined.  The tags mechanism works very well for this.  Preferably the
279 definition is displayed in another window.  For this the preview window can be
280 used.
281    To open a preview window to display the function "write_char": >
283         :ptag write_char
285 Vim will open a window, and jumps to the tag "write_char".  Then it takes you
286 back to the original position.  Thus you can continue typing without the need
287 to use a CTRL-W command.
288    If the name of a function appears in the text, you can get its definition
289 in the preview window with: >
291         CTRL-W }
293 There is a script that automatically displays the text where the word under
294 the cursor was defined.  See |CursorHold-example|.
296 To close the preview window use this command: >
298         :pclose
300 To edit a specific file in the preview window, use ":pedit".  This can be
301 useful to edit a header file, for example: >
303         :pedit defs.h
305 Finally, ":psearch" can be used to find a word in the current file and any
306 included files and display the match in the preview window.  This is
307 especially useful when using library functions, for which you do not have a
308 tags file.  Example: >
310         :psearch popen
312 This will show the "stdio.h" file in the preview window, with the function
313 prototype for popen():
315         FILE    *popen __P((const char *, const char *)); ~
317 You can specify the height of the preview window, when it is opened, with the
318 'previewheight' option.
320 ==============================================================================
321 *29.3*  Moving through a program
323 Since a program is structured, Vim can recognize items in it.  Specific
324 commands can be used to move around.
325    C programs often contain constructs like this:
327         #ifdef USE_POPEN ~
328             fd = popen("ls", "r") ~
329         #else ~
330             fd = fopen("tmp", "w") ~
331         #endif ~
333 But then much longer, and possibly nested.  Position the cursor on the
334 "#ifdef" and press %.  Vim will jump to the "#else".  Pressing % again takes
335 you to the "#endif".  Another % takes you to the "#ifdef" again.
336    When the construct is nested, Vim will find the matching items.  This is a
337 good way to check if you didn't forget an "#endif".
338    When you are somewhere inside a "#if" - "#endif", you can jump to the start
339 of it with: >
341         [#
343 If you are not after a "#if" or "#ifdef" Vim will beep.  To jump forward to
344 the next "#else" or "#endif" use: >
346         ]#
348 These two commands skip any "#if" - "#endif" blocks that they encounter.
349 Example:
351         #if defined(HAS_INC_H) ~
352             a = a + inc(); ~
353         # ifdef USE_THEME ~
354             a += 3; ~
355         # endif ~
356             set_width(a); ~
358 With the cursor in the last line, "[#" moves to the first line.  The "#ifdef"
359 - "#endif" block in the middle is skipped.
362 MOVING IN CODE BLOCKS
364 In C code blocks are enclosed in {}.  These can get pretty long.  To move to
365 the start of the outer block use the "[[" command.  Use "][" to find the end.
366 This assumes that the "{" and "}" are in the first column.
367    The "[{" command moves to the start of the current block.  It skips over
368 pairs of {} at the same level.  "]}" jumps to the end.
369    An overview:
371                         function(int a)
372            +->          {
373            |                if (a)
374            |       +->      {
375         [[ |       |            for (;;)               --+
376            |       |      +->   {                        |
377            |    [{ |      |         foo(32);             |     --+
378            |       |   [{ |         if (bar(a))  --+     | ]}    |
379            +--     |      +--           break;     | ]}  |       |
380                    |            }                <-+     |       | ][
381                    +--          foobar(a)                |       |
382                             }                          <-+       |
383                         }                                      <-+
385 When writing C++ or Java, the outer {} block is for the class.  The next level
386 of {} is for a method.  When somewhere inside a class use "[m" to find the
387 previous start of a method.  "]m" finds the next start of a method.
389 Additionally, "[]" moves backward to the end of a function and "]]" moves
390 forward to the start of the next function.  The end of a function is defined
391 by a "}" in the first column.
393                                 int func1(void)
394                                 {
395                                         return 1;
396                   +---------->  }
397                   |
398               []  |             int func2(void)
399                   |        +->  {
400                   |    [[  |            if (flag)
401         start     +--      +--                  return flag;
402                   |    ][  |            return 2;
403                   |        +->  }
404               ]]  |
405                   |             int func3(void)
406                   +---------->  {
407                                         return 3;
408                                 }
410 Don't forget you can also use "%" to move between matching (), {} and [].
411 That also works when they are many lines apart.
414 MOVING IN BRACES
416 The "[(" and "])" commands work similar to "[{" and "]}", except that they
417 work on () pairs instead of {} pairs.
419                                   [(
420 <                   <--------------------------------
421                               <-------
422                 if (a == b && (c == d || (e > f)) && x > y) ~
423                                   -------------->
424                           --------------------------------> >
425                                        ])
427 MOVING IN COMMENTS
429 To move back to the start of a comment use "[/".  Move forward to the end of a
430 comment with "]/".  This only works for /* - */ comments.
432           +->     +-> /*
433           |    [/ |    * A comment about      --+
434        [/ |       +--  * wonderful life.        | ]/
435           |            */                     <-+
436           |
437           +--          foo = bar * 3;         --+
438                                                 | ]/
439                        /* a short comment */  <-+
441 ==============================================================================
442 *29.4*  Finding global identifiers
444 You are editing a C program and wonder if a variable is declared as "int" or
445 "unsigned".  A quick way to find this is with the "[I" command.
446    Suppose the cursor is on the word "column".  Type: >
448         [I
450 Vim will list the matching lines it can find.  Not only in the current file,
451 but also in all included files (and files included in them, etc.).  The result
452 looks like this:
454         structs.h ~
455          1:   29     unsigned     column;    /* column number */ ~
457 The advantage over using tags or the preview window is that included files are
458 searched.  In most cases this results in the right declaration to be found.
459 Also when the tags file is out of date.  Also when you don't have tags for the
460 included files.
461    However, a few things must be right for "[I" to do its work.  First of all,
462 the 'include' option must specify how a file is included.  The default value
463 works for C and C++.  For other languages you will have to change it.
466 LOCATING INCLUDED FILES
468    Vim will find included files in the places specified with the 'path'
469 option.  If a directory is missing, some include files will not be found.  You
470 can discover this with this command: >
472         :checkpath
474 It will list the include files that could not be found.  Also files included
475 by the files that could be found.  An example of the output:
477         --- Included files not found in path --- ~
478         <io.h> ~
479         vim.h --> ~
480           <functions.h> ~
481           <clib/exec_protos.h> ~
483 The "io.h" file is included by the current file and can't be found.  "vim.h"
484 can be found, thus ":checkpath" goes into this file and checks what it
485 includes.  The "functions.h" and "clib/exec_protos.h" files, included by
486 "vim.h" are not found.
488         Note:
489         Vim is not a compiler.  It does not recognize "#ifdef" statements.
490         This means every "#include" statement is used, also when it comes
491         after "#if NEVER".
493 To fix the files that could not be found, add a directory to the 'path'
494 option.  A good place to find out about this is the Makefile.  Look out for
495 lines that contain "-I" items, like "-I/usr/local/X11".  To add this directory
496 use: >
498         :set path+=/usr/local/X11
500 When there are many subdirectories, you can use the "*" wildcard.  Example: >
502         :set path+=/usr/*/include
504 This would find files in "/usr/local/include" as well as "/usr/X11/include".
506 When working on a project with a whole nested tree of included files, the "**"
507 items is useful.  This will search down in all subdirectories.  Example: >
509         :set path+=/projects/invent/**/include
511 This will find files in the directories:
513         /projects/invent/include ~
514         /projects/invent/main/include ~
515         /projects/invent/main/os/include ~
516         etc.
518 There are even more possibilities.  Check out the 'path' option for info.
519    If you want to see which included files are actually found, use this
520 command: >
522         :checkpath!
524 You will get a (very long) list of included files, the files they include, and
525 so on.  To shorten the list a bit, Vim shows "(Already listed)" for files that
526 were found before and doesn't list the included files in there again.
529 JUMPING TO A MATCH
531 "[I" produces a list with only one line of text.  When you want to have a
532 closer look at the first item, you can jump to that line with the command: >
534         [<Tab>
536 You can also use "[ CTRL-I", since CTRL-I is the same as pressing <Tab>.
538 The list that "[I" produces has a number at the start of each line.  When you
539 want to jump to another item than the first one, type the number first: >
541         3[<Tab>
543 Will jump to the third item in the list.  Remember that you can use CTRL-O to
544 jump back to where you started from.
547 RELATED COMMANDS
549         [i              only lists the first match
550         ]I              only lists items below the cursor
551         ]i              only lists the first item below the cursor
554 FINDING DEFINED IDENTIFIERS
556 The "[I" command finds any identifier.  To find only macros, defined with
557 "#define" use: >
559         [D
561 Again, this searches in included files.  The 'define' option specifies what a
562 line looks like that defines the items for "[D".  You could change it to make
563 it work with other languages than C or C++.
564    The commands related to "[D" are:
566         [d              only lists the first match
567         ]D              only lists items below the cursor
568         ]d              only lists the first item below the cursor
570 ==============================================================================
571 *29.5*  Finding local identifiers
573 The "[I" command searches included files.  To search in the current file only,
574 and jump to the first place where the word under the cursor is used: >
576         gD
578 Hint: Goto Definition.  This command is very useful to find a variable or
579 function that was declared locally ("static", in C terms).  Example (cursor on
580 "counter"):
582            +->   static int counter = 0;
583            |
584            |     int get_counter(void)
585         gD |     {
586            |         ++counter;
587            +--       return counter;
588                  }
590 To restrict the search even further, and look only in the current function,
591 use this command: >
593         gd
595 This will go back to the start of the current function and find the first
596 occurrence of the word under the cursor.  Actually, it searches backwards to
597 an empty line above a "{" in the first column.  From there it searches forward
598 for the identifier.  Example (cursor on "idx"):
600                 int find_entry(char *name)
601                 {
602            +->      int idx;
603            |
604         gd |        for (idx = 0; idx < table_len; ++idx)
605            |            if (strcmp(table[idx].name, name) == 0)
606            +--              return idx;
607                 }
609 ==============================================================================
611 Next chapter: |usr_30.txt|  Editing programs
613 Copyright: see |manual-copyright|  vim:tw=78:ts=8:ft=help:norl: