annotate runtime/doc/usr_29.txt @ 28141:dce918af0c00

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