blob: f2b2051b0a7d9a9ee932291a6191c5eba9f4b67e [file] [log] [blame]
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00001*autocmd.txt* For Vim version 7.0aa. Last change: 2005 Jul 30
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7Automatic commands *autocommand*
8
9For a basic explanation, see section |40.3| in the user manual.
10
111. Introduction |autocmd-intro|
122. Defining autocommands |autocmd-define|
133. Removing autocommands |autocmd-remove|
144. Listing autocommands |autocmd-list|
155. Events |autocmd-events|
166. Patterns |autocmd-patterns|
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000177. Buffer-local autocommands |autocmd-buflocal|
188. Groups |autocmd-groups|
199. Executing autocommands |autocmd-execute|
2010. Using autocommands |autocmd-use|
Bram Moolenaar071d4272004-06-13 20:20:40 +000021
22{Vi does not have any of these commands}
23{only when the |+autocmd| feature has not been disabled at compile time}
24
25==============================================================================
261. Introduction *autocmd-intro*
27
Bram Moolenaard4755bb2004-09-02 19:12:26 +000028You can specify commands to be executed automatically when reading or writing
29a file, when entering or leaving a buffer or window, and when exiting Vim.
30For example, you can create an autocommand to set the 'cindent' option for
31files matching *.c. You can also use autocommands to implement advanced
Bram Moolenaar071d4272004-06-13 20:20:40 +000032features, such as editing compressed files (see |gzip-example|). The usual
33place to put autocommands is in your .vimrc or .exrc file.
34
35 *E203* *E204* *E143*
36WARNING: Using autocommands is very powerful, and may lead to unexpected side
37effects. Be careful not to destroy your text.
38- It's a good idea to do some testing on an expendable copy of a file first.
39 For example: If you use autocommands to decompress a file when starting to
40 edit it, make sure that the autocommands for compressing when writing work
41 correctly.
42- Be prepared for an error halfway through (e.g., disk full). Vim will mostly
43 be able to undo the changes to the buffer, but you may have to clean up the
44 changes to other files by hand (e.g., compress a file that has been
45 decompressed).
46- If the BufRead* events allow you to edit a compressed file, the FileRead*
47 events should do the same (this makes recovery possible in some rare cases).
48 It's a good idea to use the same autocommands for the File* and Buf* events
49 when possible.
50
51==============================================================================
522. Defining autocommands *autocmd-define*
53
54Note: The ":autocmd" command cannot be followed by another command, since any
55'|' is considered part of the command.
56
57 *:au* *:autocmd*
58:au[tocmd] [group] {event} {pat} [nested] {cmd}
59 Add {cmd} to the list of commands that Vim will
60 execute automatically on {event} for a file matching
61 {pat}. Vim always adds the {cmd} after existing
62 autocommands, so that the autocommands execute in the
63 order in which they were given. See |autocmd-nested|
64 for [nested].
65
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +000066The special pattern <buffer> or <buffer=N> defines a buffer-local autocommand.
67See |autocmd-buflocal|.
68
Bram Moolenaar071d4272004-06-13 20:20:40 +000069Note that special characters (e.g., "%", "<cword>") in the ":autocmd"
70arguments are not expanded when the autocommand is defined. These will be
71expanded when the Event is recognized, and the {cmd} is executed. The only
72exception is that "<sfile>" is expanded when the autocmd is defined. Example:
73>
74 :au BufNewFile,BufRead *.html so <sfile>:h/html.vim
75
76Here Vim expands <sfile> to the name of the file containing this line.
77
78When your .vimrc file is sourced twice, the autocommands will appear twice.
79To avoid this, put this command in your .vimrc file, before defining
80autocommands: >
81
82 :autocmd! " Remove ALL autocommands for the current group.
83
84If you don't want to remove all autocommands, you can instead use a variable
85to ensure that Vim includes the autocommands only once: >
86
87 :if !exists("autocommands_loaded")
88 : let autocommands_loaded = 1
89 : au ...
90 :endif
91
92When the [group] argument is not given, Vim uses the current group (as defined
93with ":augroup"); otherwise, Vim uses the group defined with [group]. Note
94that [group] must have been defined before. You cannot define a new group
95with ":au group ..."; use ":augroup" for that.
96
97While testing autocommands, you might find the 'verbose' option to be useful: >
98 :set verbose=9
99This setting makes Vim echo the autocommands as it executes them.
100
101When defining an autocommand in a script, it will be able to call functions
102local to the script and use mappings local to the script. When the event is
103triggered and the command executed, it will run in the context of the script
104it was defined in. This matters if |<SID>| is used in a command.
105
106When executing the commands, the messages from one command overwrites a
107previous message. This is different from when executing the commands
108manually. Mostly the screen will not scroll up, thus there is no hit-enter
109prompt. When one command outputs two messages this can happen anyway.
110
111==============================================================================
1123. Removing autocommands *autocmd-remove*
113
114:au[tocmd]! [group] {event} {pat} [nested] {cmd}
115 Remove all autocommands associated with {event} and
116 {pat}, and add the command {cmd}. See
117 |autocmd-nested| for [nested].
118
119:au[tocmd]! [group] {event} {pat}
120 Remove all autocommands associated with {event} and
121 {pat}.
122
123:au[tocmd]! [group] * {pat}
124 Remove all autocommands associated with {pat} for all
125 events.
126
127:au[tocmd]! [group] {event}
128 Remove ALL autocommands for {event}.
129
130:au[tocmd]! [group] Remove ALL autocommands.
131
132When the [group] argument is not given, Vim uses the current group (as defined
133with ":augroup"); otherwise, Vim uses the group defined with [group].
134
135==============================================================================
1364. Listing autocommands *autocmd-list*
137
138:au[tocmd] [group] {event} {pat}
139 Show the autocommands associated with {event} and
140 {pat}.
141
142:au[tocmd] [group] * {pat}
143 Show the autocommands associated with {pat} for all
144 events.
145
146:au[tocmd] [group] {event}
147 Show all autocommands for {event}.
148
149:au[tocmd] [group] Show all autocommands.
150
151If you provide the [group] argument, Vim lists only the autocommands for
152[group]; otherwise, Vim lists the autocommands for ALL groups. Note that this
153argument behavior differs from that for defining and removing autocommands.
154
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000155In order to list buffer-local autocommands, use a pattern in the form <buffer>
156or <buffer=N>. See |autocmd-buflocal|.
157
Bram Moolenaarac6e65f2005-08-29 22:25:38 +0000158 *:autocmd-verbose*
159When 'verbose' is non-zero, listing an autocommand will also display where it
160was last defined. Example: >
161
162 :verbose autocmd BufEnter
163 FileExplorer BufEnter
164 * call s:LocalBrowse(expand("<amatch>"))
165 Last set from /usr/share/vim/vim-7.0/plugin/NetrwPlugin.vim
166<
167See |:verbose-cmd| for more information.
168
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169==============================================================================
1705. Events *autocmd-events* *E215* *E216*
171
172 *autocommand-events* *{event}*
173Vim recognizes the following events. Vim ignores the case of event names
174(e.g., you can use "BUFread" or "bufread" instead of "BufRead").
175
176 *BufNewFile*
177BufNewFile When starting to edit a file that doesn't
178 exist. Can be used to read in a skeleton
179 file.
180 *BufReadPre* *E200* *E201*
181BufReadPre When starting to edit a new buffer, before
182 reading the file into the buffer. Not used
183 if the file doesn't exist.
184 *BufRead* *BufReadPost*
185BufRead or BufReadPost When starting to edit a new buffer, after
186 reading the file into the buffer, before
187 executing the modelines. See |BufWinEnter|
188 for when you need to do something after
189 processing the modelines.
190 This does NOT work for ":r file". Not used
191 when the file doesn't exist. Also used after
192 successfully recovering a file.
193 *BufReadCmd*
194BufReadCmd Before starting to edit a new buffer. Should
195 read the file into the buffer. |Cmd-event|
196 *BufFilePre*
197BufFilePre Before changing the name of the current buffer
198 with the ":file" or ":saveas" command.
199 *BufFilePost*
200BufFilePost After changing the name of the current buffer
201 with the ":file" or ":saveas" command.
202 *FileReadPre*
203FileReadPre Before reading a file with a ":read" command.
204 *FileReadPost*
205FileReadPost After reading a file with a ":read" command.
206 Note that Vim sets the '[ and '] marks to the
207 first and last line of the read. This can be
208 used to operate on the lines just read.
209 *FileReadCmd*
210FileReadCmd Before reading a file with a ":read" command.
211 Should do the reading of the file. |Cmd-event|
212 *FilterReadPre* *E135*
213FilterReadPre Before reading a file from a filter command.
214 Vim checks the pattern against the name of
215 the current buffer, not the name of the
216 temporary file that is the output of the
217 filter command.
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000218 Not triggered when 'shelltemp' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000219 *FilterReadPost*
220FilterReadPost After reading a file from a filter command.
221 Vim checks the pattern against the name of
222 the current buffer as with FilterReadPre.
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000223 Not triggered when 'shelltemp' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000224 *FileType*
225FileType When the 'filetype' option has been set.
226 <afile> can be used for the name of the file
227 where this option was set, and <amatch> for
228 the new value of 'filetype'.
229 See |filetypes|.
230 *Syntax*
231Syntax When the 'syntax' option has been set.
232 <afile> can be used for the name of the file
233 where this option was set, and <amatch> for
234 the new value of 'syntax'.
235 See |:syn-on|.
236 *StdinReadPre*
237StdinReadPre Before reading from stdin into the buffer.
238 Only used when the "-" argument was used when
239 Vim was started |--|.
240 *StdinReadPost*
241StdinReadPost After reading from the stdin into the buffer,
242 before executing the modelines. Only used
243 when the "-" argument was used when Vim was
244 started |--|.
245 *BufWrite* *BufWritePre*
246BufWrite or BufWritePre Before writing the whole buffer to a file.
247 *BufWritePost*
248BufWritePost After writing the whole buffer to a file
249 (should undo the commands for BufWritePre).
250 *BufWriteCmd*
251BufWriteCmd Before writing the whole buffer to a file.
252 Should do the writing of the file and reset
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000253 'modified' if successful, unless '+' is in
254 'cpo' and writing to another file |cpo-+|.
255 The buffer contents should not be changed.
256 |Cmd-event|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257 *FileWritePre*
258FileWritePre Before writing to a file, when not writing the
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000259 whole buffer. Use the '[ and '] marks for the
260 range of lines.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261 *FileWritePost*
262FileWritePost After writing to a file, when not writing the
263 whole buffer.
264 *FileWriteCmd*
265FileWriteCmd Before writing to a file, when not writing the
266 whole buffer. Should do the writing to the
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000267 file. Should not change the buffer. Use the
268 '[ and '] marks for the range of lines.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269 |Cmd-event|
270 *FileAppendPre*
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000271FileAppendPre Before appending to a file. Use the '[ and ']
272 marks for the range of lines.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273 *FileAppendPost*
274FileAppendPost After appending to a file.
275 *FileAppendCmd*
276FileAppendCmd Before appending to a file. Should do the
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000277 appending to the file. Use the '[ and ']
278 marks for the range of lines.|Cmd-event|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279 *FilterWritePre*
280FilterWritePre Before writing a file for a filter command or
281 making a diff.
282 Vim checks the pattern against the name of
283 the current buffer, not the name of the
284 temporary file that is the output of the
285 filter command.
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000286 Not triggered when 'shelltemp' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287 *FilterWritePost*
288FilterWritePost After writing a file for a filter command or
289 making a diff.
290 Vim checks the pattern against the name of
291 the current buffer as with FilterWritePre.
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000292 Not triggered when 'shelltemp' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000293 *FileChangedShell*
294FileChangedShell When Vim notices that the modification time of
295 a file has changed since editing started.
296 Also when the file attributes of the file
297 change. |timestamp|
298 Mostly triggered after executing a shell
299 command, but also with a |:checktime| command
Bram Moolenaar19a09a12005-03-04 23:39:37 +0000300 or when Gvim regains input focus.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000301 This autocommand is triggered for each changed
302 file. It is not used when 'autoread' is set
303 and the buffer was not changed. If a
304 FileChangedShell autocommand is present the
305 warning message and prompt is not given.
306 This is useful for reloading related buffers
307 which are affected by a single command.
Bram Moolenaar19a09a12005-03-04 23:39:37 +0000308 The |v:fcs_reason| variable is set to indicate
309 what happened and |v:fcs_choice| can be used
310 to tell Vim what to do next.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000311 NOTE: When this autocommand is executed, the
312 current buffer "%" may be different from the
313 buffer that was changed "<afile>".
314 NOTE: The commands must not change the current
315 buffer, jump to another buffer or delete a
316 buffer. *E246*
317 NOTE: This event never nests, to avoid an
318 endless loop. This means that while executing
319 commands for the FileChangedShell event no
320 other FileChangedShell event will be
321 triggered.
322 *FileChangedRO*
323FileChangedRO Before making the first change to a read-only
324 file. Can be used to check-out the file from
325 a source control system. Not triggered when
326 the change was caused by an autocommand.
327 WARNING: This event is triggered when making a
328 change, just before the change is applied to
329 the text. If the autocommand moves the cursor
330 the effect of the change is undefined.
331 *FocusGained*
332FocusGained When Vim got input focus. Only for the GUI
333 version and a few console versions where this
334 can be detected.
335 *FocusLost*
336FocusLost When Vim lost input focus. Only for the GUI
337 version and a few console versions where this
Bram Moolenaar843ee412004-06-30 16:16:41 +0000338 can be detected. May also happen when a
339 dialog pops up.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000340 *FuncUndefined*
341FuncUndefined When a user function is used but it isn't
342 defined. Useful for defining a function only
343 when it's used. Both <amatch> and <afile> are
344 set to the name of the function.
Bram Moolenaar7c626922005-02-07 22:01:03 +0000345 See |autoload-functions|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000346 *CursorHold*
347CursorHold When the user doesn't press a key for the time
348 specified with 'updatetime'. Not re-triggered
349 until the user has pressed a key (i.e. doesn't
350 fire every 'updatetime' ms if you leave Vim to
351 make some coffee. :) See |CursorHold-example|
352 for previewing tags.
353 This event is only triggered in Normal mode.
354 Note: Interactive commands cannot be used for
355 this event. There is no hit-enter prompt,
356 the screen is updated directly (when needed).
357 Note: In the future there will probably be
358 another option to set the time.
359 Hint: to force an update of the status lines
360 use: >
361 :let &ro = &ro
362< {only on Amiga, Unix, Win32, MSDOS and all GUI
363 versions}
364 *BufEnter*
365BufEnter After entering a buffer. Useful for setting
366 options for a file type. Also executed when
367 starting to edit a buffer, after the
368 BufReadPost autocommands.
369 *BufLeave*
370BufLeave Before leaving to another buffer. Also when
371 leaving or closing the current window and the
372 new current window is not for the same buffer.
373 Not used for ":qa" or ":q" when exiting Vim.
374 *BufWinEnter*
375BufWinEnter After a buffer is displayed in a window. This
376 can be when the buffer is loaded (after
377 processing the modelines), when a hidden
378 buffer is displayed in a window (and is no
379 longer hidden) or a buffer already visible in
380 a window is also displayed in another window.
381 *BufWinLeave*
382BufWinLeave Before a buffer is removed from a window.
383 Not when it's still visible in another window.
384 Also triggered when exiting. It's triggered
385 before BufUnload or BufHidden.
386 NOTE: When this autocommand is executed, the
387 current buffer "%" may be different from the
388 buffer being unloaded "<afile>".
389 *BufUnload*
390BufUnload Before unloading a buffer. This is when the
391 text in the buffer is going to be freed. This
392 may be after a BufWritePost and before a
393 BufDelete. Also used for all buffers that are
394 loaded when Vim is going to exit.
395 NOTE: When this autocommand is executed, the
396 current buffer "%" may be different from the
397 buffer being unloaded "<afile>".
398 *BufHidden*
399BufHidden Just after a buffer has become hidden. That
400 is, when there are no longer windows that show
401 the buffer, but the buffer is not unloaded or
402 deleted. Not used for ":qa" or ":q" when
403 exiting Vim.
404 NOTE: When this autocommand is executed, the
405 current buffer "%" may be different from the
406 buffer being unloaded "<afile>".
407 *BufNew*
408BufNew Just after creating a new buffer. Also used
409 just after a buffer has been renamed. When
410 the buffer is added to the buffer list BufAdd
411 will be triggered too.
412 NOTE: When this autocommand is executed, the
413 current buffer "%" may be different from the
414 buffer being created "<afile>".
415 *BufCreate* *BufAdd*
416BufAdd or BufCreate Just after creating a new buffer which is
417 added to the buffer list, or adding a buffer
418 to the buffer list.
419 Also used just after a buffer in the buffer
420 list has been renamed.
421 The BufCreate event is for historic reasons.
422 NOTE: When this autocommand is executed, the
423 current buffer "%" may be different from the
424 buffer being created "<afile>".
425 *BufDelete*
426BufDelete Before deleting a buffer from the buffer list.
427 The BufUnload may be called first (if the
428 buffer was loaded).
429 Also used just before a buffer in the buffer
430 list is renamed.
431 NOTE: When this autocommand is executed, the
432 current buffer "%" may be different from the
433 buffer being deleted "<afile>".
434 *BufWipeout*
435BufWipeout Before completely deleting a buffer. The
436 BufUnload and BufDelete events may be called
437 first (if the buffer was loaded and was in the
438 buffer list). Also used just before a buffer
439 is renamed (also when it's not in the buffer
440 list).
441 NOTE: When this autocommand is executed, the
442 current buffer "%" may be different from the
443 buffer being deleted "<afile>".
444 *WinEnter*
445WinEnter After entering another window. Not done for
446 the first window, when Vim has just started.
447 Useful for setting the window height.
448 If the window is for another buffer, Vim
449 executes the BufEnter autocommands after the
450 WinEnter autocommands.
451 Note: When using ":split fname" the WinEnter
452 event is triggered after the split but before
453 the file "fname" is loaded.
454 *WinLeave*
455WinLeave Before leaving a window. If the window to be
456 entered next is for a different buffer, Vim
457 executes the BufLeave autocommands before the
458 WinLeave autocommands (but not for ":new").
459 Not used for ":qa" or ":q" when exiting Vim.
460 *CmdwinEnter*
461CmdwinEnter After entering the command-line window.
462 Useful for setting options specifically for
463 this special type of window. This is
464 triggered _instead_ of BufEnter and WinEnter.
465 <afile> is set to a single character,
466 indicating the type of command-line.
467 |cmdwin-char|
468 *CmdwinLeave*
469CmdwinLeave Before leaving the command-line window.
470 Useful to clean up any global setting done
471 with CmdwinEnter. This is triggered _instead_
472 of BufLeave and WinLeave.
473 <afile> is set to a single character,
474 indicating the type of command-line.
475 |cmdwin-char|
476 *GUIEnter*
477GUIEnter After starting the GUI successfully, and after
478 opening the window. It is triggered before
479 VimEnter when using gvim. Can be used to
480 position the window from a .gvimrc file: >
481 :autocmd GUIEnter * winpos 100 50
482< *VimEnter*
483VimEnter After doing all the startup stuff, including
484 loading .vimrc files, executing the "-c cmd"
485 arguments, creating all windows and loading
486 the buffers in them.
487 *VimLeavePre*
488VimLeavePre Before exiting Vim, just before writing the
489 .viminfo file. This is executed only once,
490 if there is a match with the name of what
491 happens to be the current buffer when exiting.
492 Mostly useful with a "*" pattern. >
493 :autocmd VimLeavePre * call CleanupStuff()
494< To detect an abnormal exit use |v:dying|.
495 *VimLeave*
496VimLeave Before exiting Vim, just after writing the
497 .viminfo file. Executed only once, like
498 VimLeavePre.
499 To detect an abnormal exit use |v:dying|.
500 *EncodingChanged*
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000501EncodingChanged Fires off after the 'encoding' option has been
Bram Moolenaar071d4272004-06-13 20:20:40 +0000502 changed. Useful to set up fonts, for example.
Bram Moolenaar843ee412004-06-30 16:16:41 +0000503 *InsertEnter*
504InsertEnter When starting Insert mode. Also for Replace
505 mode and Virtual Replace mode. The
506 |v:insertmode| variable indicates the mode.
507 Be careful not to move the cursor or do
508 anything else that the user does not expect.
509 *InsertChange*
510InsertChange When typing <Insert> while in Insert or
511 Replace mode. The |v:insertmode| variable
512 indicates the new mode.
513 Be careful not to move the cursor or do
514 anything else that the user does not expect.
515 *InsertLeave*
516InsertLeave When leaving Insert mode. Also when using
Bram Moolenaar677ee682005-01-27 14:41:15 +0000517 CTRL-O |i_CTRL-O|. But not for |i_CTRL-C|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000518 *FileEncoding*
519FileEncoding Obsolete. It still works and is equivalent
520 to |EncodingChanged|.
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000521 *ColorScheme*
522ColorScheme After loading a color scheme. |:colorscheme|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000523 *RemoteReply*
524RemoteReply When a reply from a Vim that functions as
525 server was received |server2client()|.
526 <amatch> is equal to the {serverid} from which
527 the reply was sent, and <afile> is the actual
528 reply string.
529 Note that even if an autocommand is defined,
530 the reply should be read with |remote_read()|
531 to consume it.
532 *TermChanged*
533TermChanged After the value of 'term' has changed. Useful
534 for re-loading the syntax file to update the
535 colors, fonts and other terminal-dependent
536 settings. Executed for all loaded buffers.
537 *TermResponse*
538TermResponse After the response to |t_RV| is received from
539 the terminal. The value of |v:termresponse|
540 can be used to do things depending on the
541 terminal version.
Bram Moolenaar7c626922005-02-07 22:01:03 +0000542QuickFixCmdPre *QuickFixCmdPre*
543 Before a quickfix command is run (|:make|,
544 |:grep|, |:grepadd|, |:vimgrep|,
545 |:vimgrepadd|). The pattern is matched against
546 the command being run. When |:grep| is used
547 but 'grepprg' is set to "internal" it still
548 matches "grep".
549 This command cannot be used to set the
550 'makeprg' and 'grepprg' variables.
551 If this command causes an error, the quickfix
552 command is not executed.
553QuickFixCmdPost *QuickFixCmdPost*
554 like QuickFixCmdPre, but after a quickfix
555 command is run.
Bram Moolenaar45360022005-07-21 21:08:21 +0000556 *MenuPopup*
557MenuPopup Just before showing the popup menu (under the
558 right mouse button). Useful for adjusting the
559 menu for what is under the cursor or mouse
560 pointer.
561 The pattern is matched against a single
562 character representing the mode:
563 n Normal
564 v Visual
565 o Operator-pending
566 i Insert
567 c Commmand line
Bram Moolenaar071d4272004-06-13 20:20:40 +0000568 *UserGettingBored*
569UserGettingBored When the user hits CTRL-C. Just kidding! :-)
570 *User*
571User Never executed automatically. To be used for
572 autocommands that are only executed with
573 ":doautocmd".
574
575You can specify a comma-separated list of event names. No white space can be
576used in this list. The command applies to all the events in the list.
577
578For READING FILES there are four kinds of events possible:
579 BufNewFile starting to edit a non-existent file
580 BufReadPre BufReadPost starting to edit an existing file
581 FilterReadPre FilterReadPost read the temp file with filter output
582 FileReadPre FileReadPost any other file read
583Vim uses only one of these four kinds when reading a file. The "Pre" and
584"Post" events are both triggered, before and after reading the file.
585
586Note that the autocommands for the *ReadPre events and all the Filter events
587are not allowed to change the current buffer (you will get an error message if
588this happens). This is to prevent the file to be read into the wrong buffer.
589
590Note that the 'modified' flag is reset AFTER executing the BufReadPost
591and BufNewFile autocommands. But when the 'modified' option was set by the
592autocommands, this doesn't happen.
593
594You can use the 'eventignore' option to ignore a number of events or all
595events.
596
597==============================================================================
5986. Patterns *autocmd-patterns* *{pat}*
599
600The file pattern {pat} is tested for a match against the file name in one of
601two ways:
6021. When there is no '/' in the pattern, Vim checks for a match against only
603 the tail part of the file name (without its leading directory path).
6042. When there is a '/' in the pattern, Vim checks for a match against the
605 both short file name (as you typed it) and the full file name (after
606 expanding it to a full path and resolving symbolic links).
607
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000608The special pattern <buffer> or <buffer=N> is used for buffer-local
609autocommands |autocmd-buflocal|. This pattern is not matched against the name
610of a buffer.
611
Bram Moolenaar071d4272004-06-13 20:20:40 +0000612Examples: >
613 :autocmd BufRead *.txt set et
614Set the 'et' option for all text files. >
615
616 :autocmd BufRead /vim/src/*.c set cindent
617Set the 'cindent' option for C files in the /vim/src directory. >
618
619 :autocmd BufRead /tmp/*.c set ts=5
620If you have a link from "/tmp/test.c" to "/home/nobody/vim/src/test.c", and
621you start editing "/tmp/test.c", this autocommand will match.
622
623Note: To match part of a path, but not from the root directory, use a '*' as
624the first character. Example: >
625 :autocmd BufRead */doc/*.txt set tw=78
626This autocommand will for example be executed for "/tmp/doc/xx.txt" and
627"/usr/home/piet/doc/yy.txt". The number of directories does not matter here.
628
629
630The file name that the pattern is matched against is after expanding
631wildcards. Thus is you issue this command: >
632 :e $ROOTDIR/main.$EXT
633The argument is first expanded to: >
634 /usr/root/main.py
635Before it's matched with the pattern of the autocommand. Careful with this
636when using events like FileReadCmd, the value of <amatch> may not be what you
637expect.
638
639
640Environment variables can be used in a pattern: >
641 :autocmd BufRead $VIMRUNTIME/doc/*.txt set expandtab
642And ~ can be used for the home directory (if $HOME is defined): >
643 :autocmd BufWritePost ~/.vimrc so ~/.vimrc
644 :autocmd BufRead ~archive/* set readonly
645The environment variable is expanded when the autocommand is defined, not when
646the autocommand is executed. This is different from the command!
647
648 *file-pattern*
649The pattern is interpreted like mostly used in file names:
650 * matches any sequence of characters
651 ? matches any single character
652 \? matches a '?'
653 . matches a '.'
654 ~ matches a '~'
655 , separates patterns
656 \, matches a ','
657 { } like \( \) in a |pattern|
658 , inside { }: like \| in a |pattern|
659 \ special meaning like in a |pattern|
660 [ch] matches 'c' or 'h'
661 [^ch] match any character but 'c' and 'h'
662
663Note that for all systems the '/' character is used for path separator (even
664MS-DOS and OS/2). This was done because the backslash is difficult to use
665in a pattern and to make the autocommands portable across different systems.
666
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000667 *autocmd-changes*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000668Matching with the pattern is done when an event is triggered. Changing the
669buffer name in one of the autocommands, or even deleting the buffer, does not
670change which autocommands will be executed. Example: >
671
672 au BufEnter *.foo bdel
673 au BufEnter *.foo set modified
674
675This will delete the current buffer and then set 'modified' in what has become
676the current buffer instead. Vim doesn't take into account that "*.foo"
677doesn't match with that buffer name. It matches "*.foo" with the name of the
678buffer at the moment the event was triggered.
679
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000680However, buffer-local autocommands will not be executed for a buffer that has
681been wiped out with |:bwipe|. After deleting the buffer with |:bdel| the
682buffer actually still exists (it becomes unlisted), thus the autocommands are
683still executed.
684
Bram Moolenaar071d4272004-06-13 20:20:40 +0000685==============================================================================
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00006867. Buffer-local autocommands *autocmd-buflocal* *autocmd-buffer-local*
687 *<buffer=N>* *<buffer=abuf>* *E680*
688
689Buffer-local autocommands are attached to a specific buffer. They are useful
690if the buffer does not have a name and when the name does not match a specific
691pattern. But it also means they must be explicitly added to each buffer.
692
693Instead of a pattern buffer-local autocommands use one of these forms:
694 <buffer> current buffer
695 <buffer=99> buffer number 99
696 <buffer=abuf> using <abuf> (only when executing autocommands)
697 |<abuf>|
698
699Examples: >
700 :au CursorHold <buffer> echo 'hold'
701 :au CursorHold <buffer=33> echo 'hold'
702 :au CursorHold <buffer=abuf> echo 'hold'
703
704All the commands for autocommands also work with buffer-local autocommands,
705simply use the special string instead of the pattern. Examples: >
706 :au! * <buffer> " remove buffer-local autotommands for
707 " current buffer
708 :au! * <buffer=33> " remove buffer-local autotommands for
709 " buffer #33
710 :dobuf :au! CursorHold <buffer> " remove autocmd for given event for all
711 " buffers
712 :au * <buffer> " list buffer-local autocommands for
713 " current buffer
714
715Note that when an autocommand is defined for the current buffer, it is stored
716with the buffer number. Thus it uses the form "<buffer=12>", where 12 is the
717number of the current buffer. You will see this when listing autocommands,
718for example.
719
720To test for presence of buffer-local autocommands use the |exists()| function
721as follows: >
722 :if exists("#CursorHold#<buffer=12>") | ... | endif
723 :if exists("#CursorHold#<buffer>") | ... | endif " for current buffer
724
725When a buffer is wiped out its buffer-local autocommands are also gone, of
726course. Note that when deleting a buffer, e.g., with ":bdel", it is only
727unlisted, the autocommands are still present. In order to see the removal of
728buffer-local autocommands: >
729 :set verbose=6
730
731It is not possible to define buffer-local autocommands for a non-existent
732buffer.
733
734==============================================================================
7358. Groups *autocmd-groups*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000736
737Autocommands can be put together in a group. This is useful for removing or
738executing a group of autocommands. For example, all the autocommands for
739syntax highlighting are put in the "highlight" group, to be able to execute
740":doautoall highlight BufRead" when the GUI starts.
741
742When no specific group is selected, Vim uses the default group. The default
743group does not have a name. You cannot execute the autocommands from the
744default group separately; you can execute them only by executing autocommands
745for all groups.
746
747Normally, when executing autocommands automatically, Vim uses the autocommands
748for all groups. The group only matters when executing autocommands with
749":doautocmd" or ":doautoall", or when defining or deleting autocommands.
750
751The group name can contain any characters except white space. The group name
752"end" is reserved (also in uppercase).
753
754The group name is case sensitive. Note that this is different from the event
755name!
756
757 *:aug* *:augroup*
758:aug[roup] {name} Define the autocmd group name for the
759 following ":autocmd" commands. The name "end"
760 or "END" selects the default group.
761
762 *:augroup-delete* *E367*
763:aug[roup]! {name} Delete the autocmd group {name}. Don't use
764 this if there is still an autocommand using
765 this group! This is not checked.
766
767To enter autocommands for a specific group, use this method:
7681. Select the group with ":augroup {name}".
7692. Delete any old autocommands with ":au!".
7703. Define the autocommands.
7714. Go back to the default group with "augroup END".
772
773Example: >
774 :augroup uncompress
775 : au!
776 : au BufEnter *.gz %!gunzip
777 :augroup END
778
779This prevents having the autocommands defined twice (e.g., after sourcing the
780.vimrc file again).
781
782==============================================================================
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00007839. Executing autocommands *autocmd-execute*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000784
785Vim can also execute Autocommands non-automatically. This is useful if you
786have changed autocommands, or when Vim has executed the wrong autocommands
787(e.g., the file pattern match was wrong).
788
789Note that the 'eventignore' option applies here too. Events listed in this
790option will not cause any commands to be executed.
791
792 *:do* *:doau* *:doautocmd* *E217*
793:do[autocmd] [group] {event} [fname]
794 Apply the autocommands matching [fname] (default:
795 current file name) for {event} to the current buffer.
796 You can use this when the current file name does not
797 match the right pattern, after changing settings, or
798 to execute autocommands for a certain event.
799 It's possible to use this inside an autocommand too,
800 so you can base the autocommands for one extension on
801 another extension. Example: >
802 :au Bufenter *.cpp so ~/.vimrc_cpp
803 :au Bufenter *.cpp doau BufEnter x.c
804< Be careful to avoid endless loops. See
805 |autocmd-nested|.
806
807 When the [group] argument is not given, Vim executes
808 the autocommands for all groups. When the [group]
809 argument is included, Vim executes only the matching
810 autocommands for that group. Note: if you use an
811 undefined group name, Vim gives you an error message.
812
813 *:doautoa* *:doautoall*
814:doautoa[ll] [group] {event} [fname]
815 Like ":doautocmd", but apply the autocommands to each
816 loaded buffer. Note that {fname} is used to select
817 the autocommands, not the buffers to which they are
818 applied.
819 Careful: Don't use this for autocommands that delete a
820 buffer, change to another buffer or change the
821 contents of a buffer; the result is unpredictable.
822 This command is intended for autocommands that set
823 options, change highlighting, and things like that.
824
825==============================================================================
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +000082610. Using autocommands *autocmd-use*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000827
828For WRITING FILES there are four possible sets of events. Vim uses only one
829of these sets for a write command:
830
831BufWriteCmd BufWritePre BufWritePost writing the whole buffer
832 FilterWritePre FilterWritePost writing to filter temp file
833FileAppendCmd FileAppendPre FileAppendPost appending to a file
834FileWriteCmd FileWritePre FileWritePost any other file write
835
836When there is a matching "*Cmd" autocommand, it is assumed it will do the
837writing. No further writing is done and the other events are not triggered.
838|Cmd-event|
839
840Note that the *WritePost commands should undo any changes to the buffer that
841were caused by the *WritePre commands; otherwise, writing the file will have
842the side effect of changing the buffer.
843
844Before executing the autocommands, the buffer from which the lines are to be
845written temporarily becomes the current buffer. Unless the autocommands
846change the current buffer or delete the previously current buffer, the
847previously current buffer is made the current buffer again.
848
849The *WritePre and *AppendPre autocommands must not delete the buffer from
850which the lines are to be written.
851
852The '[ and '] marks have a special position:
853- Before the *ReadPre event the '[ mark is set to the line just above where
854 the new lines will be inserted.
855- Before the *ReadPost event the '[ mark is set to the first line that was
856 just read, the '] mark to the last line.
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000857- Before executing the *WriteCmd, *WritePre and *AppendPre autocommands the '[
858 mark is set to the first line that will be written, the '] mark to the last
859 line.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000860Careful: '[ and '] change when using commands that change the buffer.
861
862In commands which expect a file name, you can use "<afile>" for the file name
863that is being read |:<afile>| (you can also use "%" for the current file
864name). "<abuf>" can be used for the buffer number of the currently effective
865buffer. This also works for buffers that doesn't have a name. But it doesn't
866work for files without a buffer (e.g., with ":r file").
867
868 *gzip-example*
869Examples for reading and writing compressed files: >
870 :augroup gzip
871 : autocmd!
872 : autocmd BufReadPre,FileReadPre *.gz set bin
873 : autocmd BufReadPost,FileReadPost *.gz '[,']!gunzip
874 : autocmd BufReadPost,FileReadPost *.gz set nobin
875 : autocmd BufReadPost,FileReadPost *.gz execute ":doautocmd BufReadPost " . expand("%:r")
876 : autocmd BufWritePost,FileWritePost *.gz !mv <afile> <afile>:r
877 : autocmd BufWritePost,FileWritePost *.gz !gzip <afile>:r
878
879 : autocmd FileAppendPre *.gz !gunzip <afile>
880 : autocmd FileAppendPre *.gz !mv <afile>:r <afile>
881 : autocmd FileAppendPost *.gz !mv <afile> <afile>:r
882 : autocmd FileAppendPost *.gz !gzip <afile>:r
883 :augroup END
884
885The "gzip" group is used to be able to delete any existing autocommands with
886":autocmd!", for when the file is sourced twice.
887
888("<afile>:r" is the file name without the extension, see |:_%:|)
889
890The commands executed for the BufNewFile, BufRead/BufReadPost, BufWritePost,
891FileAppendPost and VimLeave events do not set or reset the changed flag of the
892buffer. When you decompress the buffer with the BufReadPost autocommands, you
893can still exit with ":q". When you use ":undo" in BufWritePost to undo the
894changes made by BufWritePre commands, you can still do ":q" (this also makes
895"ZZ" work). If you do want the buffer to be marked as modified, set the
896'modified' option.
897
898To execute Normal mode commands from an autocommand, use the ":normal"
899command. Use with care! If the Normal mode command is not finished, the user
900needs to type characters (e.g., after ":normal m" you need to type a mark
901name).
902
903If you want the buffer to be unmodified after changing it, reset the
904'modified' option. This makes it possible to exit the buffer with ":q"
905instead of ":q!".
906
907 *autocmd-nested* *E218*
908By default, autocommands do not nest. If you use ":e" or ":w" in an
909autocommand, Vim does not execute the BufRead and BufWrite autocommands for
910those commands. If you do want this, use the "nested" flag for those commands
911in which you want nesting. For example: >
912 :autocmd FileChangedShell *.c nested e!
913The nesting is limited to 10 levels to get out of recursive loops.
914
915It's possible to use the ":au" command in an autocommand. This can be a
916self-modifying command! This can be useful for an autocommand that should
917execute only once.
918
919There is currently no way to disable the autocommands. If you want to write a
920file without executing the autocommands for that type of file, write it under
921another name and rename it with a shell command. In some situations you can
922use the 'eventignore' option.
923
924Note: When reading a file (with ":read file" or with a filter command) and the
925last line in the file does not have an <EOL>, Vim remembers this. At the next
926write (with ":write file" or with a filter command), if the same line is
927written again as the last line in a file AND 'binary' is set, Vim does not
928supply an <EOL>. This makes a filter command on the just read lines write the
929same file as was read, and makes a write command on just filtered lines write
930the same file as was read from the filter. For example, another way to write
931a compressed file: >
932
933 :autocmd FileWritePre *.gz set bin|'[,']!gzip
934 :autocmd FileWritePost *.gz undo|set nobin
935<
936 *autocommand-pattern*
937You can specify multiple patterns, separated by commas. Here are some
938examples: >
939
940 :autocmd BufRead * set tw=79 nocin ic infercase fo=2croq
941 :autocmd BufRead .letter set tw=72 fo=2tcrq
942 :autocmd BufEnter .letter set dict=/usr/lib/dict/words
943 :autocmd BufLeave .letter set dict=
944 :autocmd BufRead,BufNewFile *.c,*.h set tw=0 cin noic
945 :autocmd BufEnter *.c,*.h abbr FOR for (i = 0; i < 3; ++i)<CR>{<CR>}<Esc>O
946 :autocmd BufLeave *.c,*.h unabbr FOR
947
948For makefiles (makefile, Makefile, imakefile, makefile.unix, etc.): >
949
950 :autocmd BufEnter ?akefile* set include=^s\=include
951 :autocmd BufLeave ?akefile* set include&
952
953To always start editing C files at the first function: >
954
955 :autocmd BufRead *.c,*.h 1;/^{
956
957Without the "1;" above, the search would start from wherever the file was
958entered, rather than from the start of the file.
959
960 *skeleton* *template*
961To read a skeleton (template) file when opening a new file: >
962
963 :autocmd BufNewFile *.c 0r ~/vim/skeleton.c
964 :autocmd BufNewFile *.h 0r ~/vim/skeleton.h
965 :autocmd BufNewFile *.java 0r ~/vim/skeleton.java
966
967To insert the current date and time in a *.html file when writing it: >
968
969 :autocmd BufWritePre,FileWritePre *.html ks|call LastMod()|'s
970 :fun LastMod()
971 : if line("$") > 20
972 : let l = 20
973 : else
974 : let l = line("$")
975 : endif
976 : exe "1," . l . "g/Last modified: /s/Last modified: .*/Last modified: " .
977 : \ strftime("%Y %b %d")
978 :endfun
979
980You need to have a line "Last modified: <date time>" in the first 20 lines
981of the file for this to work. Vim replaces <date time> (and anything in the
982same line after it) with the current date and time. Explanation:
983 ks mark current position with mark 's'
984 call LastMod() call the LastMod() function to do the work
985 's return the cursor to the old position
986The LastMod() function checks if the file is shorter than 20 lines, and then
987uses the ":g" command to find lines that contain "Last modified: ". For those
988lines the ":s" command is executed to replace the existing date with the
989current one. The ":execute" command is used to be able to use an expression
990for the ":g" and ":s" commands. The date is obtained with the strftime()
991function. You can change its argument to get another date string.
992
993When entering :autocmd on the command-line, completion of events and command
994names may be done (with <Tab>, CTRL-D, etc.) where appropriate.
995
996Vim executes all matching autocommands in the order that you specify them.
997It is recommended that your first autocommand be used for all files by using
998"*" as the file pattern. This means that you can define defaults you like
999here for any settings, and if there is another matching autocommand it will
1000override these. But if there is no other matching autocommand, then at least
1001your default settings are recovered (if entering this file from another for
1002which autocommands did match). Note that "*" will also match files starting
1003with ".", unlike Unix shells.
1004
1005 *autocmd-searchpat*
1006Autocommands do not change the current search patterns. Vim saves the current
1007search patterns before executing autocommands then restores them after the
1008autocommands finish. This means that autocommands do not affect the strings
1009highlighted with the 'hlsearch' option. Within autocommands, you can still
1010use search patterns normally, e.g., with the "n" command.
1011If you want an autocommand to set the search pattern, such that it is used
1012after the autocommand finishes, use the ":let @/ =" command.
1013The search-highlighting cannot be switched off with ":nohlsearch" in an
1014autocommand. Use the 'h' flag in the 'viminfo' option to disable search-
1015highlighting when starting Vim.
1016
1017 *Cmd-event*
1018When using one of the "*Cmd" events, the matching autocommands are expected to
1019do the file reading or writing. This can be used when working with a special
1020kind of file, for example on a remote system.
1021CAREFUL: If you use these events in a wrong way, it may have the effect of
1022making it impossible to read or write the matching files! Make sure you test
1023your autocommands properly. Best is to use a pattern that will never match a
1024normal file name, for example "ftp://*".
1025
1026When defining a BufReadCmd it will be difficult for Vim to recover a crashed
1027editing session. When recovering from the original file, Vim reads only those
1028parts of a file that are not found in the swap file. Since that is not
1029possible with a BufReadCmd, use the |:preserve| command to make sure the
1030original file isn't needed for recovery. You might want to do this only when
1031you expect the file to be modified.
1032
1033The |v:cmdarg| variable holds the "++enc=" and "++ff=" argument that are
1034effective. These should be used for the command that reads/writes the file.
1035The |v:cmdbang| variable is one when "!" was used, zero otherwise.
1036
1037See the $VIMRUNTIME/plugin/netrw.vim for examples.
1038
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00001039
Bram Moolenaar071d4272004-06-13 20:20:40 +00001040 vim:tw=78:ts=8:ft=help:norl: