blob: efec7966cecfd444a3b2f1624384e53de45a24fe [file] [log] [blame]
Bram Moolenaardcaf10e2005-01-21 11:55:25 +00001*quickfix.txt* For Vim version 7.0aa. Last change: 2005 Jan 20
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
33If you are using Manx's Aztec C compiler on the Amiga look here for how to use
34it with Vim: |quickfix-manx|. If you are using another compiler you should
35save the error messages in a file and start Vim with "vim -q filename". An
36easy way to do this is with the |:make| command (see below). The
37'errorformat' option should be set to match the error messages from your
38compiler (see |errorformat| below).
39
40The following quickfix commands can be used:
41
42 *:cc*
43:cc[!] [nr] Display error [nr]. If [nr] is omitted, the same
44 error is displayed again. Without [!] this doesn't
45 work when jumping to another buffer, the current buffer
46 has been changed, there is the only window for the
47 buffer and both 'hidden' and 'autowrite' are off.
48 When jumping to another buffer with [!] any changes to
49 the current buffer are lost, unless 'hidden' is set or
50 there is another window for this buffer.
51 The 'switchbuf' settings are respected when jumping
52 to a buffer.
53
54 *:cn* *:cnext* *E553*
55:[count]cn[ext][!] Display the [count] next error in the list that
56 includes a file name. If there are no file names at
57 all, go to the [count] next error. See |:cc| for
58 [!] and 'switchbuf'.
59
60:[count]cN[ext][!] *:cp* *:cprevious* *:cN* *:cNext*
61:[count]cp[revious][!] Display the [count] previous error in the list that
62 includes a file name. If there are no file names at
63 all, go to the [count] previous error. See |:cc| for
64 [!] and 'switchbuf'.
65
66 *:cnf* *:cnfile*
67:[count]cnf[ile][!] Display the first error in the [count] next file in
68 the list that includes a file name. If there are no
69 file names at all or if there is no next file, go to
70 the [count] next error. See |:cc| for [!] and
71 'switchbuf'.
72
73:[count]cNf[ile][!] *:cpf* *:cpfile* *:cNf* *:cNfile*
74:[count]cpf[ile][!] Display the last error in the [count] previous file in
75 the list that includes a file name. If there are no
76 file names at all or if there is no next file, go to
77 the [count] previous error. See |:cc| for [!] and
78 'switchbuf'.
79
80 *:crewind* *:cr*
81:cr[ewind][!] [nr] Display error [nr]. If [nr] is omitted, the FIRST
82 error is displayed. See |:cc|.
83
84 *:cfirst* *:cfir*
85:cfir[st][!] [nr] Same as ":crewind".
86
87 *:clast* *:cla*
88:cla[st][!] [nr] Display error [nr]. If [nr] is omitted, the LAST
89 error is displayed. See |:cc|.
90
91 *:cq* *:cquit*
92:cq[uit] Quit Vim with an error code, so that the compiler
93 will not compile the same file again.
94
95 *:cf* *:cfile*
96:cf[ile][!] [errorfile] Read the error file and jump to the first error.
97 This is done automatically when Vim is started with
98 the -q option. You can use this command when you
99 keep Vim running while compiling. If you give the
100 name of the errorfile, the 'errorfile' option will
101 be set to [errorfile]. See |:cc| for [!].
102
103 *:cg* *:cgetfile*
104:cg[etfile][!] [errorfile]
105 Read the error file. Just like ":cfile" but don't
106 jump to the first error.
107
Bram Moolenaar86b68352004-12-27 21:59:20 +0000108 *:cb* *:cbuffer* *E681*
109:cb[uffer] [bufnr] Read the error list from the current buffer.
110 When [bufnr] is given it must be the number of a
111 loaded buffer. That buffer will then be used instead
112 of the current buffer.
113 A range can be specified for the lines to be used.
114 Otherwise all lines in the buffer are used.
115
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116 *:cl* *:clist*
117:cl[ist] [from] [, [to]]
118 List all errors that are valid |quickfix-valid|.
119 If numbers [from] and/or [to] are given, the respective
120 range of errors is listed. A negative number counts
121 from the last error backwards, -1 being the last error.
122 The 'switchbuf' settings are respected when jumping
123 to a buffer.
124
125:cl[ist]! [from] [, [to]]
126 List all errors.
127
128If you insert or delete lines, mostly the correct error location is still
129found because hidden marks are used. Sometimes, when the mark has been
130deleted for some reason, the message "line changed" is shown to warn you that
131the error location may not be correct. If you quit Vim and start again the
132marks are lost and the error locations may not be correct anymore.
133
134=============================================================================
1352. The error window *quickfix-window*
136
137 *:cope* *:copen*
138:cope[n] [height] Open a window to show the current list of errors.
139 When [height] is given, the window becomes that high
140 (if there is room). Otherwise the window is made ten
141 lines high.
142 The window will contain a special buffer, with
143 'buftype' equal to "quickfix". Don't change this!
144 If there already is a quickfix window, it will be made
145 the current window. It is not possible to open a
146 second quickfix window.
147
148 *:ccl* *:cclose*
149:ccl[ose] Close the quickfix window.
150
151 *:cw* *:cwindow*
152:cw[indow] [height] Open the quickfix window when there are recognized
153 errors. If the window is already open and there are
154 no recognized errors, close the window.
155
156
157Normally the quickfix window is at the bottom of the screen. If there are
158vertical splits, it's at the bottom of the rightmost column of windows. To
159make it always occupy the full width: >
160 :botright cwindow
161You can move the window around with |window-moving| commands.
162For example, to move it to the top: CTRL-W K
163The 'winfixheight' option will be set, which means that the window will mostly
164keep its height, ignoring 'winheight' and 'equalalways'. You can change the
165height manually (e.g., by dragging the status line above it with the mouse).
166
167In the quickfix window, each line is one error. The line number is equal to
168the error number. You can use ":.cc" to jump to the error under the cursor.
169Hitting the <CR> key or double-clicking the mouse on a line has the same
170effect. The file containing the error is opened in the window above the
171quickfix window. If there already is a window for that file, it is used
172instead. If the buffer in the used window has changed, and the error is in
173another file, jumping to the error will fail. You will first have to make
174sure the window contains a buffer which can be abandoned.
175
176When the quickfix window has been filled, two autocommand events are
177triggered. First the 'filetype' option is set to "qf", which triggers the
178FileType event. Then the BufReadPost event is triggered. This can be used to
179perform some action on the listed errors. Example: >
180 au BufReadPost quickfix setlocal nomodifiable
181 \ | silent g/^/s//\=line(".")." "/
182 \ | setlocal modifiable
183This prepends the line number to each line. Note the use of "\=" in the
184substitute string of the ":s" command, which is used to evaluate an
185expression.
186
187Note: Making changes in the quickfix window has no effect on the list of
188errors. 'modifiable' is off to avoid making changes. If you delete or insert
189lines anyway, the relation between the text and the error number is messed up.
190If you really want to do this, you could write the contents of the quickfix
191window to a file and use ":cfile" to have it parsed and used as the new error
192list.
193
194=============================================================================
1953. Using more than one list of errors *quickfix-error-lists*
196
197So far has been assumed that there is only one list of errors. Actually the
198ten last used lists are remembered. When starting a new list, the previous
199ones are automatically kept. Two commands can be used to access older error
200lists. They set one of the existing error lists as the current one.
201
202 *:colder* *:col* *E380*
203:col[der] [count] Go to older error list. When [count] is given, do
204 this [count] times. When already at the oldest error
205 list, an error message is given.
206
207 *:cnewer* *:cnew* *E381*
208:cnew[er] [count] Go to newer error list. When [count] is given, do
209 this [count] times. When already at the newest error
210 list, an error message is given.
211
212When adding a new error list, it becomes the current list.
213
214When ":colder" has been used and ":make" or ":grep" is used to add a new error
215list, one newer list is overwritten. This is especially useful if you are
216browsing with ":grep" |grep|. If you want to keep the more recent error
217lists, use ":cnewer 99" first.
218
219=============================================================================
2204. Using :make *:make_makeprg*
221
222 *:mak* *:make*
223:mak[e][!] [arguments] 1. If the 'autowrite' option is on, write any changed
224 buffers
225 2. An errorfile name is made from 'makeef'. If
226 'makeef' doesn't contain "##", and a file with this
227 name already exists, it is deleted.
228 3. The program given with the 'makeprg' option is
229 started (default "make") with the optional
230 [arguments] and the output is saved in the
231 errorfile (for Unix it is also echoed on the
232 screen).
233 4. The errorfile is read using 'errorformat'.
234 5. If [!] is not given the first error is jumped to.
235 6. The errorfile is deleted.
236 7. You can now move through the errors with commands
237 like |:cnext| and |:cprevious|, see above.
238 This command does not accept a comment, any "
239 characters are considered part of the arguments.
240
241The ":make" command executes the command given with the 'makeprg' option.
242This is done by passing the command to the shell given with the 'shell'
243option. This works almost like typing
244
245 ":!{makeprg} [arguments] {shellpipe} {errorfile}".
246
247{makeprg} is the string given with the 'makeprg' option. Any command can be
248used, not just "make". Characters '%' and '#' are expanded as usual on a
249command-line. You can use "%<" to insert the current file name without
250extension, or "#<" to insert the alternate file name without extension, for
251example: >
252 :set makeprg=make\ #<.o
253
254[arguments] is anything that is typed after ":make".
255{shellpipe} is the 'shellpipe' option.
256{errorfile} is the 'makeef' option, with ## replaced to make it unique.
257
258The placeholder "$*" can be used for the argument list in {makeprog} if the
259command needs some additional characters after its arguments. The $* is
260replaced then by all arguments. Example: >
261 :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
262or simpler >
263 :let &mp = 'latex \\nonstopmode \\input\{$*}'
264"$*" can be given multiple times, for example: >
265 :set makeprg=gcc\ -o\ $*\ $*
266
267The 'shellpipe' option defaults to ">" for the Amiga, MS-DOS and Win32. This
268means that the output of the compiler is saved in a file and not shown on the
269screen directly. For Unix "| tee" is used. The compiler output is shown on
270the screen and saved in a file the same time. Depending on the shell used
271"|& tee" or "2>&1| tee" is the default, so stderr output will be included.
272
273If 'shellpipe' is empty, the {errorfile} part will be omitted. This is useful
274for compilers that write to an errorfile themselves (e.g., Manx's Amiga C).
275
276==============================================================================
Bram Moolenaar86b68352004-12-27 21:59:20 +00002775. Using :vimgrep and :grep *grep* *lid*
278
279Vim has two ways to find matches for a pattern: Internal and external. The
280advantage of the internal grep is that it works on all systems and uses the
281powerful Vim search patterns. An external grep program can be used when the
282Vim grep does not do what you want.
283
Bram Moolenaar8fc061c2004-12-29 21:03:02 +0000284The internal method will be slower, because files are read into memory. The
285advantages are:
286- Line separators and encoding are automatically recognized, as if a file is
287 being edited.
288- Uses Vim search patterns. Multi-line patterns can be used.
289- When plugins are enabled: compressed and remote files can be searched.
290 |gzip| |netrw|
Bram Moolenaardcaf10e2005-01-21 11:55:25 +0000291- When 'hidden' is set the files are kept loaded, thus repeating a search is
292 much faster. Uses a lot of memory though!
Bram Moolenaar86b68352004-12-27 21:59:20 +0000293
294
2955.1 using Vim's internal grep
296
Bram Moolenaare49b69a2005-01-08 16:11:57 +0000297 *:vim* *:vimgrep* *E682* *E683*
Bram Moolenaar86b68352004-12-27 21:59:20 +0000298:vim[grep][!] /{pattern}/ {file} ...
299 Search for {pattern} in the files {file} ... and set
300 the error list to the matches.
301 {pattern} if a Vim search pattern. Instead of
Bram Moolenaar8fc061c2004-12-29 21:03:02 +0000302 enclosing it in / any non-ID character |'isident'|
303 can be used, so long as it does not appear in
304 {pattern}.
Bram Moolenaar31c67ef2005-01-11 21:34:41 +0000305 'ignorecase' applies. To overrule it use |/\c| to
306 ignore case or |/\C| to match case. 'smartcase' is
307 not used.
Bram Moolenaardcaf10e2005-01-21 11:55:25 +0000308 Every second or so the searched file name is displayed
309 to give you an idea of the progress made.
Bram Moolenaar8fc061c2004-12-29 21:03:02 +0000310 Examples: >
311 :vimgrep /an error/ *.c
312 :vimgrep /\<FileName\>/ *.h include/*
Bram Moolenaar86b68352004-12-27 21:59:20 +0000313
Bram Moolenaar8fc061c2004-12-29 21:03:02 +0000314:vim[grep][!] {pattern} {file} ...
315 Like above, but instead of enclosing the pattern in a
316 non-ID character use a white-separated pattern. The
317 pattern must start with an ID character.
318 Example: >
319 :vimgrep Error *.c
320<
Bram Moolenaar86b68352004-12-27 21:59:20 +0000321 *:vimgrepa* *:vimgrepadd*
Bram Moolenaar8fc061c2004-12-29 21:03:02 +0000322:vimgrepa[dd][!] [/]{pattern}[/] {file} ...
Bram Moolenaar86b68352004-12-27 21:59:20 +0000323 Just like ":vimgrep", but instead of making a new list
324 of errors the matches are appended to the current
325 list.
326
327
3285.2 External grep
Bram Moolenaar071d4272004-06-13 20:20:40 +0000329
330Vim can interface with "grep" and grep-like programs (such as the GNU
331id-utils) in a similar way to its compiler integration (see |:make| above).
332
333[Unix trivia: The name for the Unix "grep" command comes from ":g/re/p", where
334"re" stands for Regular Expression.]
335
336 *:gr* *:grep*
337:gr[ep][!] [arguments] Just like ":make", but use 'grepprg' instead of
338 'makeprg' and 'grepformat' instead of 'errorformat'.
Bram Moolenaar86b68352004-12-27 21:59:20 +0000339 When 'grepprg' is "internal" this works like
340 |:vimgrep|. Note that the pattern needs to be
341 enclosed in separator characters then.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342 *:grepa* *:grepadd*
343:grepa[dd][!] [arguments]
344 Just like ":grep", but instead of making a new list of
345 errors the matches are appended to the current list.
346 Example: >
347 :grep nothing %
348 :bufdo grepadd! something %
349< The first command makes a new error list which is
350 empty. The second command executes "grepadd" for each
351 listed buffer. Note the use of ! to avoid that
352 ":grepadd" jumps to the first error, which is not
353 allowed with |:bufdo|.
354
Bram Moolenaar86b68352004-12-27 21:59:20 +00003555.3 Setting up external grep
Bram Moolenaar071d4272004-06-13 20:20:40 +0000356
357If you have a standard "grep" program installed, the :grep command may work
358well with the defaults. The syntax is very similar to the standard command: >
359
360 :grep foo *.c
361
362Will search all files with the .c extension for the substring "foo". The
363arguments to :grep are passed straight to the "grep" program, so you can use
364whatever options your "grep" supports.
365
366By default, :grep invokes grep with the -n option (show file and line
367numbers). You can change this with the 'grepprg' option. You will need to set
368'grepprg' if:
369
370a) You are using a program that isn't called "grep"
371b) You have to call grep with a full path
372c) You want to pass other options automatically (e.g. case insensitive
373 search.)
374
375Once "grep" has executed, Vim parses the results using the 'grepformat'
376option. This option works in the same way as the 'errorformat' option - see
377that for details. You may need to change 'grepformat' from the default if
378your grep outputs in a non-standard format, or you are using some other
379program with a special format.
380
381Once the results are parsed, Vim loads the first file containing a match and
382jumps to the appropriate line, in the same way that it jumps to a compiler
383error in |quickfix| mode. You can then use the |:cnext|, |:clist|, etc.
384commands to see the other matches.
385
386
Bram Moolenaar86b68352004-12-27 21:59:20 +00003875.4 Using :grep with id-utils
Bram Moolenaar071d4272004-06-13 20:20:40 +0000388
389You can set up :grep to work with the GNU id-utils like this: >
390
391 :set grepprg=lid\ -Rgrep\ -s
392 :set grepformat=%f:%l:%m
393
394then >
395 :grep (regexp)
396
397works just as you'd expect.
398(provided you remembered to mkid first :)
399
400
Bram Moolenaar86b68352004-12-27 21:59:20 +00004015.5 Browsing source code with :vimgrep or :grep
Bram Moolenaar071d4272004-06-13 20:20:40 +0000402
403Using the stack of error lists that Vim keeps, you can browse your files to
404look for functions and the functions they call. For example, suppose that you
405have to add an argument to the read_file() function. You enter this command: >
406
Bram Moolenaar86b68352004-12-27 21:59:20 +0000407 :vimgrep /\<read_file\>/ *.c
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408
409You use ":cn" to go along the list of matches and add the argument. At one
410place you have to get the new argument from a higher level function msg(), and
411need to change that one too. Thus you use: >
412
Bram Moolenaar86b68352004-12-27 21:59:20 +0000413 :vimgrep /\<msg\>/ *.c
Bram Moolenaar071d4272004-06-13 20:20:40 +0000414
415While changing the msg() functions, you find another function that needs to
Bram Moolenaar86b68352004-12-27 21:59:20 +0000416get the argument from a higher level. You can again use ":vimgrep" to find
417these functions. Once you are finished with one function, you can use >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000418
419 :colder
420
421to go back to the previous one.
422
Bram Moolenaar86b68352004-12-27 21:59:20 +0000423This works like browsing a tree: ":vimgrep" goes one level deeper, creating a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000424list of branches. ":colder" goes back to the previous level. You can mix
Bram Moolenaar86b68352004-12-27 21:59:20 +0000425this use of ":vimgrep" and "colder" to browse all the locations in a tree-like
Bram Moolenaar071d4272004-06-13 20:20:40 +0000426way. If you do this consistently, you will find all locations without the
427need to write down a "todo" list.
428
429=============================================================================
4306. Selecting a compiler *compiler-select*
431
432 *:comp* *:compiler* *E666*
433:comp[iler][!] {name} Set options to work with compiler {name}.
434 Without the "!" options are set for the
435 current buffer. With "!" global options are
436 set.
437 If you use ":compiler foo" in "file.foo" and
438 then ":compiler! bar" in another buffer, Vim
439 will keep on using "foo" in "file.foo".
440 {not available when compiled without the
441 |+eval| feature}
442
443
444The Vim plugins in the "compiler" directory will set options to use the
445selected compiler. For ":compiler" local options are set, for ":compiler!"
446global options.
447 *current_compiler*
448To support older Vim versions, the plugins always use "current_compiler" and
449not "b:current_compiler". What the command actually does is the following:
450
451- Delete the "current_compiler" and "b:current_compiler" variables.
452- Define the "CompilerSet" user command. With "!" it does ":set", without "!"
453 it does ":setlocal".
454- Execute ":runtime! compiler/{name}.vim". The plugins are expected to set
455 options with "CompilerSet" and set the "current_compiler" variable to the
456 name of the compiler.
457- Delete the "CompilerSet user command.
458- Set "b:current_compiler" to the value of "current_compiler".
459- Without "!" the old value of "current_compiler" is restored.
460
461
462For writing a compiler plugin, see |write-compiler-plugin|.
463
464
465MANX AZTEC C *quickfix-manx* *compiler-manx*
466
467To use Vim with Manx's Aztec C compiler on the Amiga you should do the
468following:
469- Set the CCEDIT environment variable with the command: >
470 mset "CCEDIT=vim -q"
471- Compile with the -qf option. If the compiler finds any errors, Vim is
472 started and the cursor is positioned on the first error. The error message
473 will be displayed on the last line. You can go to other errors with the
474 commands mentioned above. You can fix the errors and write the file(s).
475- If you exit Vim normally the compiler will re-compile the same file. If you
476 exit with the :cq command, the compiler will terminate. Do this if you
477 cannot fix the error, or if another file needs to be compiled first.
478
479There are some restrictions to the Quickfix mode on the Amiga. The
480compiler only writes the first 25 errors to the errorfile (Manx's
481documentation does not say how to get more). If you want to find the others,
482you will have to fix a few errors and exit the editor. After recompiling,
483up to 25 remaining errors will be found.
484
485If Vim was started from the compiler, the :sh and some :! commands will not
486work, because Vim is then running in the same process as the compiler and
487stdin (standard input) will not be interactive.
488
489
490PYUNIT COMPILER *compiler-pyunit*
491
492This is not actually a compiler, but a unit testing framework for the
493Python language. It is included into standard Python distribution
494starting from version 2.0. For older versions, you can get it from
495http://pyunit.sourceforge.net.
496
497When you run your tests with the help of the framework, possible errors
498are parsed by Vim and presented for you in quick-fix mode.
499
500Unfortunately, there is no standard way to run the tests.
501The alltests.py script seems to be used quite often, that's all.
502Useful values for the 'makeprg' options therefore are:
503 setlocal makeprg=./alltests.py " Run a testsuite
504 setlocal makeprg=python % " Run a single testcase
505
506Also see http://vim.sourceforge.net/tip_view.php?tip_id=280.
507
508
509TEX COMPILER *compiler-tex*
510
511Included in the distribution compiler for TeX ($VIMRUNTIME/compiler/tex.vim)
512uses make command if possible. If the compiler finds a file named "Makefile"
513or "makefile" in the current directory, it supposes that you want to process
514your *TeX files with make, and the makefile does the right work. In this case
515compiler sets 'errorformat' for *TeX output and leaves 'makeprg' untouched. If
516neither "Makefile" nor "makefile" is found, the compiler will not use make.
517You can force the compiler to ignore makefiles by defining
518b:tex_ignore_makefile or g:tex_ignore_makefile variable (they are checked for
519existence only).
520
521If the compiler chose not to use make, it need to choose a right program for
522processing your input. If b:tex_flavor or g:tex_flavor (in this precedence)
523variable exists, it defines TeX flavor for :make (actually, this is the name
524of executed command), and if both variables do not exist, it defaults to
525"latex". For example, while editing chapter2.tex \input-ed from mypaper.tex
526written in AMS-TeX: >
527
528 :let b:tex_flavor = 'amstex'
529 :compiler tex
530< [editing...] >
531 :make mypaper
532
533Note that you must specify a name of the file to process as an argument (to
534process the right file when editing \input-ed or \include-ed file; portable
535solution for substituting % for no arguments is welcome). This is not in the
536semantics of make, where you specify a target, not source, but you may specify
537filename without extension ".tex" and mean this as "make filename.dvi or
538filename.pdf or filename.some_result_extension according to compiler".
539
540Note: tex command line syntax is set to usable both for MikTeX (suggestion
541by Srinath Avadhanula) and teTeX (checked by Artem Chuprina). Suggestion
542from |errorformat-LaTeX| is too complex to keep it working for different
543shells and OSes and also does not allow to use other available TeX options,
544if any. If your TeX doesn't support "-interaction=nonstopmode", please
545report it with different means to express \nonstopmode from the command line.
546
547=============================================================================
5487. The error format *error-file-format*
549
550 *errorformat* *E372* *E373* *E374*
551 *E375* *E376* *E377* *E378*
552The 'errorformat' option specifies a list of formats that are recognized. The
553first format that matches with an error message is used. You can add several
554formats for different messages your compiler produces, or even entries for
555multiple compilers. See |efm-entries|.
556
557Each entry in 'errorformat' is a scanf-like string that describes the format.
558First, you need to know how scanf works. Look in the documentation of your
559C compiler. Below you find the % items that Vim understands. Others are
560invalid.
561
562Special characters in 'errorformat' are comma and backslash. See
563|efm-entries| for how to deal with them. Note that a literal "%" is matched
564by "%%", thus it is not escaped with a backslash.
565
566Note: By default the difference between upper and lowercase is ignored. If
567you want to match case, add "\C" to the pattern |/\C|.
568
569
570Basic items
571
572 %f file name (finds a string)
573 %l line number (finds a number)
574 %c column number (finds a number representing character
575 column of the error, (1 <tab> == 1 character column))
576 %v virtual column number (finds a number representing
577 screen column of the error (1 <tab> == 8 screen
578 columns)
579 %t error type (finds a single character)
580 %n error number (finds a number)
581 %m error message (finds a string)
582 %r matches the "rest" of a single-line file message %O/P/Q
583 %p pointer line (finds a sequence of '-', '.' or ' ' and
584 uses the length for the column number)
585 %*{conv} any scanf non-assignable conversion
586 %% the single '%' character
587
588The "%f" conversion depends on the current 'isfname' setting.
589
590The "%f" and "%m" conversions have to detect the end of the string. They
591should be followed by a character that cannot be in the string. Everything
592up to that character is included in the string. But when the next character
593is a '%' or a backslash, "%f" will look for any 'isfname' character and "%m"
594finds anything. If the "%f" or "%m" is at the end, everything up to the end
595of the line is included.
596
597On MS-DOS, MS-Windows and OS/2 a leading "C:" will be included in "%f", even
598when using "%f:". This means that a file name which is a single alphabetical
599letter will not be detected.
600
601The "%p" conversion is normally followed by a "^". It's used for compilers
602that output a line like: >
603 ^
604or >
605 ---------^
606to indicate the column of the error. This is to be used in a multi-line error
607message. See |errorformat-javac| for a useful example.
608
609
610Changing directory
611
612The following uppercase conversion characters specify the type of special
613format strings. At most one of them may be given as a prefix at the begin
614of a single comma-separated format pattern.
615Some compilers produce messages that consist of directory names that have to
616be prepended to each file name read by %f (example: GNU make). The following
617codes can be used to scan these directory names; they will be stored in an
618internal directory stack. *E379*
619 %D "enter directory" format string; expects a following
620 %f that finds the directory name
621 %X "leave directory" format string; expects following %f
622
623When defining an "enter directory" or "leave directory" format, the "%D" or
624"%X" has to be given at the start of that substring. Vim tracks the directory
625changes and prepends the current directory to each erroneous file found with a
626relative path. See |quickfix-directory-stack| for details, tips and
627limitations.
628
629
630Multi-line messages *errorformat-multi-line*
631
632It is possible to read the output of programs that produce multi-line
633messages, ie. error strings that consume more than one line. Possible
634prefixes are:
635 %E start of a multi-line error message
636 %W start of a multi-line warning message
637 %I start of a multi-line informational message
638 %A start of a multi-line message (unspecified type)
639 %C continuation of a multi-line message
640 %Z end of a multi-line message
641These can be used with '+' and '-', see |efm-ignore| below.
642
643Example: Your compiler happens to write out errors in the following format
644(leading line numbers not being part of the actual output):
645
646 1 Error 275
647 2 line 42
648 3 column 3
649 4 ' ' expected after '--'
650
651The appropriate error format string has to look like this: >
652 :set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m
653
654And the |:clist| error message generated for this error is:
655
656 1:42 col 3 error 275: ' ' expected after '--'
657
658Another example: Think of a Python interpreter that produces the following
659error message (line numbers are not part of the actual output):
660
661 1 ==============================================================
662 2 FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest)
663 3 --------------------------------------------------------------
664 4 Traceback (most recent call last):
665 5 File "unittests/dbfacadeTest.py", line 89, in testFoo
666 6 self.assertEquals(34, dtid)
667 7 File "/usr/lib/python2.2/unittest.py", line 286, in
668 8 failUnlessEqual
669 9 raise self.failureException, \
670 10 AssertionError: 34 != 33
671 11
672 12 --------------------------------------------------------------
673 13 Ran 27 tests in 0.063s
674
675Say you want |:clist| write the relevant information of this message only,
676namely:
677 5 unittests/dbfacadeTest.py:89: AssertionError: 34 != 33
678
679Then the error format string could be defined as follows: >
680 :set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
681
682Note that the %C string is given before the %A here: since the expression
683' %.%#' (which stands for the regular expression ' .*') matches every line
684starting with a space, followed by any characters to the end of the line,
685it also hides line 7 which would trigger a separate error message otherwise.
686Error format strings are always parsed pattern by pattern until the first
687match occurs.
688
689
690Separate file name *errorformat-separate-filename*
691
692These prefixes are useful if the file name is given once and multiple messages
693follow that refer to this file name.
694 %O single-line file message: overread the matched part
695 %P single-line file message: push file %f onto the stack
696 %Q single-line file message: pop the last file from stack
697
698Example: Given a compiler that produces the following error logfile (without
699leading line numbers):
700
701 1 [a1.tt]
702 2 (1,17) error: ';' missing
703 3 (21,2) warning: variable 'z' not defined
704 4 (67,3) error: end of file found before string ended
705 5
706 6 [a2.tt]
707 7
708 8 [a3.tt]
709 9 NEW compiler v1.1
710 10 (2,2) warning: variable 'x' not defined
711 11 (67,3) warning: 's' already defined
712
713This logfile lists several messages for each file enclosed in [...] which are
714properly parsed by an error format like this: >
715 :set efm=%+P[%f],(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%-Q
716
717A call of |:clist| writes them accordingly with their correct filenames:
718
719 2 a1.tt:1 col 17 error: ';' missing
720 3 a1.tt:21 col 2 warning: variable 'z' not defined
721 4 a1.tt:67 col 3 error: end of file found before string ended
722 8 a3.tt:2 col 2 warning: variable 'x' not defined
723 9 a3.tt:67 col 3 warning: 's' already defined
724
725Unlike the other prefixes that all match against whole lines, %P, %Q and %O
726can be used to match several patterns in the same line. Thus it is possible
727to parse even nested files like in the following line:
728 {"file1" {"file2" error1} error2 {"file3" error3 {"file4" error4 error5}}}
729The %O then parses over strings that do not contain any push/pop file name
730information. See |errorformat-LaTeX| for an extended example.
731
732
733Ignoring and using whole messages *efm-ignore*
734
735The codes '+' or '-' can be combined with the uppercase codes above; in that
736case they have to precede the letter, eg. '%+A' or '%-G':
737 %- do not include the matching multi-line in any output
738 %+ include the whole matching line in the %m error string
739
740One prefix is only useful in combination with '+' or '-', namely %G. It parses
741over lines containing general information like compiler version strings or
742other headers that can be skipped.
743 %-G ignore this message
744 %+G general message
745
746
747Pattern matching
748
749The scanf()-like "%*[]" notation is supported for backward-compatibility
750with previous versions of Vim. However, it is also possible to specify
751(nearly) any Vim supported regular expression in format strings.
752Since meta characters of the regular expression language can be part of
753ordinary matching strings or file names (and therefore internally have to
754be escaped), meta symbols have to be written with leading '%':
755 %\ the single '\' character. Note that this has to be
756 escaped ("%\\") in ":set errorformat=" definitions.
757 %. the single '.' character.
758 %# the single '*'(!) character.
759 %^ the single '^' character.
760 %$ the single '$' character.
761 %[ the single '[' character for a [] character range.
762 %~ the single '~' character.
763When using character classes in expressions (see |/\i| for an overview),
764terms containing the "\+" quantifier can be written in the scanf() "%*"
765notation. Example: "%\\d%\\+" ("\d\+", "any number") is equivalent to "%*\\d".
766Important note: The \(...\) grouping of sub-matches can not be used in format
767specifications because it is reserved for internal conversions.
768
769
770Multiple entries in 'errorformat' *efm-entries*
771
772To be able to detect output from several compilers, several format patterns
773may be put in 'errorformat', separated by commas (note: blanks after the comma
774are ignored). The first pattern that has a complete match is used. If no
775match is found, matching parts from the last one will be used, although the
776file name is removed and the error message is set to the whole message. If
777there is a pattern that may match output from several compilers (but not in a
778right way), put it after one that is more restrictive.
779
780To include a comma in a pattern precede it with a backslash (you have to type
781two in a ":set" command). To include a backslash itself give two backslashes
782(you have to type four in a ":set" command). You also need to put a backslash
783before a space for ":set".
784
785
786Valid matches *quickfix-valid*
787
788If a line does not completely match one of the entries in 'errorformat', the
789whole line is put in the error message and the entry is marked "not valid"
790These lines are skipped with the ":cn" and ":cp" commands (unless there is
791no valid line at all). You can use ":cl!" to display all the error messages.
792
793If the error format does not contain a file name Vim cannot switch to the
794correct file. You will have to do this by hand.
795
796
797Examples
798
799The format of the file from the Amiga Aztec compiler is:
800
801 filename>linenumber:columnnumber:errortype:errornumber:errormessage
802
803 filename name of the file in which the error was detected
804 linenumber line number where the error was detected
805 columnnumber column number where the error was detected
806 errortype type of the error, normally a single 'E' or 'W'
807 errornumber number of the error (for lookup in the manual)
808 errormessage description of the error
809
810This can be matched with this 'errorformat' entry:
811 %f>%l:%c:%t:%n:%m
812
813Some examples for C compilers that produce single-line error outputs:
814%f:%l:\ %t%*[^0123456789]%n:\ %m for Manx/Aztec C error messages
815 (scanf() doesn't understand [0-9])
816%f\ %l\ %t%*[^0-9]%n:\ %m for SAS C
817\"%f\"\\,%*[^0-9]%l:\ %m for generic C compilers
818%f:%l:\ %m for GCC
819%f:%l:\ %m,%Dgmake[%*\\d]:\ Entering\ directory\ `%f',
820%Dgmake[%*\\d]:\ Leaving\ directory\ `%f'
821 for GCC with gmake (concat the lines!)
822%f(%l)\ :\ %*[^:]:\ %m old SCO C compiler (pre-OS5)
823%f(%l)\ :\ %t%*[^0-9]%n:\ %m idem, with error type and number
824%f:%l:\ %m,In\ file\ included\ from\ %f:%l:,\^I\^Ifrom\ %f:%l%m
825 for GCC, with some extras
826
827Extended examples for the handling of multi-line messages are given below,
828see |errorformat-Jikes| and |errorformat-LaTeX|.
829
830Note the backslash in front of a space and double quote. It is required for
831the :set command. There are two backslashes in front of a comma, one for the
832:set command and one to avoid recognizing the comma as a separator of error
833formats.
834
835
836Filtering messages
837
838If you have a compiler that produces error messages that do not fit in the
839format string, you could write a program that translates the error messages
840into this format. You can use this program with the ":make" command by
841changing the 'makeprg' option. For example: >
842 :set mp=make\ \\\|&\ error_filter
843The backslashes before the pipe character are required to avoid it to be
844recognized as a command separator. The backslash before each space is
845required for the set command.
846
847=============================================================================
8488. The directory stack *quickfix-directory-stack*
849
850Quickfix maintains a stack for saving all used directories parsed from the
851make output. For GNU-make this is rather simple, as it always prints the
852absolute path of all directories it enters and leaves. Regardless if this is
853done via a 'cd' command in the makefile or with the parameter "-C dir" (change
854to directory before reading the makefile). It may be useful to use the switch
855"-w" to force GNU-make to print out the working directory before and after
856processing.
857
858Maintaining the correct directory is more complicated if you don't use
859GNU-make. AIX-make for example doesn't print any information about its working
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000860directory. Then you need to enhance the makefile. In the makefile of LessTif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000861there is a command which echoes "Making {target} in {dir}". The special
862problem here is that it doesn't print informations on leaving the directory
863and that it doesn't print the absolute path.
864
865To solve the problem with relative paths and missing "leave directory"
866messages Vim uses following algorithm:
867
8681) Check if the given directory is a subdirectory of the current directory.
869 If this is true, store it as the current directory.
8702) If it is not a subdir of the current directory, try if this is a
871 subdirectory of one of the upper directories.
8723) If the directory still isn't found, it is assumed to be a subdirectory
873 of Vim's current directory.
874
875Additionally it is checked for every file, if it really exists in the
876identified directory. If not, it is searched in all other directories of the
877directory stack (NOT the directory subtree!). If it is still not found, it is
878assumed that it is in Vim's current directory.
879
880There are limitation in this algorithm. This examples assume that make just
881prints information about entering a directory in the form "Making all in dir".
882
8831) Assume you have following directories and files:
884 ./dir1
885 ./dir1/file1.c
886 ./file1.c
887
888 If make processes the directory "./dir1" before the current directory and
889 there is an error in the file "./file1.c", you will end up with the file
890 "./dir1/file.c" loaded by Vim.
891
892 This can only be solved with a "leave directory" message.
893
8942) Assume you have following directories and files:
895 ./dir1
896 ./dir1/dir2
897 ./dir2
898
899 You get the following:
900
901 Make output Directory interpreted by Vim
902 ------------------------ ----------------------------
903 Making all in dir1 ./dir1
904 Making all in dir2 ./dir1/dir2
905 Making all in dir2 ./dir1/dir2
906
907 This can be solved by printing absolute directories in the "enter directory"
908 message or by printing "leave directory" messages..
909
910To avoid this problems, ensure to print absolute directory names and "leave
911directory" messages.
912
913Examples for Makefiles:
914
915Unix:
916 libs:
917 for dn in $(LIBDIRS); do \
918 (cd $$dn; echo "Entering dir '$$(pwd)'"; make); \
919 echo "Leaving dir"; \
920 done
921
922Add
923 %DEntering\ dir\ '%f',%XLeaving\ dir
924to your 'errorformat' to handle the above output.
925
926Note that Vim doesn't check if the directory name in a "leave directory"
927messages is the current directory. This is why you could just use the message
928"Leaving dir".
929
930=============================================================================
9319. Specific error file formats *errorformats*
932
933 *errorformat-Jikes*
934Jikes(TM), a source-to-bytecode Java compiler published by IBM Research,
935produces simple multi-line error messages.
936
937An 'errorformat' string matching the produced messages is shown below.
938The following lines can be placed in the user's |vimrc| to overwrite Vim's
939recognized default formats, or see |:set+=| how to install this format
940additionally to the default. >
941
942 :set efm=%A%f:%l:%c:%*\\d:%*\\d:,
943 \%C%*\\s%trror:%m,
944 \%+C%*[^:]%trror:%m,
945 \%C%*\\s%tarning:%m,
946 \%C%m
947<
948Jikes(TM) produces a single-line error message when invoked with the option
949"+E", and can be matched with the following: >
950
951 :set efm=%f:%l:%v:%*\\d:%*\\d:%*\\s%m
952<
953 *errorformat-javac*
954This 'errorformat' has been reported to work well for javac, which outputs a
955line with "^" to indicate the column of the error: >
956 :set efm=%A%f:%l:\ %m,%-Z%p^,%-C%.%#
957or: >
958 :set efm=%A%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#
959<
960 *errorformat-ant*
961For ant (http://jakarta.apache.org/) the above errorformat has to be modified
962to honour the leading [javac] in front of each javac output line: >
963 :set efm=%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#
964
965The 'errorformat' can also be configured to handle ant together with either
966javac or jikes. If you're using jikes, you should tell ant to use jikes' +E
967command line switch which forces jikes to generate one-line error messages.
968This is what the second line (of a build.xml file) below does: >
969 <property name = "build.compiler" value = "jikes"/>
970 <property name = "build.compiler.emacs" value = "true"/>
971
972The 'errorformat' which handles ant with both javac and jikes is: >
973 :set efm=\ %#[javac]\ %#%f:%l:%c:%*\\d:%*\\d:\ %t%[%^:]%#:%m,
974 \%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#
975<
976 *errorformat-jade*
977parsing jade (see http://www.jclark.com/) errors is simple: >
978 :set efm=jade:%f:%l:%c:%t:%m
979<
980 *errorformat-LaTeX*
981The following is an example how an 'errorformat' string can be specified
982for the (La)TeX typesetting system which displays error messages over
983multiple lines. The output of ":clist" and ":cc" etc. commands displays
984multi-lines in a single line, leading white space is removed.
985It should be easy to adopt the above LaTeX errorformat to any compiler output
986consisting of multi-line errors.
987
988The commands can be placed in a |vimrc| file or some other Vim script file,
989eg. a script containing LaTeX related stuff which is loaded only when editing
990LaTeX sources.
991Make sure to copy all lines of the example (in the given order), afterwards
992remove the comment lines. For the '\' notation at the start of some lines see
993|line-continuation|.
994
995 First prepare 'makeprg' such that LaTeX will report multiple
996 errors; do not stop when the first error has occurred: >
997 :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
998<
999 Start of multi-line error messages: >
1000 :set efm=%E!\ LaTeX\ %trror:\ %m,
1001 \%E!\ %m,
1002< Start of multi-line warning messages; the first two also
1003 include the line number. Meaning of some regular expressions:
1004 - "%.%#" (".*") matches a (possibly empty) string
1005 - "%*\\d" ("\d\+") matches a number >
1006 \%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#,
1007 \%+W%.%#\ at\ lines\ %l--%*\\d,
1008 \%WLaTeX\ %.%#Warning:\ %m,
1009< Possible continuations of error/warning messages; the first
1010 one also includes the line number: >
1011 \%Cl.%l\ %m,
1012 \%+C\ \ %m.,
1013 \%+C%.%#-%.%#,
1014 \%+C%.%#[]%.%#,
1015 \%+C[]%.%#,
1016 \%+C%.%#%[{}\\]%.%#,
1017 \%+C<%.%#>%.%#,
1018 \%C\ \ %m,
1019< Lines that match the following patterns do not contain any
1020 important information; do not include them in messages: >
1021 \%-GSee\ the\ LaTeX%m,
1022 \%-GType\ \ H\ <return>%m,
1023 \%-G\ ...%.%#,
1024 \%-G%.%#\ (C)\ %.%#,
1025 \%-G(see\ the\ transcript%.%#),
1026< Generally exclude any empty or whitespace-only line from
1027 being displayed: >
1028 \%-G\\s%#,
1029< The LaTeX output log does not specify the names of erroneous
1030 source files per line; rather they are given globally,
1031 enclosed in parentheses.
1032 The following patterns try to match these names and store
1033 them in an internal stack. The patterns possibly scan over
1034 the same input line (one after another), the trailing "%r"
1035 conversion indicates the "rest" of the line that will be
1036 parsed in the next go until the end of line is reached.
1037
1038 Overread a file name enclosed in '('...')'; do not push it
1039 on a stack since the file apparently does not contain any
1040 error: >
1041 \%+O(%f)%r,
1042< Push a file name onto the stack. The name is given after '(': >
1043 \%+P(%f%r,
1044 \%+P\ %\\=(%f%r,
1045 \%+P%*[^()](%f%r,
1046 \%+P[%\\d%[^()]%#(%f%r,
1047< Pop the last stored file name when a ')' is scanned: >
1048 \%+Q)%r,
1049 \%+Q%*[^()])%r,
1050 \%+Q[%\\d%*[^()])%r
1051
1052Note that in some cases file names in the LaTeX output log cannot be parsed
1053properly. The parser might have been messed up by unbalanced parentheses
1054then. The above example tries to catch the most relevant cases only.
1055You can customize the given setting to suit your own purposes, for example,
1056all the annoying "Overfull ..." warnings could be excluded from being
1057recognized as an error.
1058Alternatively to filtering the LaTeX compiler output, it is also possible
1059to directly read the *.log file that is produced by the [La]TeX compiler.
1060This contains even more useful information about possible error causes.
1061However, to properly parse such a complex file, an external filter should
1062be used. See the description further above how to make such a filter known
1063by Vim.
1064
1065 *errorformat-Perl*
1066In $VIMRUNTIME/tools you can find the efm_perl.pl script, which filters Perl
1067error messages into a format that quickfix mode will understand. See the
1068start of the file about how to use it.
1069
1070
1071
1072 vim:tw=78:ts=8:ft=help:norl: