blob: 1f28f9bf7e4b297c0dcd7550b47a9803c8d45681 [file] [log] [blame]
Bram Moolenaard09091d2019-01-17 16:07:22 +01001*quickfix.txt* For Vim version 8.1. Last change: 2019 Jan 13
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7This subject is introduced in section |30.1| of the user manual.
8
91. Using QuickFix commands |quickfix|
102. The error window |quickfix-window|
113. Using more than one list of errors |quickfix-error-lists|
124. Using :make |:make_makeprg|
135. Using :grep |grep|
146. Selecting a compiler |compiler-select|
157. The error format |error-file-format|
168. The directory stack |quickfix-directory-stack|
179. Specific error file formats |errorformats|
18
19{Vi does not have any of these commands}
20
21The quickfix commands are not available when the |+quickfix| feature was
22disabled at compile time.
23
24=============================================================================
251. Using QuickFix commands *quickfix* *Quickfix* *E42*
26
27Vim has a special mode to speedup the edit-compile-edit cycle. This is
28inspired by the quickfix option of the Manx's Aztec C compiler on the Amiga.
29The idea is to save the error messages from the compiler in a file and use Vim
30to jump to the errors one by one. You can examine each problem and fix it,
31without having to remember all the error messages.
32
Bram Moolenaar05159a02005-02-26 23:04:13 +000033In Vim the quickfix commands are used more generally to find a list of
34positions in files. For example, |:vimgrep| finds pattern matches. You can
Bram Moolenaar2641f772005-03-25 21:58:17 +000035use the positions in a script with the |getqflist()| function. Thus you can
Bram Moolenaar05159a02005-02-26 23:04:13 +000036do a lot more than the edit/compile/fix cycle!
37
Bram Moolenaare18dbe82016-07-02 21:42:23 +020038If you have the error messages in a file you can start Vim with: >
39 vim -q filename
40
41From inside Vim an easy way to run a command and handle the output is with the
42|:make| command (see below).
43
44The 'errorformat' option should be set to match the error messages from your
Bram Moolenaar071d4272004-06-13 20:20:40 +000045compiler (see |errorformat| below).
46
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +020047 *quickfix-ID*
48Each quickfix list has a unique identifier called the quickfix ID and this
Bram Moolenaard473c8c2018-08-11 18:00:22 +020049number will not change within a Vim session. The |getqflist()| function can be
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +020050used to get the identifier assigned to a list. There is also a quickfix list
51number which may change whenever more than ten lists are added to a quickfix
52stack.
53
Bram Moolenaard12f5c12006-01-25 22:10:52 +000054 *location-list* *E776*
Bram Moolenaar036986f2017-03-16 17:41:02 +010055A location list is a window-local quickfix list. You get one after commands
56like `:lvimgrep`, `:lgrep`, `:lhelpgrep`, `:lmake`, etc., which create a
57location list instead of a quickfix list as the corresponding `:vimgrep`,
58`:grep`, `:helpgrep`, `:make` do.
Bram Moolenaar5b69c222019-01-11 14:50:06 +010059 *location-list-file-window*
Bram Moolenaar036986f2017-03-16 17:41:02 +010060A location list is associated with a window and each window can have a
61separate location list. A location list can be associated with only one
62window. The location list is independent of the quickfix list.
Bram Moolenaard12f5c12006-01-25 22:10:52 +000063
Bram Moolenaar280f1262006-01-30 00:14:18 +000064When a window with a location list is split, the new window gets a copy of the
Bram Moolenaare18dbe82016-07-02 21:42:23 +020065location list. When there are no longer any references to a location list,
66the location list is destroyed.
Bram Moolenaar280f1262006-01-30 00:14:18 +000067
Bram Moolenaarb254af32017-12-18 19:48:58 +010068 *quickfix-changedtick*
69Every quickfix and location list has a read-only changedtick variable that
70tracks the total number of changes made to the list. Every time the quickfix
71list is modified, this count is incremented. This can be used to perform an
Bram Moolenaard473c8c2018-08-11 18:00:22 +020072action only when the list has changed. The |getqflist()| and |getloclist()|
Bram Moolenaarb254af32017-12-18 19:48:58 +010073functions can be used to query the current value of changedtick. You cannot
74change the changedtick variable.
75
Bram Moolenaar280f1262006-01-30 00:14:18 +000076The following quickfix commands can be used. The location list commands are
77similar to the quickfix commands, replacing the 'c' prefix in the quickfix
78command with 'l'.
Bram Moolenaar071d4272004-06-13 20:20:40 +000079
Bram Moolenaare18c0b32016-03-20 21:08:34 +010080 *E924*
81If the current window was closed by an |autocommand| while processing a
82location list command, it will be aborted.
83
Bram Moolenaarffec3c52016-03-23 20:55:42 +010084 *E925* *E926*
85If the current quickfix or location list was changed by an |autocommand| while
86processing a quickfix or location list command, it will be aborted.
87
Bram Moolenaar071d4272004-06-13 20:20:40 +000088 *:cc*
89:cc[!] [nr] Display error [nr]. If [nr] is omitted, the same
Bram Moolenaar25190db2019-05-04 15:05:28 +020090:[nr]cc[!] error is displayed again. Without [!] this doesn't
Bram Moolenaar071d4272004-06-13 20:20:40 +000091 work when jumping to another buffer, the current buffer
92 has been changed, there is the only window for the
93 buffer and both 'hidden' and 'autowrite' are off.
94 When jumping to another buffer with [!] any changes to
95 the current buffer are lost, unless 'hidden' is set or
96 there is another window for this buffer.
97 The 'switchbuf' settings are respected when jumping
98 to a buffer.
Bram Moolenaar25190db2019-05-04 15:05:28 +020099 When used in the quickfix window the line number can
100 be used, including "." for the current line and "$"
101 for the last line.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000103 *:ll*
104:ll[!] [nr] Same as ":cc", except the location list for the
Bram Moolenaar25190db2019-05-04 15:05:28 +0200105:[nr]ll[!] current window is used instead of the quickfix list.
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000106
Bram Moolenaar071d4272004-06-13 20:20:40 +0000107 *:cn* *:cnext* *E553*
108:[count]cn[ext][!] Display the [count] next error in the list that
109 includes a file name. If there are no file names at
110 all, go to the [count] next error. See |:cc| for
111 [!] and 'switchbuf'.
112
Bram Moolenaar17c7c012006-01-26 22:25:15 +0000113 *:lne* *:lnext*
114:[count]lne[xt][!] Same as ":cnext", except the location list for the
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000115 current window is used instead of the quickfix list.
116
Bram Moolenaard09091d2019-01-17 16:07:22 +0100117:[count]cN[ext][!] *:cp* *:cprevious* *:cprev* *:cN* *:cNext*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000118:[count]cp[revious][!] Display the [count] previous error in the list that
119 includes a file name. If there are no file names at
120 all, go to the [count] previous error. See |:cc| for
121 [!] and 'switchbuf'.
122
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000123
Bram Moolenaard09091d2019-01-17 16:07:22 +0100124:[count]lN[ext][!] *:lp* *:lprevious* *:lprev* *:lN* *:lNext*
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000125:[count]lp[revious][!] Same as ":cNext" and ":cprevious", except the location
126 list for the current window is used instead of the
127 quickfix list.
128
Bram Moolenaar3ff33112019-05-03 21:56:35 +0200129 *:cabo* *:cabove*
130:[count]cabo[ve] Go to the [count] error above the current line in the
131 current buffer. If [count] is omitted, then 1 is
132 used. If there are no errors, then an error message
133 is displayed. Assumes that the entries in a quickfix
134 list are sorted by their buffer number and line
135 number. If there are multiple errors on the same line,
136 then only the first entry is used. If [count] exceeds
137 the number of entries above the current line, then the
138 first error in the file is selected.
139
140 *:lab* *:labove*
141:[count]lab[ove] Same as ":cabove", except the location list for the
142 current window is used instead of the quickfix list.
143
144 *:cbe* *:cbelow*
145:[count]cbe[low] Go to the [count] error below the current line in the
146 current buffer. If [count] is omitted, then 1 is
147 used. If there are no errors, then an error message
148 is displayed. Assumes that the entries in a quickfix
149 list are sorted by their buffer number and line
150 number. If there are multiple errors on the same
151 line, then only the first entry is used. If [count]
152 exceeds the number of entries below the current line,
153 then the last error in the file is selected.
154
155 *:lbe* *:lbelow*
156:[count]lbe[low] Same as ":cbelow", except the location list for the
157 current window is used instead of the quickfix list.
158
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159 *:cnf* *:cnfile*
160:[count]cnf[ile][!] Display the first error in the [count] next file in
161 the list that includes a file name. If there are no
162 file names at all or if there is no next file, go to
163 the [count] next error. See |:cc| for [!] and
164 'switchbuf'.
165
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000166 *:lnf* *:lnfile*
167:[count]lnf[ile][!] Same as ":cnfile", except the location list for the
168 current window is used instead of the quickfix list.
169
Bram Moolenaar071d4272004-06-13 20:20:40 +0000170:[count]cNf[ile][!] *:cpf* *:cpfile* *:cNf* *:cNfile*
171:[count]cpf[ile][!] Display the last error in the [count] previous file in
172 the list that includes a file name. If there are no
173 file names at all or if there is no next file, go to
174 the [count] previous error. See |:cc| for [!] and
175 'switchbuf'.
176
Bram Moolenaar17c7c012006-01-26 22:25:15 +0000177
178:[count]lNf[ile][!] *:lpf* *:lpfile* *:lNf* *:lNfile*
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000179:[count]lpf[ile][!] Same as ":cNfile" and ":cpfile", except the location
180 list for the current window is used instead of the
181 quickfix list.
182
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183 *:crewind* *:cr*
184:cr[ewind][!] [nr] Display error [nr]. If [nr] is omitted, the FIRST
185 error is displayed. See |:cc|.
186
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000187 *:lrewind* *:lr*
188:lr[ewind][!] [nr] Same as ":crewind", except the location list for the
189 current window is used instead of the quickfix list.
190
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191 *:cfirst* *:cfir*
192:cfir[st][!] [nr] Same as ":crewind".
193
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000194 *:lfirst* *:lfir*
195:lfir[st][!] [nr] Same as ":lrewind".
196
Bram Moolenaar071d4272004-06-13 20:20:40 +0000197 *:clast* *:cla*
198:cla[st][!] [nr] Display error [nr]. If [nr] is omitted, the LAST
199 error is displayed. See |:cc|.
200
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000201 *:llast* *:lla*
202:lla[st][!] [nr] Same as ":clast", except the location list for the
203 current window is used instead of the quickfix list.
204
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205 *:cq* *:cquit*
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000206:cq[uit][!] Quit Vim with an error code, so that the compiler
Bram Moolenaar071d4272004-06-13 20:20:40 +0000207 will not compile the same file again.
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000208 WARNING: All changes in files are lost! Also when the
209 [!] is not used. It works like ":qall!" |:qall|,
210 except that Vim returns a non-zero exit code.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211
212 *:cf* *:cfile*
213:cf[ile][!] [errorfile] Read the error file and jump to the first error.
214 This is done automatically when Vim is started with
215 the -q option. You can use this command when you
216 keep Vim running while compiling. If you give the
217 name of the errorfile, the 'errorfile' option will
218 be set to [errorfile]. See |:cc| for [!].
Bram Moolenaar2c7292d2017-03-05 17:43:31 +0100219 If the encoding of the error file differs from the
220 'encoding' option, you can use the 'makeencoding'
221 option to specify the encoding.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000223 *:lf* *:lfile*
224:lf[ile][!] [errorfile] Same as ":cfile", except the location list for the
225 current window is used instead of the quickfix list.
226 You can not use the -q command-line option to set
227 the location list.
228
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000229
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000230:cg[etfile] [errorfile] *:cg* *:cgetfile*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231 Read the error file. Just like ":cfile" but don't
232 jump to the first error.
Bram Moolenaar2c7292d2017-03-05 17:43:31 +0100233 If the encoding of the error file differs from the
234 'encoding' option, you can use the 'makeencoding'
235 option to specify the encoding.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000237
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000238:lg[etfile] [errorfile] *:lg* *:lgetfile*
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000239 Same as ":cgetfile", except the location list for the
240 current window is used instead of the quickfix list.
241
Bram Moolenaar4770d092006-01-12 23:22:24 +0000242 *:caddf* *:caddfile*
243:caddf[ile] [errorfile] Read the error file and add the errors from the
Bram Moolenaar87e25fd2005-07-27 21:13:01 +0000244 errorfile to the current quickfix list. If a quickfix
245 list is not present, then a new list is created.
Bram Moolenaar2c7292d2017-03-05 17:43:31 +0100246 If the encoding of the error file differs from the
247 'encoding' option, you can use the 'makeencoding'
248 option to specify the encoding.
Bram Moolenaar87e25fd2005-07-27 21:13:01 +0000249
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000250 *:laddf* *:laddfile*
251:laddf[ile] [errorfile] Same as ":caddfile", except the location list for the
252 current window is used instead of the quickfix list.
253
Bram Moolenaar86b68352004-12-27 21:59:20 +0000254 *:cb* *:cbuffer* *E681*
Bram Moolenaar6cbce9d2007-03-08 10:01:03 +0000255:cb[uffer][!] [bufnr] Read the error list from the current buffer.
Bram Moolenaar86b68352004-12-27 21:59:20 +0000256 When [bufnr] is given it must be the number of a
257 loaded buffer. That buffer will then be used instead
258 of the current buffer.
259 A range can be specified for the lines to be used.
260 Otherwise all lines in the buffer are used.
Bram Moolenaar6cbce9d2007-03-08 10:01:03 +0000261 See |:cc| for [!].
Bram Moolenaar86b68352004-12-27 21:59:20 +0000262
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000263 *:lb* *:lbuffer*
Bram Moolenaar6cbce9d2007-03-08 10:01:03 +0000264:lb[uffer][!] [bufnr] Same as ":cbuffer", except the location list for the
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000265 current window is used instead of the quickfix list.
266
Bram Moolenaardb552d602006-03-23 22:59:57 +0000267 *:cgetb* *:cgetbuffer*
268:cgetb[uffer] [bufnr] Read the error list from the current buffer. Just
269 like ":cbuffer" but don't jump to the first error.
270
271 *:lgetb* *:lgetbuffer*
272:lgetb[uffer] [bufnr] Same as ":cgetbuffer", except the location list for
273 the current window is used instead of the quickfix
274 list.
275
Bram Moolenaara6878372014-03-22 21:02:50 +0100276 *:cad* *:caddbuffer*
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +0100277:cad[dbuffer] [bufnr] Read the error list from the current buffer and add
Bram Moolenaar9f2c6e12006-02-04 22:45:44 +0000278 the errors to the current quickfix list. If a
279 quickfix list is not present, then a new list is
280 created. Otherwise, same as ":cbuffer".
281
282 *:laddb* *:laddbuffer*
283:laddb[uffer] [bufnr] Same as ":caddbuffer", except the location list for
284 the current window is used instead of the quickfix
285 list.
286
Bram Moolenaara40ceaf2006-01-13 22:35:40 +0000287 *:cex* *:cexpr* *E777*
Bram Moolenaar4770d092006-01-12 23:22:24 +0000288:cex[pr][!] {expr} Create a quickfix list using the result of {expr} and
Bram Moolenaar20f90cf2011-05-19 12:22:51 +0200289 jump to the first error.
290 If {expr} is a String, then each new-line terminated
Bram Moolenaard6357e82016-01-21 21:48:09 +0100291 line in the String is processed using the global value
292 of 'errorformat' and the result is added to the
293 quickfix list.
Bram Moolenaar20f90cf2011-05-19 12:22:51 +0200294 If {expr} is a List, then each String item in the list
295 is processed and added to the quickfix list. Non
296 String items in the List are ignored.
297 See |:cc| for [!].
Bram Moolenaar87e25fd2005-07-27 21:13:01 +0000298 Examples: >
299 :cexpr system('grep -n xyz *')
300 :cexpr getline(1, '$')
301<
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000302 *:lex* *:lexpr*
Bram Moolenaar20f90cf2011-05-19 12:22:51 +0200303:lex[pr][!] {expr} Same as |:cexpr|, except the location list for the
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000304 current window is used instead of the quickfix list.
305
Bram Moolenaar76b92b22006-03-24 22:46:53 +0000306 *:cgete* *:cgetexpr*
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000307:cgete[xpr] {expr} Create a quickfix list using the result of {expr}.
Bram Moolenaar20f90cf2011-05-19 12:22:51 +0200308 Just like |:cexpr|, but don't jump to the first error.
Bram Moolenaar76b92b22006-03-24 22:46:53 +0000309
310 *:lgete* *:lgetexpr*
Bram Moolenaar20f90cf2011-05-19 12:22:51 +0200311:lgete[xpr] {expr} Same as |:cgetexpr|, except the location list for the
Bram Moolenaar76b92b22006-03-24 22:46:53 +0000312 current window is used instead of the quickfix list.
313
Bram Moolenaara6878372014-03-22 21:02:50 +0100314 *:cadde* *:caddexpr*
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +0100315:cadde[xpr] {expr} Evaluate {expr} and add the resulting lines to the
Bram Moolenaar4770d092006-01-12 23:22:24 +0000316 current quickfix list. If a quickfix list is not
317 present, then a new list is created. The current
318 cursor position will not be changed. See |:cexpr| for
319 more information.
320 Example: >
321 :g/mypattern/caddexpr expand("%") . ":" . line(".") . ":" . getline(".")
322<
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000323 *:lad* *:laddexpr*
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000324:lad[dexpr] {expr} Same as ":caddexpr", except the location list for the
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000325 current window is used instead of the quickfix list.
326
Bram Moolenaar071d4272004-06-13 20:20:40 +0000327 *:cl* *:clist*
328:cl[ist] [from] [, [to]]
329 List all errors that are valid |quickfix-valid|.
330 If numbers [from] and/or [to] are given, the respective
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000331 range of errors is listed. A negative number counts
Bram Moolenaar071d4272004-06-13 20:20:40 +0000332 from the last error backwards, -1 being the last error.
333 The 'switchbuf' settings are respected when jumping
334 to a buffer.
Bram Moolenaara9defad2018-07-08 18:20:24 +0200335 The |:filter| command can be used to display only the
336 quickfix entries matching a supplied pattern. The
337 pattern is matched against the filename, module name,
338 pattern and text of the entry.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000339
Bram Moolenaare8fea072016-07-01 14:48:27 +0200340:cl[ist] +{count} List the current and next {count} valid errors. This
341 is similar to ":clist from from+count", where "from"
342 is the current error position.
343
Bram Moolenaar071d4272004-06-13 20:20:40 +0000344:cl[ist]! [from] [, [to]]
345 List all errors.
346
Bram Moolenaare8fea072016-07-01 14:48:27 +0200347:cl[ist]! +{count} List the current and next {count} error lines. This
348 is useful to see unrecognized lines after the current
349 one. For example, if ":clist" shows:
350 8384 testje.java:252: error: cannot find symbol ~
351 Then using ":cl! +3" shows the reason:
352 8384 testje.java:252: error: cannot find symbol ~
353 8385: ZexitCode = Fmainx(); ~
354 8386: ^ ~
355 8387: symbol: method Fmainx() ~
356
357:lli[st] [from] [, [to]] *:lli* *:llist*
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000358 Same as ":clist", except the location list for the
359 current window is used instead of the quickfix list.
360
361:lli[st]! [from] [, [to]]
362 List all the entries in the location list for the
363 current window.
364
Bram Moolenaar071d4272004-06-13 20:20:40 +0000365If you insert or delete lines, mostly the correct error location is still
366found because hidden marks are used. Sometimes, when the mark has been
367deleted for some reason, the message "line changed" is shown to warn you that
368the error location may not be correct. If you quit Vim and start again the
369marks are lost and the error locations may not be correct anymore.
370
Bram Moolenaarb5b75622018-03-09 22:22:21 +0100371Two autocommands are available for running commands before and after a
372quickfix command (':make', ':grep' and so on) is executed. See
373|QuickFixCmdPre| and |QuickFixCmdPost| for details.
Bram Moolenaarb11bd7e2005-02-07 22:05:52 +0000374
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000375 *QuickFixCmdPost-example*
376When 'encoding' differs from the locale, the error messages may have a
377different encoding from what Vim is using. To convert the messages you can
378use this code: >
379 function QfMakeConv()
380 let qflist = getqflist()
381 for i in qflist
382 let i.text = iconv(i.text, "cp936", "utf-8")
383 endfor
384 call setqflist(qflist)
385 endfunction
386
387 au QuickfixCmdPost make call QfMakeConv()
Bram Moolenaar2c7292d2017-03-05 17:43:31 +0100388Another option is using 'makeencoding'.
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000389
Bram Moolenaar74240d32017-12-10 15:26:15 +0100390 *quickfix-title*
391Every quickfix and location list has a title. By default the title is set to
392the command that created the list. The |getqflist()| and |getloclist()|
393functions can be used to get the title of a quickfix and a location list
394respectively. The |setqflist()| and |setloclist()| functions can be used to
395modify the title of a quickfix and location list respectively. Examples: >
396 call setqflist([], 'a', {'title' : 'Cmd output'})
397 echo getqflist({'title' : 1})
398 call setloclist(3, [], 'a', {'title' : 'Cmd output'})
399 echo getloclist(3, {'title' : 1})
400<
Bram Moolenaar5b69c222019-01-11 14:50:06 +0100401 *quickfix-index*
402When you jump to a quickfix/location list entry using any of the quickfix
Bram Moolenaard09091d2019-01-17 16:07:22 +0100403commands (e.g. |:cc|, |:cnext|, |:cprev|, etc.), that entry becomes the
404currently selected entry. The index of the currently selected entry in a
Bram Moolenaar5b69c222019-01-11 14:50:06 +0100405quickfix/location list can be obtained using the getqflist()/getloclist()
406functions. Examples: >
407 echo getqflist({'idx' : 0}).idx
408 echo getqflist({'id' : qfid, 'idx' : 0}).idx
409 echo getloclist(2, {'idx' : 0}).idx
410<
411For a new quickfix list, the first entry is selected and the index is 1. Any
412entry in any quickfix/location list can be set as the currently selected entry
413using the setqflist() function. Examples: >
414 call setqflist([], 'a', {'idx' : 12})
415 call setqflist([], 'a', {'id' : qfid, 'idx' : 7})
416 call setloclist(1, [], 'a', {'idx' : 7})
417<
Bram Moolenaar74240d32017-12-10 15:26:15 +0100418 *quickfix-size*
419You can get the number of entries (size) in a quickfix and a location list
420using the |getqflist()| and |getloclist()| functions respectively. Examples: >
421 echo getqflist({'size' : 1})
422 echo getloclist(5, {'size' : 1})
423<
424 *quickfix-context*
425Any Vim type can be associated as a context with a quickfix or location list.
426The |setqflist()| and the |setloclist()| functions can be used to associate a
427context with a quickfix and a location list respectively. The |getqflist()|
428and the |getloclist()| functions can be used to retrieve the context of a
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100429quickfix and a location list respectively. This is useful for a Vim plugin
Bram Moolenaar74240d32017-12-10 15:26:15 +0100430dealing with multiple quickfix/location lists.
431Examples: >
432
433 let somectx = {'name' : 'Vim', 'type' : 'Editor'}
434 call setqflist([], 'a', {'context' : somectx})
435 echo getqflist({'context' : 1})
436
437 let newctx = ['red', 'green', 'blue']
438 call setloclist(2, [], 'a', {'id' : qfid, 'context' : newctx})
439 echo getloclist(2, {'id' : qfid, 'context' : 1})
440<
441 *quickfix-parse*
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100442You can parse a list of lines using 'errorformat' without creating or
443modifying a quickfix list using the |getqflist()| function. Examples: >
Bram Moolenaar74240d32017-12-10 15:26:15 +0100444 echo getqflist({'lines' : ["F1:10:Line10", "F2:20:Line20"]})
445 echo getqflist({'lines' : systemlist('grep -Hn quickfix *')})
446This returns a dictionary where the 'items' key contains the list of quickfix
447entries parsed from lines. The following shows how to use a custom
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100448'errorformat' to parse the lines without modifying the 'errorformat' option: >
Bram Moolenaar74240d32017-12-10 15:26:15 +0100449 echo getqflist({'efm' : '%f#%l#%m', 'lines' : ['F1#10#Line']})
450<
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000451
Bram Moolenaar12969c02015-09-08 23:36:10 +0200452EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
453 *:cdo*
454:cdo[!] {cmd} Execute {cmd} in each valid entry in the quickfix list.
455 It works like doing this: >
456 :cfirst
457 :{cmd}
458 :cnext
459 :{cmd}
460 etc.
461< When the current file can't be |abandon|ed and the [!]
462 is not present, the command fails.
Bram Moolenaare8fea072016-07-01 14:48:27 +0200463 When an error is detected execution stops.
Bram Moolenaar12969c02015-09-08 23:36:10 +0200464 The last buffer (or where an error occurred) becomes
465 the current buffer.
466 {cmd} can contain '|' to concatenate several commands.
467
468 Only valid entries in the quickfix list are used.
469 A range can be used to select entries, e.g.: >
470 :10,$cdo cmd
471< To skip entries 1 to 9.
472
473 Note: While this command is executing, the Syntax
474 autocommand event is disabled by adding it to
475 'eventignore'. This considerably speeds up editing
476 each buffer.
Bram Moolenaarab943432018-03-29 18:27:07 +0200477 {not in Vi}
Bram Moolenaar12969c02015-09-08 23:36:10 +0200478 Also see |:bufdo|, |:tabdo|, |:argdo|, |:windo|,
479 |:ldo|, |:cfdo| and |:lfdo|.
480
481 *:cfdo*
482:cfdo[!] {cmd} Execute {cmd} in each file in the quickfix list.
483 It works like doing this: >
484 :cfirst
485 :{cmd}
486 :cnfile
487 :{cmd}
488 etc.
489< Otherwise it works the same as `:cdo`.
Bram Moolenaarab943432018-03-29 18:27:07 +0200490 {not in Vi}
Bram Moolenaar12969c02015-09-08 23:36:10 +0200491
492 *:ldo*
493:ld[o][!] {cmd} Execute {cmd} in each valid entry in the location list
494 for the current window.
495 It works like doing this: >
496 :lfirst
497 :{cmd}
498 :lnext
499 :{cmd}
500 etc.
501< Only valid entries in the location list are used.
502 Otherwise it works the same as `:cdo`.
Bram Moolenaarab943432018-03-29 18:27:07 +0200503 {not in Vi}
Bram Moolenaar12969c02015-09-08 23:36:10 +0200504
505 *:lfdo*
506:lfdo[!] {cmd} Execute {cmd} in each file in the location list for
507 the current window.
508 It works like doing this: >
509 :lfirst
510 :{cmd}
511 :lnfile
512 :{cmd}
513 etc.
514< Otherwise it works the same as `:ldo`.
Bram Moolenaarab943432018-03-29 18:27:07 +0200515 {not in Vi}
Bram Moolenaar12969c02015-09-08 23:36:10 +0200516
Bram Moolenaar071d4272004-06-13 20:20:40 +0000517=============================================================================
5182. The error window *quickfix-window*
519
Bram Moolenaar7fd73202010-07-25 16:58:46 +0200520 *:cope* *:copen* *w:quickfix_title*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000521:cope[n] [height] Open a window to show the current list of errors.
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +0100522
Bram Moolenaar071d4272004-06-13 20:20:40 +0000523 When [height] is given, the window becomes that high
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +0100524 (if there is room). When [height] is omitted the
525 window is made ten lines high.
526
Bram Moolenaar071d4272004-06-13 20:20:40 +0000527 If there already is a quickfix window, it will be made
528 the current window. It is not possible to open a
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +0100529 second quickfix window. If [height] is given the
530 existing window will be resized to it.
531
Bram Moolenaar647e24b2019-03-17 16:39:46 +0100532 *quickfix-buffer*
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +0100533 The window will contain a special buffer, with
534 'buftype' equal to "quickfix". Don't change this!
535 The window will have the w:quickfix_title variable set
536 which will indicate the command that produced the
537 quickfix list. This can be used to compose a custom
538 status line if the value of 'statusline' is adjusted
Bram Moolenaara8788f42017-07-19 17:06:20 +0200539 properly. Whenever this buffer is modified by a
540 quickfix command or function, the |b:changedtick|
Bram Moolenaar647e24b2019-03-17 16:39:46 +0100541 variable is incremented. You can get the number of
542 this buffer using the getqflist() and getloclist()
543 functions by passing the 'qfbufnr' item. For a
544 location list, this buffer is wiped out when the
545 location list is removed.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000546
Bram Moolenaar17c7c012006-01-26 22:25:15 +0000547 *:lop* *:lopen*
548:lop[en] [height] Open a window to show the location list for the
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000549 current window. Works only when the location list for
Bram Moolenaar17c7c012006-01-26 22:25:15 +0000550 the current window is present. You can have more than
551 one location window opened at a time. Otherwise, it
Bram Moolenaar280f1262006-01-30 00:14:18 +0000552 acts the same as ":copen".
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000553
Bram Moolenaar071d4272004-06-13 20:20:40 +0000554 *:ccl* *:cclose*
555:ccl[ose] Close the quickfix window.
556
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000557 *:lcl* *:lclose*
558:lcl[ose] Close the window showing the location list for the
559 current window.
560
Bram Moolenaar071d4272004-06-13 20:20:40 +0000561 *:cw* *:cwindow*
562:cw[indow] [height] Open the quickfix window when there are recognized
563 errors. If the window is already open and there are
564 no recognized errors, close the window.
565
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000566 *:lw* *:lwindow*
567:lw[indow] [height] Same as ":cwindow", except use the window showing the
568 location list for the current window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000569
Bram Moolenaar537ef082016-07-09 17:56:19 +0200570 *:cbo* *:cbottom*
Bram Moolenaardcb17002016-07-07 18:58:59 +0200571:cbo[ttom] Put the cursor in the last line of the quickfix window
572 and scroll to make it visible. This is useful for
573 when errors are added by an asynchronous callback.
574 Only call it once in a while if there are many
575 updates to avoid a lot of redrawing.
576
Bram Moolenaar537ef082016-07-09 17:56:19 +0200577 *:lbo* *:lbottom*
578:lbo[ttom] Same as ":cbottom", except use the window showing the
579 location list for the current window.
580
Bram Moolenaar071d4272004-06-13 20:20:40 +0000581Normally the quickfix window is at the bottom of the screen. If there are
582vertical splits, it's at the bottom of the rightmost column of windows. To
583make it always occupy the full width: >
584 :botright cwindow
585You can move the window around with |window-moving| commands.
586For example, to move it to the top: CTRL-W K
587The 'winfixheight' option will be set, which means that the window will mostly
588keep its height, ignoring 'winheight' and 'equalalways'. You can change the
589height manually (e.g., by dragging the status line above it with the mouse).
590
591In the quickfix window, each line is one error. The line number is equal to
Bram Moolenaar21020352017-06-13 17:21:04 +0200592the error number. The current entry is highlighted with the QuickFixLine
593highlighting. You can change it to your liking, e.g.: >
594 :hi QuickFixLine ctermbg=Yellow guibg=Yellow
595
596You can use ":.cc" to jump to the error under the cursor.
Bram Moolenaar05159a02005-02-26 23:04:13 +0000597Hitting the <Enter> key or double-clicking the mouse on a line has the same
Bram Moolenaar071d4272004-06-13 20:20:40 +0000598effect. The file containing the error is opened in the window above the
599quickfix window. If there already is a window for that file, it is used
600instead. If the buffer in the used window has changed, and the error is in
601another file, jumping to the error will fail. You will first have to make
602sure the window contains a buffer which can be abandoned.
Bram Moolenaar05159a02005-02-26 23:04:13 +0000603 *CTRL-W_<Enter>* *CTRL-W_<CR>*
604You can use CTRL-W <Enter> to open a new window and jump to the error there.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000605
606When the quickfix window has been filled, two autocommand events are
607triggered. First the 'filetype' option is set to "qf", which triggers the
Bram Moolenaar1ef15e32006-02-01 21:56:25 +0000608FileType event. Then the BufReadPost event is triggered, using "quickfix" for
609the buffer name. This can be used to perform some action on the listed
610errors. Example: >
Bram Moolenaar280f1262006-01-30 00:14:18 +0000611 au BufReadPost quickfix setlocal modifiable
612 \ | silent exe 'g/^/s//\=line(".")." "/'
613 \ | setlocal nomodifiable
Bram Moolenaar071d4272004-06-13 20:20:40 +0000614This prepends the line number to each line. Note the use of "\=" in the
615substitute string of the ":s" command, which is used to evaluate an
616expression.
Bram Moolenaar1ef15e32006-02-01 21:56:25 +0000617The BufWinEnter event is also triggered, again using "quickfix" for the buffer
618name.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000619
Bram Moolenaar82af8712016-06-04 20:20:29 +0200620Note: When adding to an existing quickfix list the autocommand are not
621triggered.
622
Bram Moolenaar071d4272004-06-13 20:20:40 +0000623Note: Making changes in the quickfix window has no effect on the list of
624errors. 'modifiable' is off to avoid making changes. If you delete or insert
625lines anyway, the relation between the text and the error number is messed up.
626If you really want to do this, you could write the contents of the quickfix
627window to a file and use ":cfile" to have it parsed and used as the new error
628list.
629
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000630 *location-list-window*
Bram Moolenaar280f1262006-01-30 00:14:18 +0000631The location list window displays the entries in a location list. When you
632open a location list window, it is created below the current window and
633displays the location list for the current window. The location list window
634is similar to the quickfix window, except that you can have more than one
Bram Moolenaar1ef15e32006-02-01 21:56:25 +0000635location list window open at a time. When you use a location list command in
636this window, the displayed location list is used.
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000637
Bram Moolenaar280f1262006-01-30 00:14:18 +0000638When you select a file from the location list window, the following steps are
639used to find a window to edit the file:
640
6411. If a window with the location list displayed in the location list window is
642 present, then the file is opened in that window.
6432. If the above step fails and if the file is already opened in another
644 window, then that window is used.
6453. If the above step fails then an existing window showing a buffer with
646 'buftype' not set is used.
6474. If the above step fails, then the file is edited in a new window.
648
649In all of the above cases, if the location list for the selected window is not
650yet set, then it is set to the location list displayed in the location list
651window.
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000652
Bram Moolenaar74240d32017-12-10 15:26:15 +0100653 *quickfix-window-ID*
654You can use the |getqflist()| and |getloclist()| functions to obtain the
655window ID of the quickfix window and location list window respectively (if
656present). Examples: >
657 echo getqflist({'winid' : 1}).winid
658 echo getloclist(2, {'winid' : 1}).winid
659<
Bram Moolenaar15142e22018-04-30 22:19:58 +0200660 *getqflist-examples*
Bram Moolenaard473c8c2018-08-11 18:00:22 +0200661The |getqflist()| and |getloclist()| functions can be used to get the various
Bram Moolenaar15142e22018-04-30 22:19:58 +0200662attributes of a quickfix and location list respectively. Some examples for
663using these functions are below:
664>
665 " get the title of the current quickfix list
666 :echo getqflist({'title' : 0}).title
667
668 " get the identifier of the current quickfix list
669 :let qfid = getqflist({'id' : 0}).id
670
Bram Moolenaar78ddc062018-05-15 21:56:34 +0200671 " get the identifier of the fourth quickfix list in the stack
672 :let qfid = getqflist({'nr' : 4, 'id' : 0}).id
673
674 " check whether a quickfix list with a specific identifier exists
675 :if getqflist({'id' : qfid}).id == qfid
676
Bram Moolenaar15142e22018-04-30 22:19:58 +0200677 " get the index of the current quickfix list in the stack
678 :let qfnum = getqflist({'nr' : 0}).nr
679
680 " get the items of a quickfix list specified by an identifier
681 :echo getqflist({'id' : qfid, 'items' : 0}).items
682
683 " get the number of entries in a quickfix list specified by an id
684 :echo getqflist({'id' : qfid, 'size' : 0}).size
685
686 " get the context of the third quickfix list in the stack
687 :echo getqflist({'nr' : 3, 'context' : 0}).context
688
689 " get the number of quickfix lists in the stack
690 :echo getqflist({'nr' : '$'}).nr
691
692 " get the number of times the current quickfix list is changed
693 :echo getqflist({'changedtick' : 0}).changedtick
694
695 " get the current entry in a quickfix list specified by an identifier
696 :echo getqflist({'id' : qfid, 'idx' : 0}).idx
697
698 " get all the quickfix list attributes using an identifier
699 :echo getqflist({'id' : qfid, 'all' : 0})
700
701 " parse text from a List of lines and return a quickfix list
702 :let myList = ["a.java:10:L10", "b.java:20:L20"]
703 :echo getqflist({'lines' : myList}).items
704
705 " parse text using a custom 'efm' and return a quickfix list
706 :echo getqflist({'lines' : ['a.c#10#Line 10'], 'efm':'%f#%l#%m'}).items
707
708 " get the quickfix list window id
709 :echo getqflist({'winid' : 0}).winid
710
Bram Moolenaar647e24b2019-03-17 16:39:46 +0100711 " get the quickfix list window buffer number
712 :echo getqflist({'qfbufnr' : 0}).qfbufnr
713
Bram Moolenaar15142e22018-04-30 22:19:58 +0200714 " get the context of the current location list
715 :echo getloclist(0, {'context' : 0}).context
716
717 " get the location list window id of the third window
718 :echo getloclist(3, {'winid' : 0}).winid
Bram Moolenaar5b69c222019-01-11 14:50:06 +0100719
Bram Moolenaar647e24b2019-03-17 16:39:46 +0100720 " get the location list window buffer number of the third window
721 :echo getloclist(3, {'qfbufnr' : 0}).qfbufnr
722
Bram Moolenaar5b69c222019-01-11 14:50:06 +0100723 " get the file window id of a location list window (winnr: 4)
724 :echo getloclist(4, {'filewinid' : 0}).filewinid
Bram Moolenaar15142e22018-04-30 22:19:58 +0200725<
726 *setqflist-examples*
Bram Moolenaard473c8c2018-08-11 18:00:22 +0200727The |setqflist()| and |setloclist()| functions can be used to set the various
Bram Moolenaar15142e22018-04-30 22:19:58 +0200728attributes of a quickfix and location list respectively. Some examples for
729using these functions are below:
730>
Bram Moolenaar78ddc062018-05-15 21:56:34 +0200731 " create an empty quickfix list with a title and a context
732 :let t = 'Search results'
733 :let c = {'cmd' : 'grep'}
734 :call setqflist([], ' ', {'title' : t, 'context' : c})
735
Bram Moolenaar15142e22018-04-30 22:19:58 +0200736 " set the title of the current quickfix list
737 :call setqflist([], 'a', {'title' : 'Mytitle'})
738
Bram Moolenaar5b69c222019-01-11 14:50:06 +0100739 " change the current entry in the list specified by an identifier
740 :call setqflist([], 'a', {'id' : qfid, 'idx' : 10})
741
Bram Moolenaar15142e22018-04-30 22:19:58 +0200742 " set the context of a quickfix list specified by an identifier
743 :call setqflist([], 'a', {'id' : qfid, 'context' : {'val' : 100}})
744
745 " create a new quickfix list from a command output
746 :call setqflist([], ' ', {'lines' : systemlist('grep -Hn main *.c')})
747
748 " parse text using a custom efm and add to a particular quickfix list
749 :call setqflist([], 'a', {'id' : qfid,
750 \ 'lines' : ["a.c#10#L10", "b.c#20#L20"], 'efm':'%f#%l#%m'})
751
752 " add items to the quickfix list specified by an identifier
753 :let newItems = [{'filename' : 'a.txt', 'lnum' : 10, 'text' : "Apple"},
754 \ {'filename' : 'b.txt', 'lnum' : 20, 'text' : "Orange"}]
755 :call setqflist([], 'a', {'id' : qfid, 'items' : newItems})
756
Bram Moolenaar78ddc062018-05-15 21:56:34 +0200757 " empty a quickfix list specified by an identifier
758 :call setqflist([], 'r', {'id' : qfid, 'items' : []})
759
Bram Moolenaar15142e22018-04-30 22:19:58 +0200760 " free all the quickfix lists in the stack
761 :call setqflist([], 'f')
762
763 " set the title of the fourth quickfix list
764 :call setqflist([], 'a', {'nr' : 4, 'title' : 'SomeTitle'})
765
766 " create a new quickfix list at the end of the stack
767 :call setqflist([], ' ', {'nr' : '$',
768 \ 'lines' : systemlist('grep -Hn class *.java')})
769
770 " create a new location list from a command output
771 :call setloclist(0, [], ' ', {'lines' : systemlist('grep -Hn main *.c')})
772
773 " replace the location list entries for the third window
774 :call setloclist(3, [], 'r', {'items' : newItems})
775<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000776=============================================================================
7773. Using more than one list of errors *quickfix-error-lists*
778
779So far has been assumed that there is only one list of errors. Actually the
780ten last used lists are remembered. When starting a new list, the previous
781ones are automatically kept. Two commands can be used to access older error
782lists. They set one of the existing error lists as the current one.
783
784 *:colder* *:col* *E380*
785:col[der] [count] Go to older error list. When [count] is given, do
786 this [count] times. When already at the oldest error
787 list, an error message is given.
788
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000789 *:lolder* *:lol*
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200790:lol[der] [count] Same as `:colder`, except use the location list for
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000791 the current window instead of the quickfix list.
792
Bram Moolenaar071d4272004-06-13 20:20:40 +0000793 *:cnewer* *:cnew* *E381*
794:cnew[er] [count] Go to newer error list. When [count] is given, do
795 this [count] times. When already at the newest error
796 list, an error message is given.
797
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000798 *:lnewer* *:lnew*
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200799:lnew[er] [count] Same as `:cnewer`, except use the location list for
Bram Moolenaard12f5c12006-01-25 22:10:52 +0000800 the current window instead of the quickfix list.
801
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200802 *:chistory* *:chi*
803:chi[story] Show the list of error lists. The current list is
804 marked with ">". The output looks like:
805 error list 1 of 3; 43 errors ~
806 > error list 2 of 3; 0 errors ~
807 error list 3 of 3; 15 errors ~
808
809 *:lhistory* *:lhi*
810:lhi[story] Show the list of location lists, otherwise like
811 `:chistory`.
812
Bram Moolenaar071d4272004-06-13 20:20:40 +0000813When adding a new error list, it becomes the current list.
814
815When ":colder" has been used and ":make" or ":grep" is used to add a new error
816list, one newer list is overwritten. This is especially useful if you are
817browsing with ":grep" |grep|. If you want to keep the more recent error
818lists, use ":cnewer 99" first.
819
Bram Moolenaar74240d32017-12-10 15:26:15 +0100820To get the number of lists in the quickfix and location list stack, you can
821use the |getqflist()| and |getloclist()| functions respectively with the list
822number set to the special value '$'. Examples: >
823 echo getqflist({'nr' : '$'}).nr
824 echo getloclist(3, {'nr' : '$'}).nr
825To get the number of the current list in the stack: >
826 echo getqflist({'nr' : 0}).nr
827<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000828=============================================================================
8294. Using :make *:make_makeprg*
830
831 *:mak* *:make*
Bram Moolenaarb5b75622018-03-09 22:22:21 +0100832:mak[e][!] [arguments] 1. All relevant |QuickFixCmdPre| autocommands are
833 executed.
Bram Moolenaarb11bd7e2005-02-07 22:05:52 +0000834 2. If the 'autowrite' option is on, write any changed
Bram Moolenaar071d4272004-06-13 20:20:40 +0000835 buffers
Bram Moolenaarb11bd7e2005-02-07 22:05:52 +0000836 3. An errorfile name is made from 'makeef'. If
Bram Moolenaar071d4272004-06-13 20:20:40 +0000837 'makeef' doesn't contain "##", and a file with this
838 name already exists, it is deleted.
Bram Moolenaarb11bd7e2005-02-07 22:05:52 +0000839 4. The program given with the 'makeprg' option is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000840 started (default "make") with the optional
841 [arguments] and the output is saved in the
842 errorfile (for Unix it is also echoed on the
843 screen).
Bram Moolenaarb11bd7e2005-02-07 22:05:52 +0000844 5. The errorfile is read using 'errorformat'.
Bram Moolenaarb5b75622018-03-09 22:22:21 +0100845 6. All relevant |QuickFixCmdPost| autocommands are
846 executed. See example below.
Bram Moolenaar6b803a72007-05-06 14:25:46 +0000847 7. If [!] is not given the first error is jumped to.
848 8. The errorfile is deleted.
Bram Moolenaarb11bd7e2005-02-07 22:05:52 +0000849 9. You can now move through the errors with commands
Bram Moolenaar071d4272004-06-13 20:20:40 +0000850 like |:cnext| and |:cprevious|, see above.
851 This command does not accept a comment, any "
852 characters are considered part of the arguments.
Bram Moolenaar2c7292d2017-03-05 17:43:31 +0100853 If the encoding of the program output differs from the
854 'encoding' option, you can use the 'makeencoding'
855 option to specify the encoding.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000856
Bram Moolenaar9f2c6e12006-02-04 22:45:44 +0000857 *:lmak* *:lmake*
858:lmak[e][!] [arguments]
859 Same as ":make", except the location list for the
860 current window is used instead of the quickfix list.
861
Bram Moolenaar071d4272004-06-13 20:20:40 +0000862The ":make" command executes the command given with the 'makeprg' option.
863This is done by passing the command to the shell given with the 'shell'
864option. This works almost like typing
865
866 ":!{makeprg} [arguments] {shellpipe} {errorfile}".
867
868{makeprg} is the string given with the 'makeprg' option. Any command can be
869used, not just "make". Characters '%' and '#' are expanded as usual on a
870command-line. You can use "%<" to insert the current file name without
871extension, or "#<" to insert the alternate file name without extension, for
872example: >
873 :set makeprg=make\ #<.o
874
875[arguments] is anything that is typed after ":make".
876{shellpipe} is the 'shellpipe' option.
877{errorfile} is the 'makeef' option, with ## replaced to make it unique.
878
Bram Moolenaar6dfc28b2010-02-11 14:19:15 +0100879The placeholder "$*" can be used for the argument list in {makeprg} if the
Bram Moolenaar071d4272004-06-13 20:20:40 +0000880command needs some additional characters after its arguments. The $* is
881replaced then by all arguments. Example: >
882 :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
883or simpler >
884 :let &mp = 'latex \\nonstopmode \\input\{$*}'
885"$*" can be given multiple times, for example: >
886 :set makeprg=gcc\ -o\ $*\ $*
887
888The 'shellpipe' option defaults to ">" for the Amiga, MS-DOS and Win32. This
889means that the output of the compiler is saved in a file and not shown on the
890screen directly. For Unix "| tee" is used. The compiler output is shown on
891the screen and saved in a file the same time. Depending on the shell used
892"|& tee" or "2>&1| tee" is the default, so stderr output will be included.
893
894If 'shellpipe' is empty, the {errorfile} part will be omitted. This is useful
895for compilers that write to an errorfile themselves (e.g., Manx's Amiga C).
896
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000897
898Using QuickFixCmdPost to fix the encoding ~
899
900It may be that 'encoding' is set to an encoding that differs from the messages
901your build program produces. This example shows how to fix this after Vim has
902read the error messages: >
903
904 function QfMakeConv()
905 let qflist = getqflist()
906 for i in qflist
907 let i.text = iconv(i.text, "cp936", "utf-8")
908 endfor
909 call setqflist(qflist)
910 endfunction
911
912 au QuickfixCmdPost make call QfMakeConv()
913
914(Example by Faque Cheng)
Bram Moolenaar2c7292d2017-03-05 17:43:31 +0100915Another option is using 'makeencoding'.
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000916
Bram Moolenaar071d4272004-06-13 20:20:40 +0000917==============================================================================
Bram Moolenaar86b68352004-12-27 21:59:20 +00009185. Using :vimgrep and :grep *grep* *lid*
919
920Vim has two ways to find matches for a pattern: Internal and external. The
921advantage of the internal grep is that it works on all systems and uses the
922powerful Vim search patterns. An external grep program can be used when the
923Vim grep does not do what you want.
924
Bram Moolenaar8fc061c2004-12-29 21:03:02 +0000925The internal method will be slower, because files are read into memory. The
926advantages are:
927- Line separators and encoding are automatically recognized, as if a file is
928 being edited.
929- Uses Vim search patterns. Multi-line patterns can be used.
930- When plugins are enabled: compressed and remote files can be searched.
931 |gzip| |netrw|
Bram Moolenaara3227e22006-03-08 21:32:40 +0000932
933To be able to do this Vim loads each file as if it is being edited. When
Bram Moolenaar1056d982006-03-09 22:37:52 +0000934there is no match in the file the associated buffer is wiped out again. The
Bram Moolenaara3227e22006-03-08 21:32:40 +0000935'hidden' option is ignored here to avoid running out of memory or file
936descriptors when searching many files. However, when the |:hide| command
937modifier is used the buffers are kept loaded. This makes following searches
938in the same files a lot faster.
Bram Moolenaar86b68352004-12-27 21:59:20 +0000939
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200940Note that |:copen| (or |:lopen| for |:lgrep|) may be used to open a buffer
941containing the search results in linked form. The |:silent| command may be
Bram Moolenaard58e9292011-02-09 17:07:58 +0100942used to suppress the default full screen grep output. The ":grep!" form of
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200943the |:grep| command doesn't jump to the first match automatically. These
944commands can be combined to create a NewGrep command: >
945
946 command! -nargs=+ NewGrep execute 'silent grep! <args>' | copen 42
947
Bram Moolenaar86b68352004-12-27 21:59:20 +0000948
9495.1 using Vim's internal grep
950
Bram Moolenaare49b69a2005-01-08 16:11:57 +0000951 *:vim* *:vimgrep* *E682* *E683*
Bram Moolenaar05159a02005-02-26 23:04:13 +0000952:vim[grep][!] /{pattern}/[g][j] {file} ...
Bram Moolenaar86b68352004-12-27 21:59:20 +0000953 Search for {pattern} in the files {file} ... and set
Bram Moolenaar30b65812012-07-12 22:01:11 +0200954 the error list to the matches. Files matching
955 'wildignore' are ignored; files in 'suffixes' are
956 searched last.
Bram Moolenaar05159a02005-02-26 23:04:13 +0000957 Without the 'g' flag each line is added only once.
958 With 'g' every match is added.
959
960 {pattern} is a Vim search pattern. Instead of
961 enclosing it in / any non-ID character (see
962 |'isident'|) can be used, so long as it does not
963 appear in {pattern}.
964 'ignorecase' applies. To overrule it put |/\c| in the
965 pattern to ignore case or |/\C| to match case.
966 'smartcase' is not used.
Bram Moolenaar60abe752013-03-07 16:32:54 +0100967 If {pattern} is empty (e.g. // is specified), the last
968 used search pattern is used. |last-pattern|
Bram Moolenaarba3ff532018-11-04 14:45:49 +0100969:{count}vim[grep] ...
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000970 When a number is put before the command this is used
971 as the maximum number of matches to find. Use
972 ":1vimgrep pattern file" to find only the first.
973 Useful if you only want to check if there is a match
974 and quit quickly when it's found.
975
Bram Moolenaar05159a02005-02-26 23:04:13 +0000976 Without the 'j' flag Vim jumps to the first match.
977 With 'j' only the quickfix list is updated.
978 With the [!] any changes in the current buffer are
979 abandoned.
980
Bram Moolenaardcaf10e2005-01-21 11:55:25 +0000981 Every second or so the searched file name is displayed
982 to give you an idea of the progress made.
Bram Moolenaar8fc061c2004-12-29 21:03:02 +0000983 Examples: >
984 :vimgrep /an error/ *.c
985 :vimgrep /\<FileName\>/ *.h include/*
Bram Moolenaar231334e2005-07-25 20:46:57 +0000986 :vimgrep /myfunc/ **/*.c
987< For the use of "**" see |starstar-wildcard|.
Bram Moolenaar86b68352004-12-27 21:59:20 +0000988
Bram Moolenaar8fc061c2004-12-29 21:03:02 +0000989:vim[grep][!] {pattern} {file} ...
990 Like above, but instead of enclosing the pattern in a
991 non-ID character use a white-separated pattern. The
992 pattern must start with an ID character.
993 Example: >
994 :vimgrep Error *.c
995<
Bram Moolenaar9f2c6e12006-02-04 22:45:44 +0000996 *:lv* *:lvimgrep*
997:lv[imgrep][!] /{pattern}/[g][j] {file} ...
998:lv[imgrep][!] {pattern} {file} ...
999 Same as ":vimgrep", except the location list for the
1000 current window is used instead of the quickfix list.
1001
Bram Moolenaar86b68352004-12-27 21:59:20 +00001002 *:vimgrepa* *:vimgrepadd*
Bram Moolenaar05159a02005-02-26 23:04:13 +00001003:vimgrepa[dd][!] /{pattern}/[g][j] {file} ...
1004:vimgrepa[dd][!] {pattern} {file} ...
Bram Moolenaar86b68352004-12-27 21:59:20 +00001005 Just like ":vimgrep", but instead of making a new list
1006 of errors the matches are appended to the current
1007 list.
1008
Bram Moolenaar9f2c6e12006-02-04 22:45:44 +00001009 *:lvimgrepa* *:lvimgrepadd*
1010:lvimgrepa[dd][!] /{pattern}/[g][j] {file} ...
1011:lvimgrepa[dd][!] {pattern} {file} ...
1012 Same as ":vimgrepadd", except the location list for
1013 the current window is used instead of the quickfix
1014 list.
Bram Moolenaar86b68352004-12-27 21:59:20 +00001015
10165.2 External grep
Bram Moolenaar071d4272004-06-13 20:20:40 +00001017
1018Vim can interface with "grep" and grep-like programs (such as the GNU
1019id-utils) in a similar way to its compiler integration (see |:make| above).
1020
1021[Unix trivia: The name for the Unix "grep" command comes from ":g/re/p", where
1022"re" stands for Regular Expression.]
1023
1024 *:gr* *:grep*
1025:gr[ep][!] [arguments] Just like ":make", but use 'grepprg' instead of
1026 'makeprg' and 'grepformat' instead of 'errorformat'.
Bram Moolenaar86b68352004-12-27 21:59:20 +00001027 When 'grepprg' is "internal" this works like
1028 |:vimgrep|. Note that the pattern needs to be
1029 enclosed in separator characters then.
Bram Moolenaar2c7292d2017-03-05 17:43:31 +01001030 If the encoding of the program output differs from the
1031 'encoding' option, you can use the 'makeencoding'
1032 option to specify the encoding.
Bram Moolenaar9f2c6e12006-02-04 22:45:44 +00001033
1034 *:lgr* *:lgrep*
1035:lgr[ep][!] [arguments] Same as ":grep", except the location list for the
1036 current window is used instead of the quickfix list.
1037
Bram Moolenaar071d4272004-06-13 20:20:40 +00001038 *:grepa* *:grepadd*
1039:grepa[dd][!] [arguments]
1040 Just like ":grep", but instead of making a new list of
1041 errors the matches are appended to the current list.
1042 Example: >
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001043 :call setqflist([])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001044 :bufdo grepadd! something %
1045< The first command makes a new error list which is
1046 empty. The second command executes "grepadd" for each
1047 listed buffer. Note the use of ! to avoid that
1048 ":grepadd" jumps to the first error, which is not
1049 allowed with |:bufdo|.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001050 An example that uses the argument list and avoids
1051 errors for files without matches: >
1052 :silent argdo try
1053 \ | grepadd! something %
1054 \ | catch /E480:/
1055 \ | endtry"
1056<
Bram Moolenaar2c7292d2017-03-05 17:43:31 +01001057 If the encoding of the program output differs from the
1058 'encoding' option, you can use the 'makeencoding'
1059 option to specify the encoding.
1060
Bram Moolenaar9f2c6e12006-02-04 22:45:44 +00001061 *:lgrepa* *:lgrepadd*
1062:lgrepa[dd][!] [arguments]
1063 Same as ":grepadd", except the location list for the
1064 current window is used instead of the quickfix list.
1065
Bram Moolenaar86b68352004-12-27 21:59:20 +000010665.3 Setting up external grep
Bram Moolenaar071d4272004-06-13 20:20:40 +00001067
1068If you have a standard "grep" program installed, the :grep command may work
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001069well with the defaults. The syntax is very similar to the standard command: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001070
1071 :grep foo *.c
1072
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001073Will search all files with the .c extension for the substring "foo". The
Bram Moolenaar071d4272004-06-13 20:20:40 +00001074arguments to :grep are passed straight to the "grep" program, so you can use
1075whatever options your "grep" supports.
1076
1077By default, :grep invokes grep with the -n option (show file and line
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001078numbers). You can change this with the 'grepprg' option. You will need to set
Bram Moolenaar071d4272004-06-13 20:20:40 +00001079'grepprg' if:
1080
1081a) You are using a program that isn't called "grep"
1082b) You have to call grep with a full path
1083c) You want to pass other options automatically (e.g. case insensitive
1084 search.)
1085
1086Once "grep" has executed, Vim parses the results using the 'grepformat'
1087option. This option works in the same way as the 'errorformat' option - see
1088that for details. You may need to change 'grepformat' from the default if
1089your grep outputs in a non-standard format, or you are using some other
1090program with a special format.
1091
1092Once the results are parsed, Vim loads the first file containing a match and
1093jumps to the appropriate line, in the same way that it jumps to a compiler
1094error in |quickfix| mode. You can then use the |:cnext|, |:clist|, etc.
1095commands to see the other matches.
1096
1097
Bram Moolenaar86b68352004-12-27 21:59:20 +000010985.4 Using :grep with id-utils
Bram Moolenaar071d4272004-06-13 20:20:40 +00001099
1100You can set up :grep to work with the GNU id-utils like this: >
1101
1102 :set grepprg=lid\ -Rgrep\ -s
1103 :set grepformat=%f:%l:%m
1104
1105then >
1106 :grep (regexp)
1107
1108works just as you'd expect.
1109(provided you remembered to mkid first :)
1110
1111
Bram Moolenaar86b68352004-12-27 21:59:20 +000011125.5 Browsing source code with :vimgrep or :grep
Bram Moolenaar071d4272004-06-13 20:20:40 +00001113
1114Using the stack of error lists that Vim keeps, you can browse your files to
1115look for functions and the functions they call. For example, suppose that you
1116have to add an argument to the read_file() function. You enter this command: >
1117
Bram Moolenaar86b68352004-12-27 21:59:20 +00001118 :vimgrep /\<read_file\>/ *.c
Bram Moolenaar071d4272004-06-13 20:20:40 +00001119
1120You use ":cn" to go along the list of matches and add the argument. At one
1121place you have to get the new argument from a higher level function msg(), and
1122need to change that one too. Thus you use: >
1123
Bram Moolenaar86b68352004-12-27 21:59:20 +00001124 :vimgrep /\<msg\>/ *.c
Bram Moolenaar071d4272004-06-13 20:20:40 +00001125
1126While changing the msg() functions, you find another function that needs to
Bram Moolenaar86b68352004-12-27 21:59:20 +00001127get the argument from a higher level. You can again use ":vimgrep" to find
1128these functions. Once you are finished with one function, you can use >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001129
1130 :colder
1131
1132to go back to the previous one.
1133
Bram Moolenaar86b68352004-12-27 21:59:20 +00001134This works like browsing a tree: ":vimgrep" goes one level deeper, creating a
Bram Moolenaar071d4272004-06-13 20:20:40 +00001135list of branches. ":colder" goes back to the previous level. You can mix
Bram Moolenaar86b68352004-12-27 21:59:20 +00001136this use of ":vimgrep" and "colder" to browse all the locations in a tree-like
Bram Moolenaar071d4272004-06-13 20:20:40 +00001137way. If you do this consistently, you will find all locations without the
1138need to write down a "todo" list.
1139
1140=============================================================================
11416. Selecting a compiler *compiler-select*
1142
1143 *:comp* *:compiler* *E666*
1144:comp[iler][!] {name} Set options to work with compiler {name}.
1145 Without the "!" options are set for the
1146 current buffer. With "!" global options are
1147 set.
1148 If you use ":compiler foo" in "file.foo" and
1149 then ":compiler! bar" in another buffer, Vim
1150 will keep on using "foo" in "file.foo".
1151 {not available when compiled without the
1152 |+eval| feature}
1153
1154
1155The Vim plugins in the "compiler" directory will set options to use the
Bram Moolenaar25de4c22016-11-06 14:48:06 +01001156selected compiler. For `:compiler` local options are set, for `:compiler!`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001157global options.
1158 *current_compiler*
1159To support older Vim versions, the plugins always use "current_compiler" and
1160not "b:current_compiler". What the command actually does is the following:
1161
1162- Delete the "current_compiler" and "b:current_compiler" variables.
1163- Define the "CompilerSet" user command. With "!" it does ":set", without "!"
1164 it does ":setlocal".
1165- Execute ":runtime! compiler/{name}.vim". The plugins are expected to set
1166 options with "CompilerSet" and set the "current_compiler" variable to the
1167 name of the compiler.
Bram Moolenaar05159a02005-02-26 23:04:13 +00001168- Delete the "CompilerSet" user command.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001169- Set "b:current_compiler" to the value of "current_compiler".
1170- Without "!" the old value of "current_compiler" is restored.
1171
1172
1173For writing a compiler plugin, see |write-compiler-plugin|.
1174
1175
Bram Moolenaarbae0c162007-05-10 19:30:25 +00001176GCC *quickfix-gcc* *compiler-gcc*
1177
1178There's one variable you can set for the GCC compiler:
1179
1180g:compiler_gcc_ignore_unmatched_lines
1181 Ignore lines that don't match any patterns
1182 defined for GCC. Useful if output from
1183 commands run from make are generating false
1184 positives.
1185
1186
Bram Moolenaar071d4272004-06-13 20:20:40 +00001187MANX AZTEC C *quickfix-manx* *compiler-manx*
1188
1189To use Vim with Manx's Aztec C compiler on the Amiga you should do the
1190following:
1191- Set the CCEDIT environment variable with the command: >
1192 mset "CCEDIT=vim -q"
1193- Compile with the -qf option. If the compiler finds any errors, Vim is
1194 started and the cursor is positioned on the first error. The error message
1195 will be displayed on the last line. You can go to other errors with the
1196 commands mentioned above. You can fix the errors and write the file(s).
1197- If you exit Vim normally the compiler will re-compile the same file. If you
1198 exit with the :cq command, the compiler will terminate. Do this if you
1199 cannot fix the error, or if another file needs to be compiled first.
1200
1201There are some restrictions to the Quickfix mode on the Amiga. The
1202compiler only writes the first 25 errors to the errorfile (Manx's
1203documentation does not say how to get more). If you want to find the others,
1204you will have to fix a few errors and exit the editor. After recompiling,
1205up to 25 remaining errors will be found.
1206
1207If Vim was started from the compiler, the :sh and some :! commands will not
1208work, because Vim is then running in the same process as the compiler and
1209stdin (standard input) will not be interactive.
1210
1211
Bram Moolenaar8c8de832008-06-24 22:58:06 +00001212PERL *quickfix-perl* *compiler-perl*
1213
1214The Perl compiler plugin doesn't actually compile, but invokes Perl's internal
1215syntax checking feature and parses the output for possible errors so you can
1216correct them in quick-fix mode.
1217
1218Warnings are forced regardless of "no warnings" or "$^W = 0" within the file
1219being checked. To disable this set g:perl_compiler_force_warnings to a zero
1220value. For example: >
1221 let g:perl_compiler_force_warnings = 0
1222
1223
Bram Moolenaar071d4272004-06-13 20:20:40 +00001224PYUNIT COMPILER *compiler-pyunit*
1225
1226This is not actually a compiler, but a unit testing framework for the
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001227Python language. It is included into standard Python distribution
1228starting from version 2.0. For older versions, you can get it from
Bram Moolenaar071d4272004-06-13 20:20:40 +00001229http://pyunit.sourceforge.net.
1230
1231When you run your tests with the help of the framework, possible errors
1232are parsed by Vim and presented for you in quick-fix mode.
1233
1234Unfortunately, there is no standard way to run the tests.
1235The alltests.py script seems to be used quite often, that's all.
1236Useful values for the 'makeprg' options therefore are:
1237 setlocal makeprg=./alltests.py " Run a testsuite
Bram Moolenaar26df0922014-02-23 23:39:13 +01001238 setlocal makeprg=python\ %:S " Run a single testcase
Bram Moolenaar071d4272004-06-13 20:20:40 +00001239
1240Also see http://vim.sourceforge.net/tip_view.php?tip_id=280.
1241
1242
1243TEX COMPILER *compiler-tex*
1244
1245Included in the distribution compiler for TeX ($VIMRUNTIME/compiler/tex.vim)
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001246uses make command if possible. If the compiler finds a file named "Makefile"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001247or "makefile" in the current directory, it supposes that you want to process
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001248your *TeX files with make, and the makefile does the right work. In this case
1249compiler sets 'errorformat' for *TeX output and leaves 'makeprg' untouched. If
Bram Moolenaar071d4272004-06-13 20:20:40 +00001250neither "Makefile" nor "makefile" is found, the compiler will not use make.
1251You can force the compiler to ignore makefiles by defining
1252b:tex_ignore_makefile or g:tex_ignore_makefile variable (they are checked for
1253existence only).
1254
1255If the compiler chose not to use make, it need to choose a right program for
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001256processing your input. If b:tex_flavor or g:tex_flavor (in this precedence)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001257variable exists, it defines TeX flavor for :make (actually, this is the name
1258of executed command), and if both variables do not exist, it defaults to
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001259"latex". For example, while editing chapter2.tex \input-ed from mypaper.tex
Bram Moolenaar071d4272004-06-13 20:20:40 +00001260written in AMS-TeX: >
1261
1262 :let b:tex_flavor = 'amstex'
1263 :compiler tex
1264< [editing...] >
1265 :make mypaper
1266
1267Note that you must specify a name of the file to process as an argument (to
1268process the right file when editing \input-ed or \include-ed file; portable
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001269solution for substituting % for no arguments is welcome). This is not in the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001270semantics of make, where you specify a target, not source, but you may specify
1271filename without extension ".tex" and mean this as "make filename.dvi or
1272filename.pdf or filename.some_result_extension according to compiler".
1273
1274Note: tex command line syntax is set to usable both for MikTeX (suggestion
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001275by Srinath Avadhanula) and teTeX (checked by Artem Chuprina). Suggestion
Bram Moolenaar071d4272004-06-13 20:20:40 +00001276from |errorformat-LaTeX| is too complex to keep it working for different
1277shells and OSes and also does not allow to use other available TeX options,
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001278if any. If your TeX doesn't support "-interaction=nonstopmode", please
Bram Moolenaar071d4272004-06-13 20:20:40 +00001279report it with different means to express \nonstopmode from the command line.
1280
1281=============================================================================
12827. The error format *error-file-format*
1283
1284 *errorformat* *E372* *E373* *E374*
1285 *E375* *E376* *E377* *E378*
1286The 'errorformat' option specifies a list of formats that are recognized. The
1287first format that matches with an error message is used. You can add several
1288formats for different messages your compiler produces, or even entries for
1289multiple compilers. See |efm-entries|.
1290
1291Each entry in 'errorformat' is a scanf-like string that describes the format.
1292First, you need to know how scanf works. Look in the documentation of your
1293C compiler. Below you find the % items that Vim understands. Others are
1294invalid.
1295
1296Special characters in 'errorformat' are comma and backslash. See
1297|efm-entries| for how to deal with them. Note that a literal "%" is matched
1298by "%%", thus it is not escaped with a backslash.
Bram Moolenaar9d98fe92013-08-03 18:35:36 +02001299Keep in mind that in the `:make` and `:grep` output all NUL characters are
1300replaced with SOH (0x01).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001301
1302Note: By default the difference between upper and lowercase is ignored. If
1303you want to match case, add "\C" to the pattern |/\C|.
1304
1305
1306Basic items
1307
1308 %f file name (finds a string)
Bram Moolenaard76ce852018-05-01 15:02:04 +02001309 %o module name (finds a string)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001310 %l line number (finds a number)
1311 %c column number (finds a number representing character
1312 column of the error, (1 <tab> == 1 character column))
1313 %v virtual column number (finds a number representing
1314 screen column of the error (1 <tab> == 8 screen
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001315 columns))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001316 %t error type (finds a single character)
1317 %n error number (finds a number)
1318 %m error message (finds a string)
1319 %r matches the "rest" of a single-line file message %O/P/Q
Bram Moolenaarc8734422012-06-01 22:38:45 +02001320 %p pointer line (finds a sequence of '-', '.', ' ' or
1321 tabs and uses the length for the column number)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001322 %*{conv} any scanf non-assignable conversion
1323 %% the single '%' character
Bram Moolenaar2641f772005-03-25 21:58:17 +00001324 %s search text (finds a string)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001325
Bram Moolenaare344bea2005-09-01 20:46:49 +00001326The "%f" conversion may depend on the current 'isfname' setting. "~/" is
Bram Moolenaarf4630b62005-05-20 21:31:17 +00001327expanded to the home directory and environment variables are expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001328
Bram Moolenaare344bea2005-09-01 20:46:49 +00001329The "%f" and "%m" conversions have to detect the end of the string. This
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001330normally happens by matching following characters and items. When nothing is
Bram Moolenaare344bea2005-09-01 20:46:49 +00001331following the rest of the line is matched. If "%f" is followed by a '%' or a
1332backslash, it will look for a sequence of 'isfname' characters.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001333
1334On MS-DOS, MS-Windows and OS/2 a leading "C:" will be included in "%f", even
1335when using "%f:". This means that a file name which is a single alphabetical
1336letter will not be detected.
1337
1338The "%p" conversion is normally followed by a "^". It's used for compilers
1339that output a line like: >
1340 ^
1341or >
1342 ---------^
1343to indicate the column of the error. This is to be used in a multi-line error
1344message. See |errorformat-javac| for a useful example.
1345
Bram Moolenaar85eee132018-05-06 17:57:30 +02001346The "%s" conversion specifies the text to search for, to locate the error line.
Bram Moolenaar2641f772005-03-25 21:58:17 +00001347The text is used as a literal string. The anchors "^" and "$" are added to
1348the text to locate the error line exactly matching the search text and the
1349text is prefixed with the "\V" atom to make it "very nomagic". The "%s"
1350conversion can be used to locate lines without a line number in the error
1351output. Like the output of the "grep" shell command.
1352When the pattern is present the line number will not be used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001353
Bram Moolenaard76ce852018-05-01 15:02:04 +02001354The "%o" conversion specifies the module name in quickfix entry. If present
1355it will be used in quickfix error window instead of the filename. The module
1356name is used only for displaying purposes, the file name is used when jumping
1357to the file.
1358
Bram Moolenaar071d4272004-06-13 20:20:40 +00001359Changing directory
1360
1361The following uppercase conversion characters specify the type of special
Bram Moolenaara9defad2018-07-08 18:20:24 +02001362format strings. At most one of them may be given as a prefix at the beginning
Bram Moolenaar071d4272004-06-13 20:20:40 +00001363of a single comma-separated format pattern.
1364Some compilers produce messages that consist of directory names that have to
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001365be prepended to each file name read by %f (example: GNU make). The following
Bram Moolenaar071d4272004-06-13 20:20:40 +00001366codes can be used to scan these directory names; they will be stored in an
1367internal directory stack. *E379*
1368 %D "enter directory" format string; expects a following
1369 %f that finds the directory name
1370 %X "leave directory" format string; expects following %f
1371
1372When defining an "enter directory" or "leave directory" format, the "%D" or
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001373"%X" has to be given at the start of that substring. Vim tracks the directory
Bram Moolenaar071d4272004-06-13 20:20:40 +00001374changes and prepends the current directory to each erroneous file found with a
1375relative path. See |quickfix-directory-stack| for details, tips and
1376limitations.
1377
1378
1379Multi-line messages *errorformat-multi-line*
1380
1381It is possible to read the output of programs that produce multi-line
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001382messages, i.e. error strings that consume more than one line. Possible
Bram Moolenaar071d4272004-06-13 20:20:40 +00001383prefixes are:
1384 %E start of a multi-line error message
1385 %W start of a multi-line warning message
1386 %I start of a multi-line informational message
1387 %A start of a multi-line message (unspecified type)
Bram Moolenaarb3656ed2006-03-20 21:59:49 +00001388 %> for next line start with current pattern again |efm-%>|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001389 %C continuation of a multi-line message
1390 %Z end of a multi-line message
1391These can be used with '+' and '-', see |efm-ignore| below.
1392
Bram Moolenaarceaf7b82006-03-19 22:18:55 +00001393Using "\n" in the pattern won't work to match multi-line messages.
1394
Bram Moolenaar071d4272004-06-13 20:20:40 +00001395Example: Your compiler happens to write out errors in the following format
1396(leading line numbers not being part of the actual output):
1397
Bram Moolenaarceaf7b82006-03-19 22:18:55 +00001398 1 Error 275 ~
1399 2 line 42 ~
1400 3 column 3 ~
1401 4 ' ' expected after '--' ~
Bram Moolenaar071d4272004-06-13 20:20:40 +00001402
1403The appropriate error format string has to look like this: >
1404 :set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m
1405
1406And the |:clist| error message generated for this error is:
1407
1408 1:42 col 3 error 275: ' ' expected after '--'
1409
1410Another example: Think of a Python interpreter that produces the following
1411error message (line numbers are not part of the actual output):
1412
1413 1 ==============================================================
1414 2 FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest)
1415 3 --------------------------------------------------------------
1416 4 Traceback (most recent call last):
1417 5 File "unittests/dbfacadeTest.py", line 89, in testFoo
1418 6 self.assertEquals(34, dtid)
1419 7 File "/usr/lib/python2.2/unittest.py", line 286, in
1420 8 failUnlessEqual
1421 9 raise self.failureException, \
1422 10 AssertionError: 34 != 33
1423 11
1424 12 --------------------------------------------------------------
1425 13 Ran 27 tests in 0.063s
1426
1427Say you want |:clist| write the relevant information of this message only,
1428namely:
1429 5 unittests/dbfacadeTest.py:89: AssertionError: 34 != 33
1430
1431Then the error format string could be defined as follows: >
1432 :set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
1433
1434Note that the %C string is given before the %A here: since the expression
1435' %.%#' (which stands for the regular expression ' .*') matches every line
1436starting with a space, followed by any characters to the end of the line,
1437it also hides line 7 which would trigger a separate error message otherwise.
1438Error format strings are always parsed pattern by pattern until the first
1439match occurs.
Bram Moolenaarb3656ed2006-03-20 21:59:49 +00001440 *efm-%>*
1441The %> item can be used to avoid trying patterns that appear earlier in
1442'errorformat'. This is useful for patterns that match just about anything.
1443For example, if the error looks like this:
1444
1445 Error in line 123 of foo.c: ~
1446 unknown variable "i" ~
1447
1448This can be found with: >
1449 :set efm=xxx,%E%>Error in line %l of %f:,%Z%m
1450Where "xxx" has a pattern that would also match the second line.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001451
Bram Moolenaarceaf7b82006-03-19 22:18:55 +00001452Important: There is no memory of what part of the errorformat matched before;
1453every line in the error file gets a complete new run through the error format
1454lines. For example, if one has: >
1455 setlocal efm=aa,bb,cc,dd,ee
1456Where aa, bb, etc. are error format strings. Each line of the error file will
1457be matched to the pattern aa, then bb, then cc, etc. Just because cc matched
1458the previous error line does _not_ mean that dd will be tried first on the
1459current line, even if cc and dd are multi-line errorformat strings.
1460
1461
Bram Moolenaar071d4272004-06-13 20:20:40 +00001462
1463Separate file name *errorformat-separate-filename*
1464
1465These prefixes are useful if the file name is given once and multiple messages
1466follow that refer to this file name.
1467 %O single-line file message: overread the matched part
1468 %P single-line file message: push file %f onto the stack
1469 %Q single-line file message: pop the last file from stack
1470
1471Example: Given a compiler that produces the following error logfile (without
1472leading line numbers):
1473
1474 1 [a1.tt]
1475 2 (1,17) error: ';' missing
1476 3 (21,2) warning: variable 'z' not defined
1477 4 (67,3) error: end of file found before string ended
1478 5
1479 6 [a2.tt]
1480 7
1481 8 [a3.tt]
1482 9 NEW compiler v1.1
1483 10 (2,2) warning: variable 'x' not defined
1484 11 (67,3) warning: 's' already defined
1485
1486This logfile lists several messages for each file enclosed in [...] which are
1487properly parsed by an error format like this: >
1488 :set efm=%+P[%f],(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%-Q
1489
1490A call of |:clist| writes them accordingly with their correct filenames:
1491
1492 2 a1.tt:1 col 17 error: ';' missing
1493 3 a1.tt:21 col 2 warning: variable 'z' not defined
1494 4 a1.tt:67 col 3 error: end of file found before string ended
1495 8 a3.tt:2 col 2 warning: variable 'x' not defined
1496 9 a3.tt:67 col 3 warning: 's' already defined
1497
1498Unlike the other prefixes that all match against whole lines, %P, %Q and %O
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001499can be used to match several patterns in the same line. Thus it is possible
Bram Moolenaar071d4272004-06-13 20:20:40 +00001500to parse even nested files like in the following line:
1501 {"file1" {"file2" error1} error2 {"file3" error3 {"file4" error4 error5}}}
1502The %O then parses over strings that do not contain any push/pop file name
1503information. See |errorformat-LaTeX| for an extended example.
1504
1505
1506Ignoring and using whole messages *efm-ignore*
1507
1508The codes '+' or '-' can be combined with the uppercase codes above; in that
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001509case they have to precede the letter, e.g. '%+A' or '%-G':
Bram Moolenaar071d4272004-06-13 20:20:40 +00001510 %- do not include the matching multi-line in any output
1511 %+ include the whole matching line in the %m error string
1512
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001513One prefix is only useful in combination with '+' or '-', namely %G. It parses
Bram Moolenaar071d4272004-06-13 20:20:40 +00001514over lines containing general information like compiler version strings or
1515other headers that can be skipped.
1516 %-G ignore this message
1517 %+G general message
1518
1519
1520Pattern matching
1521
1522The scanf()-like "%*[]" notation is supported for backward-compatibility
1523with previous versions of Vim. However, it is also possible to specify
1524(nearly) any Vim supported regular expression in format strings.
1525Since meta characters of the regular expression language can be part of
1526ordinary matching strings or file names (and therefore internally have to
1527be escaped), meta symbols have to be written with leading '%':
Bram Moolenaarceaf7b82006-03-19 22:18:55 +00001528 %\ The single '\' character. Note that this has to be
Bram Moolenaar071d4272004-06-13 20:20:40 +00001529 escaped ("%\\") in ":set errorformat=" definitions.
Bram Moolenaarceaf7b82006-03-19 22:18:55 +00001530 %. The single '.' character.
1531 %# The single '*'(!) character.
1532 %^ The single '^' character. Note that this is not
1533 useful, the pattern already matches start of line.
1534 %$ The single '$' character. Note that this is not
1535 useful, the pattern already matches end of line.
1536 %[ The single '[' character for a [] character range.
1537 %~ The single '~' character.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001538When using character classes in expressions (see |/\i| for an overview),
1539terms containing the "\+" quantifier can be written in the scanf() "%*"
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001540notation. Example: "%\\d%\\+" ("\d\+", "any number") is equivalent to "%*\\d".
Bram Moolenaar071d4272004-06-13 20:20:40 +00001541Important note: The \(...\) grouping of sub-matches can not be used in format
1542specifications because it is reserved for internal conversions.
1543
1544
1545Multiple entries in 'errorformat' *efm-entries*
1546
1547To be able to detect output from several compilers, several format patterns
1548may be put in 'errorformat', separated by commas (note: blanks after the comma
1549are ignored). The first pattern that has a complete match is used. If no
1550match is found, matching parts from the last one will be used, although the
1551file name is removed and the error message is set to the whole message. If
1552there is a pattern that may match output from several compilers (but not in a
1553right way), put it after one that is more restrictive.
1554
1555To include a comma in a pattern precede it with a backslash (you have to type
1556two in a ":set" command). To include a backslash itself give two backslashes
1557(you have to type four in a ":set" command). You also need to put a backslash
1558before a space for ":set".
1559
1560
1561Valid matches *quickfix-valid*
1562
1563If a line does not completely match one of the entries in 'errorformat', the
1564whole line is put in the error message and the entry is marked "not valid"
1565These lines are skipped with the ":cn" and ":cp" commands (unless there is
1566no valid line at all). You can use ":cl!" to display all the error messages.
1567
1568If the error format does not contain a file name Vim cannot switch to the
1569correct file. You will have to do this by hand.
1570
1571
1572Examples
1573
1574The format of the file from the Amiga Aztec compiler is:
1575
1576 filename>linenumber:columnnumber:errortype:errornumber:errormessage
1577
1578 filename name of the file in which the error was detected
1579 linenumber line number where the error was detected
1580 columnnumber column number where the error was detected
1581 errortype type of the error, normally a single 'E' or 'W'
1582 errornumber number of the error (for lookup in the manual)
1583 errormessage description of the error
1584
1585This can be matched with this 'errorformat' entry:
1586 %f>%l:%c:%t:%n:%m
1587
1588Some examples for C compilers that produce single-line error outputs:
1589%f:%l:\ %t%*[^0123456789]%n:\ %m for Manx/Aztec C error messages
1590 (scanf() doesn't understand [0-9])
1591%f\ %l\ %t%*[^0-9]%n:\ %m for SAS C
1592\"%f\"\\,%*[^0-9]%l:\ %m for generic C compilers
1593%f:%l:\ %m for GCC
1594%f:%l:\ %m,%Dgmake[%*\\d]:\ Entering\ directory\ `%f',
1595%Dgmake[%*\\d]:\ Leaving\ directory\ `%f'
1596 for GCC with gmake (concat the lines!)
1597%f(%l)\ :\ %*[^:]:\ %m old SCO C compiler (pre-OS5)
1598%f(%l)\ :\ %t%*[^0-9]%n:\ %m idem, with error type and number
1599%f:%l:\ %m,In\ file\ included\ from\ %f:%l:,\^I\^Ifrom\ %f:%l%m
1600 for GCC, with some extras
1601
1602Extended examples for the handling of multi-line messages are given below,
1603see |errorformat-Jikes| and |errorformat-LaTeX|.
1604
1605Note the backslash in front of a space and double quote. It is required for
1606the :set command. There are two backslashes in front of a comma, one for the
1607:set command and one to avoid recognizing the comma as a separator of error
1608formats.
1609
1610
1611Filtering messages
1612
1613If you have a compiler that produces error messages that do not fit in the
1614format string, you could write a program that translates the error messages
1615into this format. You can use this program with the ":make" command by
1616changing the 'makeprg' option. For example: >
1617 :set mp=make\ \\\|&\ error_filter
1618The backslashes before the pipe character are required to avoid it to be
1619recognized as a command separator. The backslash before each space is
1620required for the set command.
1621
Bram Moolenaar5b69c222019-01-11 14:50:06 +01001622 *cfilter-plugin* *:Cfilter* *:Lfilter*
Bram Moolenaar8c5e0092018-08-21 19:22:23 +02001623If you have too many matching messages, you can use the cfilter plugin to
1624reduce the number of entries. Load the plugin with: >
1625 packadd cfilter
1626
1627Then you can use these command: >
Bram Moolenaarfc65cab2018-08-28 22:58:02 +02001628 :Cfilter[!] /{pat}/
1629 :Lfilter[!] /{pat}/
Bram Moolenaar8c5e0092018-08-21 19:22:23 +02001630
1631:Cfilter creates a new quickfix list from entries matching {pat} in the
1632current quickfix list. Both the file name and the text of the entries are
1633matched against {pat}. If ! is supplied, then entries not matching {pat} are
1634used.
1635
1636:Lfilter does the same as :Cfilter but operates on the current location list.
1637
Bram Moolenaar071d4272004-06-13 20:20:40 +00001638=============================================================================
16398. The directory stack *quickfix-directory-stack*
1640
1641Quickfix maintains a stack for saving all used directories parsed from the
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001642make output. For GNU-make this is rather simple, as it always prints the
1643absolute path of all directories it enters and leaves. Regardless if this is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001644done via a 'cd' command in the makefile or with the parameter "-C dir" (change
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001645to directory before reading the makefile). It may be useful to use the switch
Bram Moolenaar071d4272004-06-13 20:20:40 +00001646"-w" to force GNU-make to print out the working directory before and after
1647processing.
1648
1649Maintaining the correct directory is more complicated if you don't use
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001650GNU-make. AIX-make for example doesn't print any information about its
1651working directory. Then you need to enhance the makefile. In the makefile of
1652LessTif there is a command which echoes "Making {target} in {dir}". The
Bram Moolenaar6dfc28b2010-02-11 14:19:15 +01001653special problem here is that it doesn't print information on leaving the
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001654directory and that it doesn't print the absolute path.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001655
1656To solve the problem with relative paths and missing "leave directory"
1657messages Vim uses following algorithm:
1658
16591) Check if the given directory is a subdirectory of the current directory.
1660 If this is true, store it as the current directory.
16612) If it is not a subdir of the current directory, try if this is a
1662 subdirectory of one of the upper directories.
16633) If the directory still isn't found, it is assumed to be a subdirectory
1664 of Vim's current directory.
1665
1666Additionally it is checked for every file, if it really exists in the
1667identified directory. If not, it is searched in all other directories of the
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001668directory stack (NOT the directory subtree!). If it is still not found, it is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001669assumed that it is in Vim's current directory.
1670
Bram Moolenaare667c952010-07-05 22:57:59 +02001671There are limitations in this algorithm. These examples assume that make just
Bram Moolenaar071d4272004-06-13 20:20:40 +00001672prints information about entering a directory in the form "Making all in dir".
1673
16741) Assume you have following directories and files:
1675 ./dir1
1676 ./dir1/file1.c
1677 ./file1.c
1678
1679 If make processes the directory "./dir1" before the current directory and
1680 there is an error in the file "./file1.c", you will end up with the file
1681 "./dir1/file.c" loaded by Vim.
1682
1683 This can only be solved with a "leave directory" message.
1684
16852) Assume you have following directories and files:
1686 ./dir1
1687 ./dir1/dir2
1688 ./dir2
1689
1690 You get the following:
1691
1692 Make output Directory interpreted by Vim
1693 ------------------------ ----------------------------
1694 Making all in dir1 ./dir1
1695 Making all in dir2 ./dir1/dir2
1696 Making all in dir2 ./dir1/dir2
1697
1698 This can be solved by printing absolute directories in the "enter directory"
Bram Moolenaar214641f2017-03-05 17:04:09 +01001699 message or by printing "leave directory" messages.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001700
Bram Moolenaar06b5d512010-05-22 15:37:44 +02001701To avoid this problem, ensure to print absolute directory names and "leave
Bram Moolenaar071d4272004-06-13 20:20:40 +00001702directory" messages.
1703
1704Examples for Makefiles:
1705
1706Unix:
1707 libs:
1708 for dn in $(LIBDIRS); do \
1709 (cd $$dn; echo "Entering dir '$$(pwd)'"; make); \
1710 echo "Leaving dir"; \
1711 done
1712
1713Add
1714 %DEntering\ dir\ '%f',%XLeaving\ dir
1715to your 'errorformat' to handle the above output.
1716
1717Note that Vim doesn't check if the directory name in a "leave directory"
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001718messages is the current directory. This is why you could just use the message
Bram Moolenaar071d4272004-06-13 20:20:40 +00001719"Leaving dir".
1720
1721=============================================================================
17229. Specific error file formats *errorformats*
1723
1724 *errorformat-Jikes*
1725Jikes(TM), a source-to-bytecode Java compiler published by IBM Research,
1726produces simple multi-line error messages.
1727
1728An 'errorformat' string matching the produced messages is shown below.
1729The following lines can be placed in the user's |vimrc| to overwrite Vim's
1730recognized default formats, or see |:set+=| how to install this format
1731additionally to the default. >
1732
1733 :set efm=%A%f:%l:%c:%*\\d:%*\\d:,
1734 \%C%*\\s%trror:%m,
1735 \%+C%*[^:]%trror:%m,
1736 \%C%*\\s%tarning:%m,
1737 \%C%m
1738<
1739Jikes(TM) produces a single-line error message when invoked with the option
1740"+E", and can be matched with the following: >
1741
Bram Moolenaar6b803a72007-05-06 14:25:46 +00001742 :setl efm=%f:%l:%v:%*\\d:%*\\d:%*\\s%m
Bram Moolenaar071d4272004-06-13 20:20:40 +00001743<
1744 *errorformat-javac*
1745This 'errorformat' has been reported to work well for javac, which outputs a
1746line with "^" to indicate the column of the error: >
Bram Moolenaar6b803a72007-05-06 14:25:46 +00001747 :setl efm=%A%f:%l:\ %m,%-Z%p^,%-C%.%#
Bram Moolenaar071d4272004-06-13 20:20:40 +00001748or: >
Bram Moolenaar6b803a72007-05-06 14:25:46 +00001749 :setl efm=%A%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#
Bram Moolenaar071d4272004-06-13 20:20:40 +00001750<
Bram Moolenaar6b803a72007-05-06 14:25:46 +00001751Here is an alternative from Michael F. Lamb for Unix that filters the errors
1752first: >
1753 :setl errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%#
Bram Moolenaar26df0922014-02-23 23:39:13 +01001754 :setl makeprg=javac\ %:S\ 2>&1\ \\\|\ vim-javac-filter
Bram Moolenaar6b803a72007-05-06 14:25:46 +00001755
1756You need to put the following in "vim-javac-filter" somewhere in your path
1757(e.g., in ~/bin) and make it executable: >
1758 #!/bin/sed -f
1759 /\^$/s/\t/\ /g;/:[0-9]\+:/{h;d};/^[ \t]*\^/G;
1760
1761In English, that sed script:
1762- Changes single tabs to single spaces and
1763- Moves the line with the filename, line number, error message to just after
1764 the pointer line. That way, the unused error text between doesn't break
1765 vim's notion of a "multi-line message" and also doesn't force us to include
1766 it as a "continuation of a multi-line message."
1767
Bram Moolenaar071d4272004-06-13 20:20:40 +00001768 *errorformat-ant*
1769For ant (http://jakarta.apache.org/) the above errorformat has to be modified
1770to honour the leading [javac] in front of each javac output line: >
1771 :set efm=%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#
1772
1773The 'errorformat' can also be configured to handle ant together with either
1774javac or jikes. If you're using jikes, you should tell ant to use jikes' +E
1775command line switch which forces jikes to generate one-line error messages.
1776This is what the second line (of a build.xml file) below does: >
1777 <property name = "build.compiler" value = "jikes"/>
1778 <property name = "build.compiler.emacs" value = "true"/>
1779
1780The 'errorformat' which handles ant with both javac and jikes is: >
1781 :set efm=\ %#[javac]\ %#%f:%l:%c:%*\\d:%*\\d:\ %t%[%^:]%#:%m,
1782 \%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#
1783<
1784 *errorformat-jade*
1785parsing jade (see http://www.jclark.com/) errors is simple: >
1786 :set efm=jade:%f:%l:%c:%t:%m
1787<
1788 *errorformat-LaTeX*
1789The following is an example how an 'errorformat' string can be specified
1790for the (La)TeX typesetting system which displays error messages over
1791multiple lines. The output of ":clist" and ":cc" etc. commands displays
1792multi-lines in a single line, leading white space is removed.
1793It should be easy to adopt the above LaTeX errorformat to any compiler output
1794consisting of multi-line errors.
1795
1796The commands can be placed in a |vimrc| file or some other Vim script file,
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001797e.g. a script containing LaTeX related stuff which is loaded only when editing
Bram Moolenaar071d4272004-06-13 20:20:40 +00001798LaTeX sources.
1799Make sure to copy all lines of the example (in the given order), afterwards
1800remove the comment lines. For the '\' notation at the start of some lines see
1801|line-continuation|.
1802
1803 First prepare 'makeprg' such that LaTeX will report multiple
1804 errors; do not stop when the first error has occurred: >
1805 :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
1806<
1807 Start of multi-line error messages: >
1808 :set efm=%E!\ LaTeX\ %trror:\ %m,
1809 \%E!\ %m,
1810< Start of multi-line warning messages; the first two also
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001811 include the line number. Meaning of some regular expressions:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001812 - "%.%#" (".*") matches a (possibly empty) string
1813 - "%*\\d" ("\d\+") matches a number >
1814 \%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#,
1815 \%+W%.%#\ at\ lines\ %l--%*\\d,
1816 \%WLaTeX\ %.%#Warning:\ %m,
1817< Possible continuations of error/warning messages; the first
1818 one also includes the line number: >
1819 \%Cl.%l\ %m,
1820 \%+C\ \ %m.,
1821 \%+C%.%#-%.%#,
1822 \%+C%.%#[]%.%#,
1823 \%+C[]%.%#,
1824 \%+C%.%#%[{}\\]%.%#,
1825 \%+C<%.%#>%.%#,
1826 \%C\ \ %m,
1827< Lines that match the following patterns do not contain any
1828 important information; do not include them in messages: >
1829 \%-GSee\ the\ LaTeX%m,
1830 \%-GType\ \ H\ <return>%m,
1831 \%-G\ ...%.%#,
1832 \%-G%.%#\ (C)\ %.%#,
1833 \%-G(see\ the\ transcript%.%#),
1834< Generally exclude any empty or whitespace-only line from
1835 being displayed: >
1836 \%-G\\s%#,
1837< The LaTeX output log does not specify the names of erroneous
1838 source files per line; rather they are given globally,
1839 enclosed in parentheses.
1840 The following patterns try to match these names and store
1841 them in an internal stack. The patterns possibly scan over
1842 the same input line (one after another), the trailing "%r"
1843 conversion indicates the "rest" of the line that will be
1844 parsed in the next go until the end of line is reached.
1845
1846 Overread a file name enclosed in '('...')'; do not push it
1847 on a stack since the file apparently does not contain any
1848 error: >
1849 \%+O(%f)%r,
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001850< Push a file name onto the stack. The name is given after '(': >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001851 \%+P(%f%r,
1852 \%+P\ %\\=(%f%r,
1853 \%+P%*[^()](%f%r,
1854 \%+P[%\\d%[^()]%#(%f%r,
1855< Pop the last stored file name when a ')' is scanned: >
1856 \%+Q)%r,
1857 \%+Q%*[^()])%r,
1858 \%+Q[%\\d%*[^()])%r
1859
1860Note that in some cases file names in the LaTeX output log cannot be parsed
1861properly. The parser might have been messed up by unbalanced parentheses
1862then. The above example tries to catch the most relevant cases only.
1863You can customize the given setting to suit your own purposes, for example,
1864all the annoying "Overfull ..." warnings could be excluded from being
1865recognized as an error.
1866Alternatively to filtering the LaTeX compiler output, it is also possible
1867to directly read the *.log file that is produced by the [La]TeX compiler.
1868This contains even more useful information about possible error causes.
1869However, to properly parse such a complex file, an external filter should
1870be used. See the description further above how to make such a filter known
1871by Vim.
1872
1873 *errorformat-Perl*
1874In $VIMRUNTIME/tools you can find the efm_perl.pl script, which filters Perl
1875error messages into a format that quickfix mode will understand. See the
Bram Moolenaar8c8de832008-06-24 22:58:06 +00001876start of the file about how to use it. (This script is deprecated, see
1877|compiler-perl|.)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001878
1879
1880
Bram Moolenaar91f84f62018-07-29 15:07:52 +02001881 vim:tw=78:ts=8:noet:ft=help:norl: