Mercurial > vim
annotate runtime/doc/quickfix.txt @ 13016:e47e70300f30 v8.0.1384
patch 8.0.1384: not enough quickfix help; confusing winid
commit https://github.com/vim/vim/commit/74240d3febd1e3bc7cf086c647c9348b20716c33
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Dec 10 15:26:15 2017 +0100
patch 8.0.1384: not enough quickfix help; confusing winid
Problem: Not enough quickfix help; confusing winid.
Solution: Add more examples in the help. When the quickfix window is not
present, return zero for getqflist() with 'winid'. Add more tests
for jumping to quickfix list entries. (Yegappan Lakshmanan, closes
#2427)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 10 Dec 2017 15:30:06 +0100 |
parents | d91cf2e26ef0 |
children | a6d3e2081544 |
rev | line source |
---|---|
12499 | 1 *quickfix.txt* For Vim version 8.0. Last change: 2017 Sep 13 |
7 | 2 |
3 | |
4 VIM REFERENCE MANUAL by Bram Moolenaar | |
5 | |
6 | |
7 This subject is introduced in section |30.1| of the user manual. | |
8 | |
9 1. Using QuickFix commands |quickfix| | |
10 2. The error window |quickfix-window| | |
11 3. Using more than one list of errors |quickfix-error-lists| | |
12 4. Using :make |:make_makeprg| | |
13 5. Using :grep |grep| | |
14 6. Selecting a compiler |compiler-select| | |
15 7. The error format |error-file-format| | |
16 8. The directory stack |quickfix-directory-stack| | |
17 9. Specific error file formats |errorformats| | |
18 | |
19 {Vi does not have any of these commands} | |
20 | |
21 The quickfix commands are not available when the |+quickfix| feature was | |
22 disabled at compile time. | |
23 | |
24 ============================================================================= | |
25 1. Using QuickFix commands *quickfix* *Quickfix* *E42* | |
26 | |
27 Vim has a special mode to speedup the edit-compile-edit cycle. This is | |
28 inspired by the quickfix option of the Manx's Aztec C compiler on the Amiga. | |
29 The idea is to save the error messages from the compiler in a file and use Vim | |
30 to jump to the errors one by one. You can examine each problem and fix it, | |
31 without having to remember all the error messages. | |
32 | |
170 | 33 In Vim the quickfix commands are used more generally to find a list of |
34 positions in files. For example, |:vimgrep| finds pattern matches. You can | |
231 | 35 use the positions in a script with the |getqflist()| function. Thus you can |
170 | 36 do a lot more than the edit/compile/fix cycle! |
37 | |
9407
619a98a67f67
commit https://github.com/vim/vim/commit/e18dbe865d190e74fb5d43ac8bc6ac22507d0223
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
38 If you have the error messages in a file you can start Vim with: > |
619a98a67f67
commit https://github.com/vim/vim/commit/e18dbe865d190e74fb5d43ac8bc6ac22507d0223
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
39 vim -q filename |
619a98a67f67
commit https://github.com/vim/vim/commit/e18dbe865d190e74fb5d43ac8bc6ac22507d0223
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
40 |
619a98a67f67
commit https://github.com/vim/vim/commit/e18dbe865d190e74fb5d43ac8bc6ac22507d0223
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
41 From inside Vim an easy way to run a command and handle the output is with the |
619a98a67f67
commit https://github.com/vim/vim/commit/e18dbe865d190e74fb5d43ac8bc6ac22507d0223
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
42 |:make| command (see below). |
619a98a67f67
commit https://github.com/vim/vim/commit/e18dbe865d190e74fb5d43ac8bc6ac22507d0223
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
43 |
619a98a67f67
commit https://github.com/vim/vim/commit/e18dbe865d190e74fb5d43ac8bc6ac22507d0223
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
44 The 'errorformat' option should be set to match the error messages from your |
7 | 45 compiler (see |errorformat| below). |
46 | |
12427
fc3e2d5614dd
patch 8.0.1093: various small quickfix issues
Christian Brabandt <cb@256bit.org>
parents:
11705
diff
changeset
|
47 *quickfix-ID* |
fc3e2d5614dd
patch 8.0.1093: various small quickfix issues
Christian Brabandt <cb@256bit.org>
parents:
11705
diff
changeset
|
48 Each quickfix list has a unique identifier called the quickfix ID and this |
fc3e2d5614dd
patch 8.0.1093: various small quickfix issues
Christian Brabandt <cb@256bit.org>
parents:
11705
diff
changeset
|
49 number will not change within a Vim session. The getqflist() function can be |
fc3e2d5614dd
patch 8.0.1093: various small quickfix issues
Christian Brabandt <cb@256bit.org>
parents:
11705
diff
changeset
|
50 used to get the identifier assigned to a list. There is also a quickfix list |
fc3e2d5614dd
patch 8.0.1093: various small quickfix issues
Christian Brabandt <cb@256bit.org>
parents:
11705
diff
changeset
|
51 number which may change whenever more than ten lists are added to a quickfix |
fc3e2d5614dd
patch 8.0.1093: various small quickfix issues
Christian Brabandt <cb@256bit.org>
parents:
11705
diff
changeset
|
52 stack. |
fc3e2d5614dd
patch 8.0.1093: various small quickfix issues
Christian Brabandt <cb@256bit.org>
parents:
11705
diff
changeset
|
53 |
644 | 54 *location-list* *E776* |
11160 | 55 A location list is a window-local quickfix list. You get one after commands |
56 like `:lvimgrep`, `:lgrep`, `:lhelpgrep`, `:lmake`, etc., which create a | |
57 location list instead of a quickfix list as the corresponding `:vimgrep`, | |
58 `:grep`, `:helpgrep`, `:make` do. | |
59 A location list is associated with a window and each window can have a | |
60 separate location list. A location list can be associated with only one | |
61 window. The location list is independent of the quickfix list. | |
644 | 62 |
648 | 63 When a window with a location list is split, the new window gets a copy of the |
9407
619a98a67f67
commit https://github.com/vim/vim/commit/e18dbe865d190e74fb5d43ac8bc6ac22507d0223
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
64 location list. When there are no longer any references to a location list, |
619a98a67f67
commit https://github.com/vim/vim/commit/e18dbe865d190e74fb5d43ac8bc6ac22507d0223
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
65 the location list is destroyed. |
648 | 66 |
67 The following quickfix commands can be used. The location list commands are | |
68 similar to the quickfix commands, replacing the 'c' prefix in the quickfix | |
69 command with 'l'. | |
7 | 70 |
8673
ed7251c3e2d3
commit https://github.com/vim/vim/commit/e18c0b39815c5a746887a509c2cd9f11fadaba07
Christian Brabandt <cb@256bit.org>
parents:
7707
diff
changeset
|
71 *E924* |
ed7251c3e2d3
commit https://github.com/vim/vim/commit/e18c0b39815c5a746887a509c2cd9f11fadaba07
Christian Brabandt <cb@256bit.org>
parents:
7707
diff
changeset
|
72 If the current window was closed by an |autocommand| while processing a |
ed7251c3e2d3
commit https://github.com/vim/vim/commit/e18c0b39815c5a746887a509c2cd9f11fadaba07
Christian Brabandt <cb@256bit.org>
parents:
7707
diff
changeset
|
73 location list command, it will be aborted. |
ed7251c3e2d3
commit https://github.com/vim/vim/commit/e18c0b39815c5a746887a509c2cd9f11fadaba07
Christian Brabandt <cb@256bit.org>
parents:
7707
diff
changeset
|
74 |
8702
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8673
diff
changeset
|
75 *E925* *E926* |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8673
diff
changeset
|
76 If the current quickfix or location list was changed by an |autocommand| while |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8673
diff
changeset
|
77 processing a quickfix or location list command, it will be aborted. |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8673
diff
changeset
|
78 |
7 | 79 *:cc* |
80 :cc[!] [nr] Display error [nr]. If [nr] is omitted, the same | |
81 error is displayed again. Without [!] this doesn't | |
82 work when jumping to another buffer, the current buffer | |
83 has been changed, there is the only window for the | |
84 buffer and both 'hidden' and 'autowrite' are off. | |
85 When jumping to another buffer with [!] any changes to | |
86 the current buffer are lost, unless 'hidden' is set or | |
87 there is another window for this buffer. | |
88 The 'switchbuf' settings are respected when jumping | |
89 to a buffer. | |
90 | |
644 | 91 *:ll* |
92 :ll[!] [nr] Same as ":cc", except the location list for the | |
93 current window is used instead of the quickfix list. | |
94 | |
7 | 95 *:cn* *:cnext* *E553* |
96 :[count]cn[ext][!] Display the [count] next error in the list that | |
97 includes a file name. If there are no file names at | |
98 all, go to the [count] next error. See |:cc| for | |
99 [!] and 'switchbuf'. | |
100 | |
647 | 101 *:lne* *:lnext* |
102 :[count]lne[xt][!] Same as ":cnext", except the location list for the | |
644 | 103 current window is used instead of the quickfix list. |
104 | |
7 | 105 :[count]cN[ext][!] *:cp* *:cprevious* *:cN* *:cNext* |
106 :[count]cp[revious][!] Display the [count] previous error in the list that | |
107 includes a file name. If there are no file names at | |
108 all, go to the [count] previous error. See |:cc| for | |
109 [!] and 'switchbuf'. | |
110 | |
856 | 111 |
647 | 112 :[count]lN[ext][!] *:lp* *:lprevious* *:lN* *:lNext* |
644 | 113 :[count]lp[revious][!] Same as ":cNext" and ":cprevious", except the location |
114 list for the current window is used instead of the | |
115 quickfix list. | |
116 | |
7 | 117 *:cnf* *:cnfile* |
118 :[count]cnf[ile][!] Display the first error in the [count] next file in | |
119 the list that includes a file name. If there are no | |
120 file names at all or if there is no next file, go to | |
121 the [count] next error. See |:cc| for [!] and | |
122 'switchbuf'. | |
123 | |
644 | 124 *:lnf* *:lnfile* |
125 :[count]lnf[ile][!] Same as ":cnfile", except the location list for the | |
126 current window is used instead of the quickfix list. | |
127 | |
7 | 128 :[count]cNf[ile][!] *:cpf* *:cpfile* *:cNf* *:cNfile* |
129 :[count]cpf[ile][!] Display the last error in the [count] previous file in | |
130 the list that includes a file name. If there are no | |
131 file names at all or if there is no next file, go to | |
132 the [count] previous error. See |:cc| for [!] and | |
133 'switchbuf'. | |
134 | |
647 | 135 |
136 :[count]lNf[ile][!] *:lpf* *:lpfile* *:lNf* *:lNfile* | |
644 | 137 :[count]lpf[ile][!] Same as ":cNfile" and ":cpfile", except the location |
138 list for the current window is used instead of the | |
139 quickfix list. | |
140 | |
7 | 141 *:crewind* *:cr* |
142 :cr[ewind][!] [nr] Display error [nr]. If [nr] is omitted, the FIRST | |
143 error is displayed. See |:cc|. | |
144 | |
644 | 145 *:lrewind* *:lr* |
146 :lr[ewind][!] [nr] Same as ":crewind", except the location list for the | |
147 current window is used instead of the quickfix list. | |
148 | |
7 | 149 *:cfirst* *:cfir* |
150 :cfir[st][!] [nr] Same as ":crewind". | |
151 | |
644 | 152 *:lfirst* *:lfir* |
153 :lfir[st][!] [nr] Same as ":lrewind". | |
154 | |
7 | 155 *:clast* *:cla* |
156 :cla[st][!] [nr] Display error [nr]. If [nr] is omitted, the LAST | |
157 error is displayed. See |:cc|. | |
158 | |
644 | 159 *:llast* *:lla* |
160 :lla[st][!] [nr] Same as ":clast", except the location list for the | |
161 current window is used instead of the quickfix list. | |
162 | |
7 | 163 *:cq* *:cquit* |
1624 | 164 :cq[uit][!] Quit Vim with an error code, so that the compiler |
7 | 165 will not compile the same file again. |
1624 | 166 WARNING: All changes in files are lost! Also when the |
167 [!] is not used. It works like ":qall!" |:qall|, | |
168 except that Vim returns a non-zero exit code. | |
7 | 169 |
170 *:cf* *:cfile* | |
171 :cf[ile][!] [errorfile] Read the error file and jump to the first error. | |
172 This is done automatically when Vim is started with | |
173 the -q option. You can use this command when you | |
174 keep Vim running while compiling. If you give the | |
175 name of the errorfile, the 'errorfile' option will | |
176 be set to [errorfile]. See |:cc| for [!]. | |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
177 If the encoding of the error file differs from the |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
178 'encoding' option, you can use the 'makeencoding' |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
179 option to specify the encoding. |
7 | 180 |
644 | 181 *:lf* *:lfile* |
182 :lf[ile][!] [errorfile] Same as ":cfile", except the location list for the | |
183 current window is used instead of the quickfix list. | |
184 You can not use the -q command-line option to set | |
185 the location list. | |
186 | |
856 | 187 |
1624 | 188 :cg[etfile] [errorfile] *:cg* *:cgetfile* |
7 | 189 Read the error file. Just like ":cfile" but don't |
190 jump to the first error. | |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
191 If the encoding of the error file differs from the |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
192 'encoding' option, you can use the 'makeencoding' |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
193 option to specify the encoding. |
7 | 194 |
856 | 195 |
1624 | 196 :lg[etfile] [errorfile] *:lg* *:lgetfile* |
644 | 197 Same as ":cgetfile", except the location list for the |
198 current window is used instead of the quickfix list. | |
199 | |
625 | 200 *:caddf* *:caddfile* |
201 :caddf[ile] [errorfile] Read the error file and add the errors from the | |
446 | 202 errorfile to the current quickfix list. If a quickfix |
203 list is not present, then a new list is created. | |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
204 If the encoding of the error file differs from the |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
205 'encoding' option, you can use the 'makeencoding' |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
206 option to specify the encoding. |
446 | 207 |
644 | 208 *:laddf* *:laddfile* |
209 :laddf[ile] [errorfile] Same as ":caddfile", except the location list for the | |
210 current window is used instead of the quickfix list. | |
211 | |
41 | 212 *:cb* *:cbuffer* *E681* |
1084 | 213 :cb[uffer][!] [bufnr] Read the error list from the current buffer. |
41 | 214 When [bufnr] is given it must be the number of a |
215 loaded buffer. That buffer will then be used instead | |
216 of the current buffer. | |
217 A range can be specified for the lines to be used. | |
218 Otherwise all lines in the buffer are used. | |
1084 | 219 See |:cc| for [!]. |
41 | 220 |
644 | 221 *:lb* *:lbuffer* |
1084 | 222 :lb[uffer][!] [bufnr] Same as ":cbuffer", except the location list for the |
644 | 223 current window is used instead of the quickfix list. |
224 | |
798 | 225 *:cgetb* *:cgetbuffer* |
226 :cgetb[uffer] [bufnr] Read the error list from the current buffer. Just | |
227 like ":cbuffer" but don't jump to the first error. | |
228 | |
229 *:lgetb* *:lgetbuffer* | |
230 :lgetb[uffer] [bufnr] Same as ":cgetbuffer", except the location list for | |
231 the current window is used instead of the quickfix | |
232 list. | |
233 | |
5734 | 234 *:cad* *:caddbuffer* |
5763 | 235 :cad[dbuffer] [bufnr] Read the error list from the current buffer and add |
658 | 236 the errors to the current quickfix list. If a |
237 quickfix list is not present, then a new list is | |
238 created. Otherwise, same as ":cbuffer". | |
239 | |
240 *:laddb* *:laddbuffer* | |
241 :laddb[uffer] [bufnr] Same as ":caddbuffer", except the location list for | |
242 the current window is used instead of the quickfix | |
243 list. | |
244 | |
626 | 245 *:cex* *:cexpr* *E777* |
625 | 246 :cex[pr][!] {expr} Create a quickfix list using the result of {expr} and |
2833 | 247 jump to the first error. |
248 If {expr} is a String, then each new-line terminated | |
7701
075810b0cb6c
commit https://github.com/vim/vim/commit/d6357e8f93c50f984ffd69c3a0d247d8603f86c3
Christian Brabandt <cb@256bit.org>
parents:
7418
diff
changeset
|
249 line in the String is processed using the global value |
075810b0cb6c
commit https://github.com/vim/vim/commit/d6357e8f93c50f984ffd69c3a0d247d8603f86c3
Christian Brabandt <cb@256bit.org>
parents:
7418
diff
changeset
|
250 of 'errorformat' and the result is added to the |
075810b0cb6c
commit https://github.com/vim/vim/commit/d6357e8f93c50f984ffd69c3a0d247d8603f86c3
Christian Brabandt <cb@256bit.org>
parents:
7418
diff
changeset
|
251 quickfix list. |
2833 | 252 If {expr} is a List, then each String item in the list |
253 is processed and added to the quickfix list. Non | |
254 String items in the List are ignored. | |
255 See |:cc| for [!]. | |
446 | 256 Examples: > |
257 :cexpr system('grep -n xyz *') | |
258 :cexpr getline(1, '$') | |
259 < | |
644 | 260 *:lex* *:lexpr* |
2833 | 261 :lex[pr][!] {expr} Same as |:cexpr|, except the location list for the |
644 | 262 current window is used instead of the quickfix list. |
263 | |
800 | 264 *:cgete* *:cgetexpr* |
1624 | 265 :cgete[xpr] {expr} Create a quickfix list using the result of {expr}. |
2833 | 266 Just like |:cexpr|, but don't jump to the first error. |
800 | 267 |
268 *:lgete* *:lgetexpr* | |
2833 | 269 :lgete[xpr] {expr} Same as |:cgetexpr|, except the location list for the |
800 | 270 current window is used instead of the quickfix list. |
271 | |
5734 | 272 *:cadde* *:caddexpr* |
5763 | 273 :cadde[xpr] {expr} Evaluate {expr} and add the resulting lines to the |
625 | 274 current quickfix list. If a quickfix list is not |
275 present, then a new list is created. The current | |
276 cursor position will not be changed. See |:cexpr| for | |
277 more information. | |
278 Example: > | |
279 :g/mypattern/caddexpr expand("%") . ":" . line(".") . ":" . getline(".") | |
280 < | |
644 | 281 *:lad* *:laddexpr* |
1624 | 282 :lad[dexpr] {expr} Same as ":caddexpr", except the location list for the |
644 | 283 current window is used instead of the quickfix list. |
284 | |
7 | 285 *:cl* *:clist* |
286 :cl[ist] [from] [, [to]] | |
287 List all errors that are valid |quickfix-valid|. | |
288 If numbers [from] and/or [to] are given, the respective | |
237 | 289 range of errors is listed. A negative number counts |
7 | 290 from the last error backwards, -1 being the last error. |
291 The 'switchbuf' settings are respected when jumping | |
292 to a buffer. | |
293 | |
9379
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
294 :cl[ist] +{count} List the current and next {count} valid errors. This |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
295 is similar to ":clist from from+count", where "from" |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
296 is the current error position. |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
297 |
7 | 298 :cl[ist]! [from] [, [to]] |
299 List all errors. | |
300 | |
9379
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
301 :cl[ist]! +{count} List the current and next {count} error lines. This |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
302 is useful to see unrecognized lines after the current |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
303 one. For example, if ":clist" shows: |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
304 8384 testje.java:252: error: cannot find symbol ~ |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
305 Then using ":cl! +3" shows the reason: |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
306 8384 testje.java:252: error: cannot find symbol ~ |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
307 8385: ZexitCode = Fmainx(); ~ |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
308 8386: ^ ~ |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
309 8387: symbol: method Fmainx() ~ |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
310 |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
311 :lli[st] [from] [, [to]] *:lli* *:llist* |
644 | 312 Same as ":clist", except the location list for the |
313 current window is used instead of the quickfix list. | |
314 | |
315 :lli[st]! [from] [, [to]] | |
316 List all the entries in the location list for the | |
317 current window. | |
318 | |
7 | 319 If you insert or delete lines, mostly the correct error location is still |
320 found because hidden marks are used. Sometimes, when the mark has been | |
321 deleted for some reason, the message "line changed" is shown to warn you that | |
322 the error location may not be correct. If you quit Vim and start again the | |
323 marks are lost and the error locations may not be correct anymore. | |
324 | |
163 | 325 If vim is built with |+autocmd| support, two autocommands are available for |
326 running commands before and after a quickfix command (':make', ':grep' and so | |
327 on) is executed. See |QuickFixCmdPre| and |QuickFixCmdPost| for details. | |
328 | |
1624 | 329 *QuickFixCmdPost-example* |
330 When 'encoding' differs from the locale, the error messages may have a | |
331 different encoding from what Vim is using. To convert the messages you can | |
332 use this code: > | |
333 function QfMakeConv() | |
334 let qflist = getqflist() | |
335 for i in qflist | |
336 let i.text = iconv(i.text, "cp936", "utf-8") | |
337 endfor | |
338 call setqflist(qflist) | |
339 endfunction | |
340 | |
341 au QuickfixCmdPost make call QfMakeConv() | |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
342 Another option is using 'makeencoding'. |
1624 | 343 |
13016
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
344 *quickfix-title* |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
345 Every quickfix and location list has a title. By default the title is set to |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
346 the command that created the list. The |getqflist()| and |getloclist()| |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
347 functions can be used to get the title of a quickfix and a location list |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
348 respectively. The |setqflist()| and |setloclist()| functions can be used to |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
349 modify the title of a quickfix and location list respectively. Examples: > |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
350 call setqflist([], 'a', {'title' : 'Cmd output'}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
351 echo getqflist({'title' : 1}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
352 call setloclist(3, [], 'a', {'title' : 'Cmd output'}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
353 echo getloclist(3, {'title' : 1}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
354 < |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
355 *quickfix-size* |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
356 You can get the number of entries (size) in a quickfix and a location list |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
357 using the |getqflist()| and |getloclist()| functions respectively. Examples: > |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
358 echo getqflist({'size' : 1}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
359 echo getloclist(5, {'size' : 1}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
360 < |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
361 *quickfix-context* |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
362 Any Vim type can be associated as a context with a quickfix or location list. |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
363 The |setqflist()| and the |setloclist()| functions can be used to associate a |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
364 context with a quickfix and a location list respectively. The |getqflist()| |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
365 and the |getloclist()| functions can be used to retrieve the context of a |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
366 quickifx and a location list respectively. This is useful for a Vim plugin |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
367 dealing with multiple quickfix/location lists. |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
368 Examples: > |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
369 |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
370 let somectx = {'name' : 'Vim', 'type' : 'Editor'} |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
371 call setqflist([], 'a', {'context' : somectx}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
372 echo getqflist({'context' : 1}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
373 |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
374 let newctx = ['red', 'green', 'blue'] |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
375 call setloclist(2, [], 'a', {'id' : qfid, 'context' : newctx}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
376 echo getloclist(2, {'id' : qfid, 'context' : 1}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
377 < |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
378 *quickfix-parse* |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
379 You can parse a list of lines using 'erroformat' without creating or modifying |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
380 a quickfix list using the |getqflist()| function. Examples: > |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
381 echo getqflist({'lines' : ["F1:10:Line10", "F2:20:Line20"]}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
382 echo getqflist({'lines' : systemlist('grep -Hn quickfix *')}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
383 This returns a dictionary where the 'items' key contains the list of quickfix |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
384 entries parsed from lines. The following shows how to use a custom |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
385 'errorformat' to parse the lines without modifying the 'erroformat' option: > |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
386 echo getqflist({'efm' : '%f#%l#%m', 'lines' : ['F1#10#Line']}) |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
387 < |
1624 | 388 |
7100
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
389 EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST: |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
390 *:cdo* |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
391 :cdo[!] {cmd} Execute {cmd} in each valid entry in the quickfix list. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
392 It works like doing this: > |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
393 :cfirst |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
394 :{cmd} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
395 :cnext |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
396 :{cmd} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
397 etc. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
398 < When the current file can't be |abandon|ed and the [!] |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
399 is not present, the command fails. |
9379
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9227
diff
changeset
|
400 When an error is detected execution stops. |
7100
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
401 The last buffer (or where an error occurred) becomes |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
402 the current buffer. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
403 {cmd} can contain '|' to concatenate several commands. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
404 |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
405 Only valid entries in the quickfix list are used. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
406 A range can be used to select entries, e.g.: > |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
407 :10,$cdo cmd |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
408 < To skip entries 1 to 9. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
409 |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
410 Note: While this command is executing, the Syntax |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
411 autocommand event is disabled by adding it to |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
412 'eventignore'. This considerably speeds up editing |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
413 each buffer. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
414 {not in Vi} {not available when compiled without the |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
415 |+listcmds| feature} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
416 Also see |:bufdo|, |:tabdo|, |:argdo|, |:windo|, |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
417 |:ldo|, |:cfdo| and |:lfdo|. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
418 |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
419 *:cfdo* |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
420 :cfdo[!] {cmd} Execute {cmd} in each file in the quickfix list. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
421 It works like doing this: > |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
422 :cfirst |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
423 :{cmd} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
424 :cnfile |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
425 :{cmd} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
426 etc. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
427 < Otherwise it works the same as `:cdo`. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
428 {not in Vi} {not available when compiled without the |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
429 |+listcmds| feature} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
430 |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
431 *:ldo* |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
432 :ld[o][!] {cmd} Execute {cmd} in each valid entry in the location list |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
433 for the current window. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
434 It works like doing this: > |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
435 :lfirst |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
436 :{cmd} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
437 :lnext |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
438 :{cmd} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
439 etc. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
440 < Only valid entries in the location list are used. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
441 Otherwise it works the same as `:cdo`. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
442 {not in Vi} {not available when compiled without the |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
443 |+listcmds| feature} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
444 |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
445 *:lfdo* |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
446 :lfdo[!] {cmd} Execute {cmd} in each file in the location list for |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
447 the current window. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
448 It works like doing this: > |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
449 :lfirst |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
450 :{cmd} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
451 :lnfile |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
452 :{cmd} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
453 etc. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
454 < Otherwise it works the same as `:ldo`. |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
455 {not in Vi} {not available when compiled without the |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
456 |+listcmds| feature} |
f717d96a39b3
commit https://github.com/vim/vim/commit/12969c04fe7bd27dc0cbf37709eb40a86d4a27f9
Christian Brabandt <cb@256bit.org>
parents:
5763
diff
changeset
|
457 |
7 | 458 ============================================================================= |
459 2. The error window *quickfix-window* | |
460 | |
2411
68e394361ca3
Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents:
2365
diff
changeset
|
461 *:cope* *:copen* *w:quickfix_title* |
7 | 462 :cope[n] [height] Open a window to show the current list of errors. |
5763 | 463 |
7 | 464 When [height] is given, the window becomes that high |
5763 | 465 (if there is room). When [height] is omitted the |
466 window is made ten lines high. | |
467 | |
468 If there already is a quickfix window, it will be made | |
469 the current window. It is not possible to open a | |
470 second quickfix window. If [height] is given the | |
471 existing window will be resized to it. | |
472 | |
7 | 473 The window will contain a special buffer, with |
474 'buftype' equal to "quickfix". Don't change this! | |
5763 | 475 The window will have the w:quickfix_title variable set |
476 which will indicate the command that produced the | |
477 quickfix list. This can be used to compose a custom | |
478 status line if the value of 'statusline' is adjusted | |
11705
c43118ecb0a3
patch 8.0.0735: no indication that the quickfix window/buffer changed
Christian Brabandt <cb@256bit.org>
parents:
11516
diff
changeset
|
479 properly. Whenever this buffer is modified by a |
c43118ecb0a3
patch 8.0.0735: no indication that the quickfix window/buffer changed
Christian Brabandt <cb@256bit.org>
parents:
11516
diff
changeset
|
480 quickfix command or function, the |b:changedtick| |
c43118ecb0a3
patch 8.0.0735: no indication that the quickfix window/buffer changed
Christian Brabandt <cb@256bit.org>
parents:
11516
diff
changeset
|
481 variable is incremented. |
7 | 482 |
647 | 483 *:lop* *:lopen* |
484 :lop[en] [height] Open a window to show the location list for the | |
644 | 485 current window. Works only when the location list for |
647 | 486 the current window is present. You can have more than |
487 one location window opened at a time. Otherwise, it | |
648 | 488 acts the same as ":copen". |
644 | 489 |
7 | 490 *:ccl* *:cclose* |
491 :ccl[ose] Close the quickfix window. | |
492 | |
644 | 493 *:lcl* *:lclose* |
494 :lcl[ose] Close the window showing the location list for the | |
495 current window. | |
496 | |
7 | 497 *:cw* *:cwindow* |
498 :cw[indow] [height] Open the quickfix window when there are recognized | |
499 errors. If the window is already open and there are | |
500 no recognized errors, close the window. | |
501 | |
644 | 502 *:lw* *:lwindow* |
503 :lw[indow] [height] Same as ":cwindow", except use the window showing the | |
504 location list for the current window. | |
7 | 505 |
9458
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
506 *:cbo* *:cbottom* |
9432
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9407
diff
changeset
|
507 :cbo[ttom] Put the cursor in the last line of the quickfix window |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9407
diff
changeset
|
508 and scroll to make it visible. This is useful for |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9407
diff
changeset
|
509 when errors are added by an asynchronous callback. |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9407
diff
changeset
|
510 Only call it once in a while if there are many |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9407
diff
changeset
|
511 updates to avoid a lot of redrawing. |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9407
diff
changeset
|
512 |
9458
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
513 *:lbo* *:lbottom* |
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
514 :lbo[ttom] Same as ":cbottom", except use the window showing the |
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
515 location list for the current window. |
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
516 |
7 | 517 Normally the quickfix window is at the bottom of the screen. If there are |
518 vertical splits, it's at the bottom of the rightmost column of windows. To | |
519 make it always occupy the full width: > | |
520 :botright cwindow | |
521 You can move the window around with |window-moving| commands. | |
522 For example, to move it to the top: CTRL-W K | |
523 The 'winfixheight' option will be set, which means that the window will mostly | |
524 keep its height, ignoring 'winheight' and 'equalalways'. You can change the | |
525 height manually (e.g., by dragging the status line above it with the mouse). | |
526 | |
527 In the quickfix window, each line is one error. The line number is equal to | |
11516
80491a71c716
patch 8.0.0641: cannot set a separate highlighting for the quickfix line
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
528 the error number. The current entry is highlighted with the QuickFixLine |
80491a71c716
patch 8.0.0641: cannot set a separate highlighting for the quickfix line
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
529 highlighting. You can change it to your liking, e.g.: > |
80491a71c716
patch 8.0.0641: cannot set a separate highlighting for the quickfix line
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
530 :hi QuickFixLine ctermbg=Yellow guibg=Yellow |
80491a71c716
patch 8.0.0641: cannot set a separate highlighting for the quickfix line
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
531 |
80491a71c716
patch 8.0.0641: cannot set a separate highlighting for the quickfix line
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
532 You can use ":.cc" to jump to the error under the cursor. |
170 | 533 Hitting the <Enter> key or double-clicking the mouse on a line has the same |
7 | 534 effect. The file containing the error is opened in the window above the |
535 quickfix window. If there already is a window for that file, it is used | |
536 instead. If the buffer in the used window has changed, and the error is in | |
537 another file, jumping to the error will fail. You will first have to make | |
538 sure the window contains a buffer which can be abandoned. | |
170 | 539 *CTRL-W_<Enter>* *CTRL-W_<CR>* |
540 You can use CTRL-W <Enter> to open a new window and jump to the error there. | |
7 | 541 |
542 When the quickfix window has been filled, two autocommand events are | |
543 triggered. First the 'filetype' option is set to "qf", which triggers the | |
651 | 544 FileType event. Then the BufReadPost event is triggered, using "quickfix" for |
545 the buffer name. This can be used to perform some action on the listed | |
546 errors. Example: > | |
648 | 547 au BufReadPost quickfix setlocal modifiable |
548 \ | silent exe 'g/^/s//\=line(".")." "/' | |
549 \ | setlocal nomodifiable | |
7 | 550 This prepends the line number to each line. Note the use of "\=" in the |
551 substitute string of the ":s" command, which is used to evaluate an | |
552 expression. | |
651 | 553 The BufWinEnter event is also triggered, again using "quickfix" for the buffer |
554 name. | |
7 | 555 |
9227
ecb621205ed1
commit https://github.com/vim/vim/commit/82af8710bf8d1caeeceafb1370a052cb7d92f076
Christian Brabandt <cb@256bit.org>
parents:
8702
diff
changeset
|
556 Note: When adding to an existing quickfix list the autocommand are not |
ecb621205ed1
commit https://github.com/vim/vim/commit/82af8710bf8d1caeeceafb1370a052cb7d92f076
Christian Brabandt <cb@256bit.org>
parents:
8702
diff
changeset
|
557 triggered. |
ecb621205ed1
commit https://github.com/vim/vim/commit/82af8710bf8d1caeeceafb1370a052cb7d92f076
Christian Brabandt <cb@256bit.org>
parents:
8702
diff
changeset
|
558 |
7 | 559 Note: Making changes in the quickfix window has no effect on the list of |
560 errors. 'modifiable' is off to avoid making changes. If you delete or insert | |
561 lines anyway, the relation between the text and the error number is messed up. | |
562 If you really want to do this, you could write the contents of the quickfix | |
563 window to a file and use ":cfile" to have it parsed and used as the new error | |
564 list. | |
565 | |
644 | 566 *location-list-window* |
648 | 567 The location list window displays the entries in a location list. When you |
568 open a location list window, it is created below the current window and | |
569 displays the location list for the current window. The location list window | |
570 is similar to the quickfix window, except that you can have more than one | |
651 | 571 location list window open at a time. When you use a location list command in |
572 this window, the displayed location list is used. | |
648 | 573 |
574 When you select a file from the location list window, the following steps are | |
575 used to find a window to edit the file: | |
644 | 576 |
648 | 577 1. If a window with the location list displayed in the location list window is |
578 present, then the file is opened in that window. | |
579 2. If the above step fails and if the file is already opened in another | |
580 window, then that window is used. | |
581 3. If the above step fails then an existing window showing a buffer with | |
582 'buftype' not set is used. | |
583 4. If the above step fails, then the file is edited in a new window. | |
584 | |
585 In all of the above cases, if the location list for the selected window is not | |
586 yet set, then it is set to the location list displayed in the location list | |
587 window. | |
644 | 588 |
13016
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
589 *quickfix-window-ID* |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
590 You can use the |getqflist()| and |getloclist()| functions to obtain the |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
591 window ID of the quickfix window and location list window respectively (if |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
592 present). Examples: > |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
593 echo getqflist({'winid' : 1}).winid |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
594 echo getloclist(2, {'winid' : 1}).winid |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
595 < |
7 | 596 ============================================================================= |
597 3. Using more than one list of errors *quickfix-error-lists* | |
598 | |
599 So far has been assumed that there is only one list of errors. Actually the | |
600 ten last used lists are remembered. When starting a new list, the previous | |
601 ones are automatically kept. Two commands can be used to access older error | |
602 lists. They set one of the existing error lists as the current one. | |
603 | |
604 *:colder* *:col* *E380* | |
605 :col[der] [count] Go to older error list. When [count] is given, do | |
606 this [count] times. When already at the oldest error | |
607 list, an error message is given. | |
608 | |
644 | 609 *:lolder* *:lol* |
9555
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
610 :lol[der] [count] Same as `:colder`, except use the location list for |
644 | 611 the current window instead of the quickfix list. |
612 | |
7 | 613 *:cnewer* *:cnew* *E381* |
614 :cnew[er] [count] Go to newer error list. When [count] is given, do | |
615 this [count] times. When already at the newest error | |
616 list, an error message is given. | |
617 | |
644 | 618 *:lnewer* *:lnew* |
9555
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
619 :lnew[er] [count] Same as `:cnewer`, except use the location list for |
644 | 620 the current window instead of the quickfix list. |
621 | |
9555
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
622 *:chistory* *:chi* |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
623 :chi[story] Show the list of error lists. The current list is |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
624 marked with ">". The output looks like: |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
625 error list 1 of 3; 43 errors ~ |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
626 > error list 2 of 3; 0 errors ~ |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
627 error list 3 of 3; 15 errors ~ |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
628 |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
629 *:lhistory* *:lhi* |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
630 :lhi[story] Show the list of location lists, otherwise like |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
631 `:chistory`. |
9560a5b782ee
commit https://github.com/vim/vim/commit/42ebd066422d73cdb7bda6a1dc828a3dd022dec8
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
632 |
7 | 633 When adding a new error list, it becomes the current list. |
634 | |
635 When ":colder" has been used and ":make" or ":grep" is used to add a new error | |
636 list, one newer list is overwritten. This is especially useful if you are | |
637 browsing with ":grep" |grep|. If you want to keep the more recent error | |
638 lists, use ":cnewer 99" first. | |
639 | |
13016
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
640 To get the number of lists in the quickfix and location list stack, you can |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
641 use the |getqflist()| and |getloclist()| functions respectively with the list |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
642 number set to the special value '$'. Examples: > |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
643 echo getqflist({'nr' : '$'}).nr |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
644 echo getloclist(3, {'nr' : '$'}).nr |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
645 To get the number of the current list in the stack: > |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
646 echo getqflist({'nr' : 0}).nr |
e47e70300f30
patch 8.0.1384: not enough quickfix help; confusing winid
Christian Brabandt <cb@256bit.org>
parents:
12499
diff
changeset
|
647 < |
7 | 648 ============================================================================= |
649 4. Using :make *:make_makeprg* | |
650 | |
651 *:mak* *:make* | |
163 | 652 :mak[e][!] [arguments] 1. If vim was built with |+autocmd|, all relevant |
653 |QuickFixCmdPre| autocommands are executed. | |
654 2. If the 'autowrite' option is on, write any changed | |
7 | 655 buffers |
163 | 656 3. An errorfile name is made from 'makeef'. If |
7 | 657 'makeef' doesn't contain "##", and a file with this |
658 name already exists, it is deleted. | |
163 | 659 4. The program given with the 'makeprg' option is |
7 | 660 started (default "make") with the optional |
661 [arguments] and the output is saved in the | |
662 errorfile (for Unix it is also echoed on the | |
663 screen). | |
163 | 664 5. The errorfile is read using 'errorformat'. |
1167 | 665 6. If vim was built with |+autocmd|, all relevant |
163 | 666 |QuickFixCmdPost| autocommands are executed. |
1624 | 667 See example below. |
1167 | 668 7. If [!] is not given the first error is jumped to. |
669 8. The errorfile is deleted. | |
163 | 670 9. You can now move through the errors with commands |
7 | 671 like |:cnext| and |:cprevious|, see above. |
672 This command does not accept a comment, any " | |
673 characters are considered part of the arguments. | |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
674 If the encoding of the program output differs from the |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
675 'encoding' option, you can use the 'makeencoding' |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
676 option to specify the encoding. |
7 | 677 |
658 | 678 *:lmak* *:lmake* |
679 :lmak[e][!] [arguments] | |
680 Same as ":make", except the location list for the | |
681 current window is used instead of the quickfix list. | |
682 | |
7 | 683 The ":make" command executes the command given with the 'makeprg' option. |
684 This is done by passing the command to the shell given with the 'shell' | |
685 option. This works almost like typing | |
686 | |
687 ":!{makeprg} [arguments] {shellpipe} {errorfile}". | |
688 | |
689 {makeprg} is the string given with the 'makeprg' option. Any command can be | |
690 used, not just "make". Characters '%' and '#' are expanded as usual on a | |
691 command-line. You can use "%<" to insert the current file name without | |
692 extension, or "#<" to insert the alternate file name without extension, for | |
693 example: > | |
694 :set makeprg=make\ #<.o | |
695 | |
696 [arguments] is anything that is typed after ":make". | |
697 {shellpipe} is the 'shellpipe' option. | |
698 {errorfile} is the 'makeef' option, with ## replaced to make it unique. | |
699 | |
2072 | 700 The placeholder "$*" can be used for the argument list in {makeprg} if the |
7 | 701 command needs some additional characters after its arguments. The $* is |
702 replaced then by all arguments. Example: > | |
703 :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*} | |
704 or simpler > | |
705 :let &mp = 'latex \\nonstopmode \\input\{$*}' | |
706 "$*" can be given multiple times, for example: > | |
707 :set makeprg=gcc\ -o\ $*\ $* | |
708 | |
709 The 'shellpipe' option defaults to ">" for the Amiga, MS-DOS and Win32. This | |
710 means that the output of the compiler is saved in a file and not shown on the | |
711 screen directly. For Unix "| tee" is used. The compiler output is shown on | |
712 the screen and saved in a file the same time. Depending on the shell used | |
713 "|& tee" or "2>&1| tee" is the default, so stderr output will be included. | |
714 | |
715 If 'shellpipe' is empty, the {errorfile} part will be omitted. This is useful | |
716 for compilers that write to an errorfile themselves (e.g., Manx's Amiga C). | |
717 | |
1624 | 718 |
719 Using QuickFixCmdPost to fix the encoding ~ | |
720 | |
721 It may be that 'encoding' is set to an encoding that differs from the messages | |
722 your build program produces. This example shows how to fix this after Vim has | |
723 read the error messages: > | |
724 | |
725 function QfMakeConv() | |
726 let qflist = getqflist() | |
727 for i in qflist | |
728 let i.text = iconv(i.text, "cp936", "utf-8") | |
729 endfor | |
730 call setqflist(qflist) | |
731 endfunction | |
732 | |
733 au QuickfixCmdPost make call QfMakeConv() | |
734 | |
735 (Example by Faque Cheng) | |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
736 Another option is using 'makeencoding'. |
1624 | 737 |
7 | 738 ============================================================================== |
41 | 739 5. Using :vimgrep and :grep *grep* *lid* |
740 | |
741 Vim has two ways to find matches for a pattern: Internal and external. The | |
742 advantage of the internal grep is that it works on all systems and uses the | |
743 powerful Vim search patterns. An external grep program can be used when the | |
744 Vim grep does not do what you want. | |
745 | |
43 | 746 The internal method will be slower, because files are read into memory. The |
747 advantages are: | |
748 - Line separators and encoding are automatically recognized, as if a file is | |
749 being edited. | |
750 - Uses Vim search patterns. Multi-line patterns can be used. | |
751 - When plugins are enabled: compressed and remote files can be searched. | |
752 |gzip| |netrw| | |
717 | 753 |
754 To be able to do this Vim loads each file as if it is being edited. When | |
720 | 755 there is no match in the file the associated buffer is wiped out again. The |
717 | 756 'hidden' option is ignored here to avoid running out of memory or file |
757 descriptors when searching many files. However, when the |:hide| command | |
758 modifier is used the buffers are kept loaded. This makes following searches | |
759 in the same files a lot faster. | |
41 | 760 |
2608
7d8af31066c8
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2577
diff
changeset
|
761 Note that |:copen| (or |:lopen| for |:lgrep|) may be used to open a buffer |
7d8af31066c8
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2577
diff
changeset
|
762 containing the search results in linked form. The |:silent| command may be |
2698
b6471224d2af
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2608
diff
changeset
|
763 used to suppress the default full screen grep output. The ":grep!" form of |
2608
7d8af31066c8
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2577
diff
changeset
|
764 the |:grep| command doesn't jump to the first match automatically. These |
7d8af31066c8
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2577
diff
changeset
|
765 commands can be combined to create a NewGrep command: > |
7d8af31066c8
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2577
diff
changeset
|
766 |
7d8af31066c8
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2577
diff
changeset
|
767 command! -nargs=+ NewGrep execute 'silent grep! <args>' | copen 42 |
7d8af31066c8
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2577
diff
changeset
|
768 |
41 | 769 |
770 5.1 using Vim's internal grep | |
771 | |
86 | 772 *:vim* *:vimgrep* *E682* *E683* |
170 | 773 :vim[grep][!] /{pattern}/[g][j] {file} ... |
41 | 774 Search for {pattern} in the files {file} ... and set |
3682 | 775 the error list to the matches. Files matching |
776 'wildignore' are ignored; files in 'suffixes' are | |
777 searched last. | |
170 | 778 Without the 'g' flag each line is added only once. |
779 With 'g' every match is added. | |
780 | |
781 {pattern} is a Vim search pattern. Instead of | |
782 enclosing it in / any non-ID character (see | |
783 |'isident'|) can be used, so long as it does not | |
784 appear in {pattern}. | |
785 'ignorecase' applies. To overrule it put |/\c| in the | |
786 pattern to ignore case or |/\C| to match case. | |
787 'smartcase' is not used. | |
4197 | 788 If {pattern} is empty (e.g. // is specified), the last |
789 used search pattern is used. |last-pattern| | |
170 | 790 |
716 | 791 When a number is put before the command this is used |
792 as the maximum number of matches to find. Use | |
793 ":1vimgrep pattern file" to find only the first. | |
794 Useful if you only want to check if there is a match | |
795 and quit quickly when it's found. | |
796 | |
170 | 797 Without the 'j' flag Vim jumps to the first match. |
798 With 'j' only the quickfix list is updated. | |
799 With the [!] any changes in the current buffer are | |
800 abandoned. | |
801 | |
123 | 802 Every second or so the searched file name is displayed |
803 to give you an idea of the progress made. | |
43 | 804 Examples: > |
805 :vimgrep /an error/ *.c | |
806 :vimgrep /\<FileName\>/ *.h include/* | |
445 | 807 :vimgrep /myfunc/ **/*.c |
808 < For the use of "**" see |starstar-wildcard|. | |
41 | 809 |
43 | 810 :vim[grep][!] {pattern} {file} ... |
811 Like above, but instead of enclosing the pattern in a | |
812 non-ID character use a white-separated pattern. The | |
813 pattern must start with an ID character. | |
814 Example: > | |
815 :vimgrep Error *.c | |
816 < | |
658 | 817 *:lv* *:lvimgrep* |
818 :lv[imgrep][!] /{pattern}/[g][j] {file} ... | |
819 :lv[imgrep][!] {pattern} {file} ... | |
820 Same as ":vimgrep", except the location list for the | |
821 current window is used instead of the quickfix list. | |
822 | |
41 | 823 *:vimgrepa* *:vimgrepadd* |
170 | 824 :vimgrepa[dd][!] /{pattern}/[g][j] {file} ... |
825 :vimgrepa[dd][!] {pattern} {file} ... | |
41 | 826 Just like ":vimgrep", but instead of making a new list |
827 of errors the matches are appended to the current | |
828 list. | |
829 | |
658 | 830 *:lvimgrepa* *:lvimgrepadd* |
831 :lvimgrepa[dd][!] /{pattern}/[g][j] {file} ... | |
832 :lvimgrepa[dd][!] {pattern} {file} ... | |
833 Same as ":vimgrepadd", except the location list for | |
834 the current window is used instead of the quickfix | |
835 list. | |
41 | 836 |
837 5.2 External grep | |
7 | 838 |
839 Vim can interface with "grep" and grep-like programs (such as the GNU | |
840 id-utils) in a similar way to its compiler integration (see |:make| above). | |
841 | |
842 [Unix trivia: The name for the Unix "grep" command comes from ":g/re/p", where | |
843 "re" stands for Regular Expression.] | |
844 | |
845 *:gr* *:grep* | |
846 :gr[ep][!] [arguments] Just like ":make", but use 'grepprg' instead of | |
847 'makeprg' and 'grepformat' instead of 'errorformat'. | |
41 | 848 When 'grepprg' is "internal" this works like |
849 |:vimgrep|. Note that the pattern needs to be | |
850 enclosed in separator characters then. | |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
851 If the encoding of the program output differs from the |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
852 'encoding' option, you can use the 'makeencoding' |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
853 option to specify the encoding. |
658 | 854 |
855 *:lgr* *:lgrep* | |
856 :lgr[ep][!] [arguments] Same as ":grep", except the location list for the | |
857 current window is used instead of the quickfix list. | |
858 | |
7 | 859 *:grepa* *:grepadd* |
860 :grepa[dd][!] [arguments] | |
861 Just like ":grep", but instead of making a new list of | |
862 errors the matches are appended to the current list. | |
863 Example: > | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
864 :call setqflist([]) |
7 | 865 :bufdo grepadd! something % |
866 < The first command makes a new error list which is | |
867 empty. The second command executes "grepadd" for each | |
868 listed buffer. Note the use of ! to avoid that | |
869 ":grepadd" jumps to the first error, which is not | |
870 allowed with |:bufdo|. | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
871 An example that uses the argument list and avoids |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
872 errors for files without matches: > |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
873 :silent argdo try |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
874 \ | grepadd! something % |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
875 \ | catch /E480:/ |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
876 \ | endtry" |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
877 < |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
878 If the encoding of the program output differs from the |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
879 'encoding' option, you can use the 'makeencoding' |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
880 option to specify the encoding. |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
11062
diff
changeset
|
881 |
658 | 882 *:lgrepa* *:lgrepadd* |
883 :lgrepa[dd][!] [arguments] | |
884 Same as ":grepadd", except the location list for the | |
885 current window is used instead of the quickfix list. | |
886 | |
41 | 887 5.3 Setting up external grep |
7 | 888 |
889 If you have a standard "grep" program installed, the :grep command may work | |
237 | 890 well with the defaults. The syntax is very similar to the standard command: > |
7 | 891 |
892 :grep foo *.c | |
893 | |
237 | 894 Will search all files with the .c extension for the substring "foo". The |
7 | 895 arguments to :grep are passed straight to the "grep" program, so you can use |
896 whatever options your "grep" supports. | |
897 | |
898 By default, :grep invokes grep with the -n option (show file and line | |
237 | 899 numbers). You can change this with the 'grepprg' option. You will need to set |
7 | 900 'grepprg' if: |
901 | |
902 a) You are using a program that isn't called "grep" | |
903 b) You have to call grep with a full path | |
904 c) You want to pass other options automatically (e.g. case insensitive | |
905 search.) | |
906 | |
907 Once "grep" has executed, Vim parses the results using the 'grepformat' | |
908 option. This option works in the same way as the 'errorformat' option - see | |
909 that for details. You may need to change 'grepformat' from the default if | |
910 your grep outputs in a non-standard format, or you are using some other | |
911 program with a special format. | |
912 | |
913 Once the results are parsed, Vim loads the first file containing a match and | |
914 jumps to the appropriate line, in the same way that it jumps to a compiler | |
915 error in |quickfix| mode. You can then use the |:cnext|, |:clist|, etc. | |
916 commands to see the other matches. | |
917 | |
918 | |
41 | 919 5.4 Using :grep with id-utils |
7 | 920 |
921 You can set up :grep to work with the GNU id-utils like this: > | |
922 | |
923 :set grepprg=lid\ -Rgrep\ -s | |
924 :set grepformat=%f:%l:%m | |
925 | |
926 then > | |
927 :grep (regexp) | |
928 | |
929 works just as you'd expect. | |
930 (provided you remembered to mkid first :) | |
931 | |
932 | |
41 | 933 5.5 Browsing source code with :vimgrep or :grep |
7 | 934 |
935 Using the stack of error lists that Vim keeps, you can browse your files to | |
936 look for functions and the functions they call. For example, suppose that you | |
937 have to add an argument to the read_file() function. You enter this command: > | |
938 | |
41 | 939 :vimgrep /\<read_file\>/ *.c |
7 | 940 |
941 You use ":cn" to go along the list of matches and add the argument. At one | |
942 place you have to get the new argument from a higher level function msg(), and | |
943 need to change that one too. Thus you use: > | |
944 | |
41 | 945 :vimgrep /\<msg\>/ *.c |
7 | 946 |
947 While changing the msg() functions, you find another function that needs to | |
41 | 948 get the argument from a higher level. You can again use ":vimgrep" to find |
949 these functions. Once you are finished with one function, you can use > | |
7 | 950 |
951 :colder | |
952 | |
953 to go back to the previous one. | |
954 | |
41 | 955 This works like browsing a tree: ":vimgrep" goes one level deeper, creating a |
7 | 956 list of branches. ":colder" goes back to the previous level. You can mix |
41 | 957 this use of ":vimgrep" and "colder" to browse all the locations in a tree-like |
7 | 958 way. If you do this consistently, you will find all locations without the |
959 need to write down a "todo" list. | |
960 | |
961 ============================================================================= | |
962 6. Selecting a compiler *compiler-select* | |
963 | |
964 *:comp* *:compiler* *E666* | |
965 :comp[iler][!] {name} Set options to work with compiler {name}. | |
966 Without the "!" options are set for the | |
967 current buffer. With "!" global options are | |
968 set. | |
969 If you use ":compiler foo" in "file.foo" and | |
970 then ":compiler! bar" in another buffer, Vim | |
971 will keep on using "foo" in "file.foo". | |
972 {not available when compiled without the | |
973 |+eval| feature} | |
974 | |
975 | |
976 The Vim plugins in the "compiler" directory will set options to use the | |
10348
c78513465e6e
commit https://github.com/vim/vim/commit/25de4c232d580583feadae11ab34e3cc6333c350
Christian Brabandt <cb@256bit.org>
parents:
10198
diff
changeset
|
977 selected compiler. For `:compiler` local options are set, for `:compiler!` |
7 | 978 global options. |
979 *current_compiler* | |
980 To support older Vim versions, the plugins always use "current_compiler" and | |
981 not "b:current_compiler". What the command actually does is the following: | |
982 | |
983 - Delete the "current_compiler" and "b:current_compiler" variables. | |
984 - Define the "CompilerSet" user command. With "!" it does ":set", without "!" | |
985 it does ":setlocal". | |
986 - Execute ":runtime! compiler/{name}.vim". The plugins are expected to set | |
987 options with "CompilerSet" and set the "current_compiler" variable to the | |
988 name of the compiler. | |
170 | 989 - Delete the "CompilerSet" user command. |
7 | 990 - Set "b:current_compiler" to the value of "current_compiler". |
991 - Without "!" the old value of "current_compiler" is restored. | |
992 | |
993 | |
994 For writing a compiler plugin, see |write-compiler-plugin|. | |
995 | |
996 | |
1228 | 997 GCC *quickfix-gcc* *compiler-gcc* |
998 | |
999 There's one variable you can set for the GCC compiler: | |
1000 | |
1001 g:compiler_gcc_ignore_unmatched_lines | |
1002 Ignore lines that don't match any patterns | |
1003 defined for GCC. Useful if output from | |
1004 commands run from make are generating false | |
1005 positives. | |
1006 | |
1007 | |
7 | 1008 MANX AZTEC C *quickfix-manx* *compiler-manx* |
1009 | |
1010 To use Vim with Manx's Aztec C compiler on the Amiga you should do the | |
1011 following: | |
1012 - Set the CCEDIT environment variable with the command: > | |
1013 mset "CCEDIT=vim -q" | |
1014 - Compile with the -qf option. If the compiler finds any errors, Vim is | |
1015 started and the cursor is positioned on the first error. The error message | |
1016 will be displayed on the last line. You can go to other errors with the | |
1017 commands mentioned above. You can fix the errors and write the file(s). | |
1018 - If you exit Vim normally the compiler will re-compile the same file. If you | |
1019 exit with the :cq command, the compiler will terminate. Do this if you | |
1020 cannot fix the error, or if another file needs to be compiled first. | |
1021 | |
1022 There are some restrictions to the Quickfix mode on the Amiga. The | |
1023 compiler only writes the first 25 errors to the errorfile (Manx's | |
1024 documentation does not say how to get more). If you want to find the others, | |
1025 you will have to fix a few errors and exit the editor. After recompiling, | |
1026 up to 25 remaining errors will be found. | |
1027 | |
1028 If Vim was started from the compiler, the :sh and some :! commands will not | |
1029 work, because Vim is then running in the same process as the compiler and | |
1030 stdin (standard input) will not be interactive. | |
1031 | |
1032 | |
1624 | 1033 PERL *quickfix-perl* *compiler-perl* |
1034 | |
1035 The Perl compiler plugin doesn't actually compile, but invokes Perl's internal | |
1036 syntax checking feature and parses the output for possible errors so you can | |
1037 correct them in quick-fix mode. | |
1038 | |
1039 Warnings are forced regardless of "no warnings" or "$^W = 0" within the file | |
1040 being checked. To disable this set g:perl_compiler_force_warnings to a zero | |
1041 value. For example: > | |
1042 let g:perl_compiler_force_warnings = 0 | |
1043 | |
1044 | |
7 | 1045 PYUNIT COMPILER *compiler-pyunit* |
1046 | |
1047 This is not actually a compiler, but a unit testing framework for the | |
237 | 1048 Python language. It is included into standard Python distribution |
1049 starting from version 2.0. For older versions, you can get it from | |
7 | 1050 http://pyunit.sourceforge.net. |
1051 | |
1052 When you run your tests with the help of the framework, possible errors | |
1053 are parsed by Vim and presented for you in quick-fix mode. | |
1054 | |
1055 Unfortunately, there is no standard way to run the tests. | |
1056 The alltests.py script seems to be used quite often, that's all. | |
1057 Useful values for the 'makeprg' options therefore are: | |
1058 setlocal makeprg=./alltests.py " Run a testsuite | |
5690 | 1059 setlocal makeprg=python\ %:S " Run a single testcase |
7 | 1060 |
1061 Also see http://vim.sourceforge.net/tip_view.php?tip_id=280. | |
1062 | |
1063 | |
1064 TEX COMPILER *compiler-tex* | |
1065 | |
1066 Included in the distribution compiler for TeX ($VIMRUNTIME/compiler/tex.vim) | |
237 | 1067 uses make command if possible. If the compiler finds a file named "Makefile" |
7 | 1068 or "makefile" in the current directory, it supposes that you want to process |
237 | 1069 your *TeX files with make, and the makefile does the right work. In this case |
1070 compiler sets 'errorformat' for *TeX output and leaves 'makeprg' untouched. If | |
7 | 1071 neither "Makefile" nor "makefile" is found, the compiler will not use make. |
1072 You can force the compiler to ignore makefiles by defining | |
1073 b:tex_ignore_makefile or g:tex_ignore_makefile variable (they are checked for | |
1074 existence only). | |
1075 | |
1076 If the compiler chose not to use make, it need to choose a right program for | |
237 | 1077 processing your input. If b:tex_flavor or g:tex_flavor (in this precedence) |
7 | 1078 variable exists, it defines TeX flavor for :make (actually, this is the name |
1079 of executed command), and if both variables do not exist, it defaults to | |
237 | 1080 "latex". For example, while editing chapter2.tex \input-ed from mypaper.tex |
7 | 1081 written in AMS-TeX: > |
1082 | |
1083 :let b:tex_flavor = 'amstex' | |
1084 :compiler tex | |
1085 < [editing...] > | |
1086 :make mypaper | |
1087 | |
1088 Note that you must specify a name of the file to process as an argument (to | |
1089 process the right file when editing \input-ed or \include-ed file; portable | |
237 | 1090 solution for substituting % for no arguments is welcome). This is not in the |
7 | 1091 semantics of make, where you specify a target, not source, but you may specify |
1092 filename without extension ".tex" and mean this as "make filename.dvi or | |
1093 filename.pdf or filename.some_result_extension according to compiler". | |
1094 | |
1095 Note: tex command line syntax is set to usable both for MikTeX (suggestion | |
237 | 1096 by Srinath Avadhanula) and teTeX (checked by Artem Chuprina). Suggestion |
7 | 1097 from |errorformat-LaTeX| is too complex to keep it working for different |
1098 shells and OSes and also does not allow to use other available TeX options, | |
237 | 1099 if any. If your TeX doesn't support "-interaction=nonstopmode", please |
7 | 1100 report it with different means to express \nonstopmode from the command line. |
1101 | |
1102 ============================================================================= | |
1103 7. The error format *error-file-format* | |
1104 | |
1105 *errorformat* *E372* *E373* *E374* | |
1106 *E375* *E376* *E377* *E378* | |
1107 The 'errorformat' option specifies a list of formats that are recognized. The | |
1108 first format that matches with an error message is used. You can add several | |
1109 formats for different messages your compiler produces, or even entries for | |
1110 multiple compilers. See |efm-entries|. | |
1111 | |
1112 Each entry in 'errorformat' is a scanf-like string that describes the format. | |
1113 First, you need to know how scanf works. Look in the documentation of your | |
1114 C compiler. Below you find the % items that Vim understands. Others are | |
1115 invalid. | |
1116 | |
1117 Special characters in 'errorformat' are comma and backslash. See | |
1118 |efm-entries| for how to deal with them. Note that a literal "%" is matched | |
1119 by "%%", thus it is not escaped with a backslash. | |
5277 | 1120 Keep in mind that in the `:make` and `:grep` output all NUL characters are |
1121 replaced with SOH (0x01). | |
7 | 1122 |
1123 Note: By default the difference between upper and lowercase is ignored. If | |
1124 you want to match case, add "\C" to the pattern |/\C|. | |
1125 | |
1126 | |
1127 Basic items | |
1128 | |
1129 %f file name (finds a string) | |
1130 %l line number (finds a number) | |
1131 %c column number (finds a number representing character | |
1132 column of the error, (1 <tab> == 1 character column)) | |
1133 %v virtual column number (finds a number representing | |
1134 screen column of the error (1 <tab> == 8 screen | |
237 | 1135 columns)) |
7 | 1136 %t error type (finds a single character) |
1137 %n error number (finds a number) | |
1138 %m error message (finds a string) | |
1139 %r matches the "rest" of a single-line file message %O/P/Q | |
3557 | 1140 %p pointer line (finds a sequence of '-', '.', ' ' or |
1141 tabs and uses the length for the column number) | |
7 | 1142 %*{conv} any scanf non-assignable conversion |
1143 %% the single '%' character | |
231 | 1144 %s search text (finds a string) |
7 | 1145 |
502 | 1146 The "%f" conversion may depend on the current 'isfname' setting. "~/" is |
279 | 1147 expanded to the home directory and environment variables are expanded. |
7 | 1148 |
502 | 1149 The "%f" and "%m" conversions have to detect the end of the string. This |
534 | 1150 normally happens by matching following characters and items. When nothing is |
502 | 1151 following the rest of the line is matched. If "%f" is followed by a '%' or a |
1152 backslash, it will look for a sequence of 'isfname' characters. | |
7 | 1153 |
1154 On MS-DOS, MS-Windows and OS/2 a leading "C:" will be included in "%f", even | |
1155 when using "%f:". This means that a file name which is a single alphabetical | |
1156 letter will not be detected. | |
1157 | |
1158 The "%p" conversion is normally followed by a "^". It's used for compilers | |
1159 that output a line like: > | |
1160 ^ | |
1161 or > | |
1162 ---------^ | |
1163 to indicate the column of the error. This is to be used in a multi-line error | |
1164 message. See |errorformat-javac| for a useful example. | |
1165 | |
231 | 1166 The "%s" conversion specifies the text to search for to locate the error line. |
1167 The text is used as a literal string. The anchors "^" and "$" are added to | |
1168 the text to locate the error line exactly matching the search text and the | |
1169 text is prefixed with the "\V" atom to make it "very nomagic". The "%s" | |
1170 conversion can be used to locate lines without a line number in the error | |
1171 output. Like the output of the "grep" shell command. | |
1172 When the pattern is present the line number will not be used. | |
7 | 1173 |
1174 Changing directory | |
1175 | |
1176 The following uppercase conversion characters specify the type of special | |
1177 format strings. At most one of them may be given as a prefix at the begin | |
1178 of a single comma-separated format pattern. | |
1179 Some compilers produce messages that consist of directory names that have to | |
237 | 1180 be prepended to each file name read by %f (example: GNU make). The following |
7 | 1181 codes can be used to scan these directory names; they will be stored in an |
1182 internal directory stack. *E379* | |
1183 %D "enter directory" format string; expects a following | |
1184 %f that finds the directory name | |
1185 %X "leave directory" format string; expects following %f | |
1186 | |
1187 When defining an "enter directory" or "leave directory" format, the "%D" or | |
237 | 1188 "%X" has to be given at the start of that substring. Vim tracks the directory |
7 | 1189 changes and prepends the current directory to each erroneous file found with a |
1190 relative path. See |quickfix-directory-stack| for details, tips and | |
1191 limitations. | |
1192 | |
1193 | |
1194 Multi-line messages *errorformat-multi-line* | |
1195 | |
1196 It is possible to read the output of programs that produce multi-line | |
237 | 1197 messages, i.e. error strings that consume more than one line. Possible |
7 | 1198 prefixes are: |
1199 %E start of a multi-line error message | |
1200 %W start of a multi-line warning message | |
1201 %I start of a multi-line informational message | |
1202 %A start of a multi-line message (unspecified type) | |
791 | 1203 %> for next line start with current pattern again |efm-%>| |
7 | 1204 %C continuation of a multi-line message |
1205 %Z end of a multi-line message | |
1206 These can be used with '+' and '-', see |efm-ignore| below. | |
1207 | |
787 | 1208 Using "\n" in the pattern won't work to match multi-line messages. |
1209 | |
7 | 1210 Example: Your compiler happens to write out errors in the following format |
1211 (leading line numbers not being part of the actual output): | |
1212 | |
787 | 1213 1 Error 275 ~ |
1214 2 line 42 ~ | |
1215 3 column 3 ~ | |
1216 4 ' ' expected after '--' ~ | |
7 | 1217 |
1218 The appropriate error format string has to look like this: > | |
1219 :set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m | |
1220 | |
1221 And the |:clist| error message generated for this error is: | |
1222 | |
1223 1:42 col 3 error 275: ' ' expected after '--' | |
1224 | |
1225 Another example: Think of a Python interpreter that produces the following | |
1226 error message (line numbers are not part of the actual output): | |
1227 | |
1228 1 ============================================================== | |
1229 2 FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest) | |
1230 3 -------------------------------------------------------------- | |
1231 4 Traceback (most recent call last): | |
1232 5 File "unittests/dbfacadeTest.py", line 89, in testFoo | |
1233 6 self.assertEquals(34, dtid) | |
1234 7 File "/usr/lib/python2.2/unittest.py", line 286, in | |
1235 8 failUnlessEqual | |
1236 9 raise self.failureException, \ | |
1237 10 AssertionError: 34 != 33 | |
1238 11 | |
1239 12 -------------------------------------------------------------- | |
1240 13 Ran 27 tests in 0.063s | |
1241 | |
1242 Say you want |:clist| write the relevant information of this message only, | |
1243 namely: | |
1244 5 unittests/dbfacadeTest.py:89: AssertionError: 34 != 33 | |
1245 | |
1246 Then the error format string could be defined as follows: > | |
1247 :set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m | |
1248 | |
1249 Note that the %C string is given before the %A here: since the expression | |
1250 ' %.%#' (which stands for the regular expression ' .*') matches every line | |
1251 starting with a space, followed by any characters to the end of the line, | |
1252 it also hides line 7 which would trigger a separate error message otherwise. | |
1253 Error format strings are always parsed pattern by pattern until the first | |
1254 match occurs. | |
791 | 1255 *efm-%>* |
1256 The %> item can be used to avoid trying patterns that appear earlier in | |
1257 'errorformat'. This is useful for patterns that match just about anything. | |
1258 For example, if the error looks like this: | |
1259 | |
1260 Error in line 123 of foo.c: ~ | |
1261 unknown variable "i" ~ | |
1262 | |
1263 This can be found with: > | |
1264 :set efm=xxx,%E%>Error in line %l of %f:,%Z%m | |
1265 Where "xxx" has a pattern that would also match the second line. | |
7 | 1266 |
787 | 1267 Important: There is no memory of what part of the errorformat matched before; |
1268 every line in the error file gets a complete new run through the error format | |
1269 lines. For example, if one has: > | |
1270 setlocal efm=aa,bb,cc,dd,ee | |
1271 Where aa, bb, etc. are error format strings. Each line of the error file will | |
1272 be matched to the pattern aa, then bb, then cc, etc. Just because cc matched | |
1273 the previous error line does _not_ mean that dd will be tried first on the | |
1274 current line, even if cc and dd are multi-line errorformat strings. | |
1275 | |
1276 | |
7 | 1277 |
1278 Separate file name *errorformat-separate-filename* | |
1279 | |
1280 These prefixes are useful if the file name is given once and multiple messages | |
1281 follow that refer to this file name. | |
1282 %O single-line file message: overread the matched part | |
1283 %P single-line file message: push file %f onto the stack | |
1284 %Q single-line file message: pop the last file from stack | |
1285 | |
1286 Example: Given a compiler that produces the following error logfile (without | |
1287 leading line numbers): | |
1288 | |
1289 1 [a1.tt] | |
1290 2 (1,17) error: ';' missing | |
1291 3 (21,2) warning: variable 'z' not defined | |
1292 4 (67,3) error: end of file found before string ended | |
1293 5 | |
1294 6 [a2.tt] | |
1295 7 | |
1296 8 [a3.tt] | |
1297 9 NEW compiler v1.1 | |
1298 10 (2,2) warning: variable 'x' not defined | |
1299 11 (67,3) warning: 's' already defined | |
1300 | |
1301 This logfile lists several messages for each file enclosed in [...] which are | |
1302 properly parsed by an error format like this: > | |
1303 :set efm=%+P[%f],(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%-Q | |
1304 | |
1305 A call of |:clist| writes them accordingly with their correct filenames: | |
1306 | |
1307 2 a1.tt:1 col 17 error: ';' missing | |
1308 3 a1.tt:21 col 2 warning: variable 'z' not defined | |
1309 4 a1.tt:67 col 3 error: end of file found before string ended | |
1310 8 a3.tt:2 col 2 warning: variable 'x' not defined | |
1311 9 a3.tt:67 col 3 warning: 's' already defined | |
1312 | |
1313 Unlike the other prefixes that all match against whole lines, %P, %Q and %O | |
237 | 1314 can be used to match several patterns in the same line. Thus it is possible |
7 | 1315 to parse even nested files like in the following line: |
1316 {"file1" {"file2" error1} error2 {"file3" error3 {"file4" error4 error5}}} | |
1317 The %O then parses over strings that do not contain any push/pop file name | |
1318 information. See |errorformat-LaTeX| for an extended example. | |
1319 | |
1320 | |
1321 Ignoring and using whole messages *efm-ignore* | |
1322 | |
1323 The codes '+' or '-' can be combined with the uppercase codes above; in that | |
237 | 1324 case they have to precede the letter, e.g. '%+A' or '%-G': |
7 | 1325 %- do not include the matching multi-line in any output |
1326 %+ include the whole matching line in the %m error string | |
1327 | |
237 | 1328 One prefix is only useful in combination with '+' or '-', namely %G. It parses |
7 | 1329 over lines containing general information like compiler version strings or |
1330 other headers that can be skipped. | |
1331 %-G ignore this message | |
1332 %+G general message | |
1333 | |
1334 | |
1335 Pattern matching | |
1336 | |
1337 The scanf()-like "%*[]" notation is supported for backward-compatibility | |
1338 with previous versions of Vim. However, it is also possible to specify | |
1339 (nearly) any Vim supported regular expression in format strings. | |
1340 Since meta characters of the regular expression language can be part of | |
1341 ordinary matching strings or file names (and therefore internally have to | |
1342 be escaped), meta symbols have to be written with leading '%': | |
787 | 1343 %\ The single '\' character. Note that this has to be |
7 | 1344 escaped ("%\\") in ":set errorformat=" definitions. |
787 | 1345 %. The single '.' character. |
1346 %# The single '*'(!) character. | |
1347 %^ The single '^' character. Note that this is not | |
1348 useful, the pattern already matches start of line. | |
1349 %$ The single '$' character. Note that this is not | |
1350 useful, the pattern already matches end of line. | |
1351 %[ The single '[' character for a [] character range. | |
1352 %~ The single '~' character. | |
7 | 1353 When using character classes in expressions (see |/\i| for an overview), |
1354 terms containing the "\+" quantifier can be written in the scanf() "%*" | |
237 | 1355 notation. Example: "%\\d%\\+" ("\d\+", "any number") is equivalent to "%*\\d". |
7 | 1356 Important note: The \(...\) grouping of sub-matches can not be used in format |
1357 specifications because it is reserved for internal conversions. | |
1358 | |
1359 | |
1360 Multiple entries in 'errorformat' *efm-entries* | |
1361 | |
1362 To be able to detect output from several compilers, several format patterns | |
1363 may be put in 'errorformat', separated by commas (note: blanks after the comma | |
1364 are ignored). The first pattern that has a complete match is used. If no | |
1365 match is found, matching parts from the last one will be used, although the | |
1366 file name is removed and the error message is set to the whole message. If | |
1367 there is a pattern that may match output from several compilers (but not in a | |
1368 right way), put it after one that is more restrictive. | |
1369 | |
1370 To include a comma in a pattern precede it with a backslash (you have to type | |
1371 two in a ":set" command). To include a backslash itself give two backslashes | |
1372 (you have to type four in a ":set" command). You also need to put a backslash | |
1373 before a space for ":set". | |
1374 | |
1375 | |
1376 Valid matches *quickfix-valid* | |
1377 | |
1378 If a line does not completely match one of the entries in 'errorformat', the | |
1379 whole line is put in the error message and the entry is marked "not valid" | |
1380 These lines are skipped with the ":cn" and ":cp" commands (unless there is | |
1381 no valid line at all). You can use ":cl!" to display all the error messages. | |
1382 | |
1383 If the error format does not contain a file name Vim cannot switch to the | |
1384 correct file. You will have to do this by hand. | |
1385 | |
1386 | |
1387 Examples | |
1388 | |
1389 The format of the file from the Amiga Aztec compiler is: | |
1390 | |
1391 filename>linenumber:columnnumber:errortype:errornumber:errormessage | |
1392 | |
1393 filename name of the file in which the error was detected | |
1394 linenumber line number where the error was detected | |
1395 columnnumber column number where the error was detected | |
1396 errortype type of the error, normally a single 'E' or 'W' | |
1397 errornumber number of the error (for lookup in the manual) | |
1398 errormessage description of the error | |
1399 | |
1400 This can be matched with this 'errorformat' entry: | |
1401 %f>%l:%c:%t:%n:%m | |
1402 | |
1403 Some examples for C compilers that produce single-line error outputs: | |
1404 %f:%l:\ %t%*[^0123456789]%n:\ %m for Manx/Aztec C error messages | |
1405 (scanf() doesn't understand [0-9]) | |
1406 %f\ %l\ %t%*[^0-9]%n:\ %m for SAS C | |
1407 \"%f\"\\,%*[^0-9]%l:\ %m for generic C compilers | |
1408 %f:%l:\ %m for GCC | |
1409 %f:%l:\ %m,%Dgmake[%*\\d]:\ Entering\ directory\ `%f', | |
1410 %Dgmake[%*\\d]:\ Leaving\ directory\ `%f' | |
1411 for GCC with gmake (concat the lines!) | |
1412 %f(%l)\ :\ %*[^:]:\ %m old SCO C compiler (pre-OS5) | |
1413 %f(%l)\ :\ %t%*[^0-9]%n:\ %m idem, with error type and number | |
1414 %f:%l:\ %m,In\ file\ included\ from\ %f:%l:,\^I\^Ifrom\ %f:%l%m | |
1415 for GCC, with some extras | |
1416 | |
1417 Extended examples for the handling of multi-line messages are given below, | |
1418 see |errorformat-Jikes| and |errorformat-LaTeX|. | |
1419 | |
1420 Note the backslash in front of a space and double quote. It is required for | |
1421 the :set command. There are two backslashes in front of a comma, one for the | |
1422 :set command and one to avoid recognizing the comma as a separator of error | |
1423 formats. | |
1424 | |
1425 | |
1426 Filtering messages | |
1427 | |
1428 If you have a compiler that produces error messages that do not fit in the | |
1429 format string, you could write a program that translates the error messages | |
1430 into this format. You can use this program with the ":make" command by | |
1431 changing the 'makeprg' option. For example: > | |
1432 :set mp=make\ \\\|&\ error_filter | |
1433 The backslashes before the pipe character are required to avoid it to be | |
1434 recognized as a command separator. The backslash before each space is | |
1435 required for the set command. | |
1436 | |
1437 ============================================================================= | |
1438 8. The directory stack *quickfix-directory-stack* | |
1439 | |
1440 Quickfix maintains a stack for saving all used directories parsed from the | |
237 | 1441 make output. For GNU-make this is rather simple, as it always prints the |
1442 absolute path of all directories it enters and leaves. Regardless if this is | |
7 | 1443 done via a 'cd' command in the makefile or with the parameter "-C dir" (change |
237 | 1444 to directory before reading the makefile). It may be useful to use the switch |
7 | 1445 "-w" to force GNU-make to print out the working directory before and after |
1446 processing. | |
1447 | |
1448 Maintaining the correct directory is more complicated if you don't use | |
237 | 1449 GNU-make. AIX-make for example doesn't print any information about its |
1450 working directory. Then you need to enhance the makefile. In the makefile of | |
1451 LessTif there is a command which echoes "Making {target} in {dir}". The | |
2072 | 1452 special problem here is that it doesn't print information on leaving the |
237 | 1453 directory and that it doesn't print the absolute path. |
7 | 1454 |
1455 To solve the problem with relative paths and missing "leave directory" | |
1456 messages Vim uses following algorithm: | |
1457 | |
1458 1) Check if the given directory is a subdirectory of the current directory. | |
1459 If this is true, store it as the current directory. | |
1460 2) If it is not a subdir of the current directory, try if this is a | |
1461 subdirectory of one of the upper directories. | |
1462 3) If the directory still isn't found, it is assumed to be a subdirectory | |
1463 of Vim's current directory. | |
1464 | |
1465 Additionally it is checked for every file, if it really exists in the | |
1466 identified directory. If not, it is searched in all other directories of the | |
237 | 1467 directory stack (NOT the directory subtree!). If it is still not found, it is |
7 | 1468 assumed that it is in Vim's current directory. |
1469 | |
2285
69064995302a
Change SKIP_GTK to SKIP_GTK2 in configure.
Bram Moolenaar <bram@vim.org>
parents:
2283
diff
changeset
|
1470 There are limitations in this algorithm. These examples assume that make just |
7 | 1471 prints information about entering a directory in the form "Making all in dir". |
1472 | |
1473 1) Assume you have following directories and files: | |
1474 ./dir1 | |
1475 ./dir1/file1.c | |
1476 ./file1.c | |
1477 | |
1478 If make processes the directory "./dir1" before the current directory and | |
1479 there is an error in the file "./file1.c", you will end up with the file | |
1480 "./dir1/file.c" loaded by Vim. | |
1481 | |
1482 This can only be solved with a "leave directory" message. | |
1483 | |
1484 2) Assume you have following directories and files: | |
1485 ./dir1 | |
1486 ./dir1/dir2 | |
1487 ./dir2 | |
1488 | |
1489 You get the following: | |
1490 | |
1491 Make output Directory interpreted by Vim | |
1492 ------------------------ ---------------------------- | |
1493 Making all in dir1 ./dir1 | |
1494 Making all in dir2 ./dir1/dir2 | |
1495 Making all in dir2 ./dir1/dir2 | |
1496 | |
1497 This can be solved by printing absolute directories in the "enter directory" | |
11062 | 1498 message or by printing "leave directory" messages. |
7 | 1499 |
2207
b17bbfa96fa0
Add the settabvar() and gettabvar() functions.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
1500 To avoid this problem, ensure to print absolute directory names and "leave |
7 | 1501 directory" messages. |
1502 | |
1503 Examples for Makefiles: | |
1504 | |
1505 Unix: | |
1506 libs: | |
1507 for dn in $(LIBDIRS); do \ | |
1508 (cd $$dn; echo "Entering dir '$$(pwd)'"; make); \ | |
1509 echo "Leaving dir"; \ | |
1510 done | |
1511 | |
1512 Add | |
1513 %DEntering\ dir\ '%f',%XLeaving\ dir | |
1514 to your 'errorformat' to handle the above output. | |
1515 | |
1516 Note that Vim doesn't check if the directory name in a "leave directory" | |
237 | 1517 messages is the current directory. This is why you could just use the message |
7 | 1518 "Leaving dir". |
1519 | |
1520 ============================================================================= | |
1521 9. Specific error file formats *errorformats* | |
1522 | |
1523 *errorformat-Jikes* | |
1524 Jikes(TM), a source-to-bytecode Java compiler published by IBM Research, | |
1525 produces simple multi-line error messages. | |
1526 | |
1527 An 'errorformat' string matching the produced messages is shown below. | |
1528 The following lines can be placed in the user's |vimrc| to overwrite Vim's | |
1529 recognized default formats, or see |:set+=| how to install this format | |
1530 additionally to the default. > | |
1531 | |
1532 :set efm=%A%f:%l:%c:%*\\d:%*\\d:, | |
1533 \%C%*\\s%trror:%m, | |
1534 \%+C%*[^:]%trror:%m, | |
1535 \%C%*\\s%tarning:%m, | |
1536 \%C%m | |
1537 < | |
1538 Jikes(TM) produces a single-line error message when invoked with the option | |
1539 "+E", and can be matched with the following: > | |
1540 | |
1167 | 1541 :setl efm=%f:%l:%v:%*\\d:%*\\d:%*\\s%m |
7 | 1542 < |
1543 *errorformat-javac* | |
1544 This 'errorformat' has been reported to work well for javac, which outputs a | |
1545 line with "^" to indicate the column of the error: > | |
1167 | 1546 :setl efm=%A%f:%l:\ %m,%-Z%p^,%-C%.%# |
7 | 1547 or: > |
1167 | 1548 :setl efm=%A%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%# |
7 | 1549 < |
1167 | 1550 Here is an alternative from Michael F. Lamb for Unix that filters the errors |
1551 first: > | |
1552 :setl errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%# | |
5690 | 1553 :setl makeprg=javac\ %:S\ 2>&1\ \\\|\ vim-javac-filter |
1167 | 1554 |
1555 You need to put the following in "vim-javac-filter" somewhere in your path | |
1556 (e.g., in ~/bin) and make it executable: > | |
1557 #!/bin/sed -f | |
1558 /\^$/s/\t/\ /g;/:[0-9]\+:/{h;d};/^[ \t]*\^/G; | |
1559 | |
1560 In English, that sed script: | |
1561 - Changes single tabs to single spaces and | |
1562 - Moves the line with the filename, line number, error message to just after | |
1563 the pointer line. That way, the unused error text between doesn't break | |
1564 vim's notion of a "multi-line message" and also doesn't force us to include | |
1565 it as a "continuation of a multi-line message." | |
1566 | |
7 | 1567 *errorformat-ant* |
1568 For ant (http://jakarta.apache.org/) the above errorformat has to be modified | |
1569 to honour the leading [javac] in front of each javac output line: > | |
1570 :set efm=%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%# | |
1571 | |
1572 The 'errorformat' can also be configured to handle ant together with either | |
1573 javac or jikes. If you're using jikes, you should tell ant to use jikes' +E | |
1574 command line switch which forces jikes to generate one-line error messages. | |
1575 This is what the second line (of a build.xml file) below does: > | |
1576 <property name = "build.compiler" value = "jikes"/> | |
1577 <property name = "build.compiler.emacs" value = "true"/> | |
1578 | |
1579 The 'errorformat' which handles ant with both javac and jikes is: > | |
1580 :set efm=\ %#[javac]\ %#%f:%l:%c:%*\\d:%*\\d:\ %t%[%^:]%#:%m, | |
1581 \%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%# | |
1582 < | |
1583 *errorformat-jade* | |
1584 parsing jade (see http://www.jclark.com/) errors is simple: > | |
1585 :set efm=jade:%f:%l:%c:%t:%m | |
1586 < | |
1587 *errorformat-LaTeX* | |
1588 The following is an example how an 'errorformat' string can be specified | |
1589 for the (La)TeX typesetting system which displays error messages over | |
1590 multiple lines. The output of ":clist" and ":cc" etc. commands displays | |
1591 multi-lines in a single line, leading white space is removed. | |
1592 It should be easy to adopt the above LaTeX errorformat to any compiler output | |
1593 consisting of multi-line errors. | |
1594 | |
1595 The commands can be placed in a |vimrc| file or some other Vim script file, | |
237 | 1596 e.g. a script containing LaTeX related stuff which is loaded only when editing |
7 | 1597 LaTeX sources. |
1598 Make sure to copy all lines of the example (in the given order), afterwards | |
1599 remove the comment lines. For the '\' notation at the start of some lines see | |
1600 |line-continuation|. | |
1601 | |
1602 First prepare 'makeprg' such that LaTeX will report multiple | |
1603 errors; do not stop when the first error has occurred: > | |
1604 :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*} | |
1605 < | |
1606 Start of multi-line error messages: > | |
1607 :set efm=%E!\ LaTeX\ %trror:\ %m, | |
1608 \%E!\ %m, | |
1609 < Start of multi-line warning messages; the first two also | |
237 | 1610 include the line number. Meaning of some regular expressions: |
7 | 1611 - "%.%#" (".*") matches a (possibly empty) string |
1612 - "%*\\d" ("\d\+") matches a number > | |
1613 \%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#, | |
1614 \%+W%.%#\ at\ lines\ %l--%*\\d, | |
1615 \%WLaTeX\ %.%#Warning:\ %m, | |
1616 < Possible continuations of error/warning messages; the first | |
1617 one also includes the line number: > | |
1618 \%Cl.%l\ %m, | |
1619 \%+C\ \ %m., | |
1620 \%+C%.%#-%.%#, | |
1621 \%+C%.%#[]%.%#, | |
1622 \%+C[]%.%#, | |
1623 \%+C%.%#%[{}\\]%.%#, | |
1624 \%+C<%.%#>%.%#, | |
1625 \%C\ \ %m, | |
1626 < Lines that match the following patterns do not contain any | |
1627 important information; do not include them in messages: > | |
1628 \%-GSee\ the\ LaTeX%m, | |
1629 \%-GType\ \ H\ <return>%m, | |
1630 \%-G\ ...%.%#, | |
1631 \%-G%.%#\ (C)\ %.%#, | |
1632 \%-G(see\ the\ transcript%.%#), | |
1633 < Generally exclude any empty or whitespace-only line from | |
1634 being displayed: > | |
1635 \%-G\\s%#, | |
1636 < The LaTeX output log does not specify the names of erroneous | |
1637 source files per line; rather they are given globally, | |
1638 enclosed in parentheses. | |
1639 The following patterns try to match these names and store | |
1640 them in an internal stack. The patterns possibly scan over | |
1641 the same input line (one after another), the trailing "%r" | |
1642 conversion indicates the "rest" of the line that will be | |
1643 parsed in the next go until the end of line is reached. | |
1644 | |
1645 Overread a file name enclosed in '('...')'; do not push it | |
1646 on a stack since the file apparently does not contain any | |
1647 error: > | |
1648 \%+O(%f)%r, | |
237 | 1649 < Push a file name onto the stack. The name is given after '(': > |
7 | 1650 \%+P(%f%r, |
1651 \%+P\ %\\=(%f%r, | |
1652 \%+P%*[^()](%f%r, | |
1653 \%+P[%\\d%[^()]%#(%f%r, | |
1654 < Pop the last stored file name when a ')' is scanned: > | |
1655 \%+Q)%r, | |
1656 \%+Q%*[^()])%r, | |
1657 \%+Q[%\\d%*[^()])%r | |
1658 | |
1659 Note that in some cases file names in the LaTeX output log cannot be parsed | |
1660 properly. The parser might have been messed up by unbalanced parentheses | |
1661 then. The above example tries to catch the most relevant cases only. | |
1662 You can customize the given setting to suit your own purposes, for example, | |
1663 all the annoying "Overfull ..." warnings could be excluded from being | |
1664 recognized as an error. | |
1665 Alternatively to filtering the LaTeX compiler output, it is also possible | |
1666 to directly read the *.log file that is produced by the [La]TeX compiler. | |
1667 This contains even more useful information about possible error causes. | |
1668 However, to properly parse such a complex file, an external filter should | |
1669 be used. See the description further above how to make such a filter known | |
1670 by Vim. | |
1671 | |
1672 *errorformat-Perl* | |
1673 In $VIMRUNTIME/tools you can find the efm_perl.pl script, which filters Perl | |
1674 error messages into a format that quickfix mode will understand. See the | |
1624 | 1675 start of the file about how to use it. (This script is deprecated, see |
1676 |compiler-perl|.) | |
7 | 1677 |
1678 | |
1679 | |
1680 vim:tw=78:ts=8:ft=help:norl: |