blob: 37a51ad99dee2cca6d2e4802f108ecac2fb00a2e [file] [log] [blame]
Bram Moolenaara5792f52005-11-23 21:25:05 +00001*autocmd.txt* For Vim version 7.0aa. Last change: 2005 Nov 21
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.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000327 This event is triggered when making the first
328 change in a buffer or the first change after
329 'readonly' was set,
330 just before the change is applied to the text.
331 WARNING: If the autocommand moves the cursor
Bram Moolenaar071d4272004-06-13 20:20:40 +0000332 the effect of the change is undefined.
333 *FocusGained*
334FocusGained When Vim got input focus. Only for the GUI
335 version and a few console versions where this
336 can be detected.
337 *FocusLost*
338FocusLost When Vim lost input focus. Only for the GUI
339 version and a few console versions where this
Bram Moolenaar843ee412004-06-30 16:16:41 +0000340 can be detected. May also happen when a
341 dialog pops up.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342 *FuncUndefined*
343FuncUndefined When a user function is used but it isn't
344 defined. Useful for defining a function only
345 when it's used. Both <amatch> and <afile> are
346 set to the name of the function.
Bram Moolenaar7c626922005-02-07 22:01:03 +0000347 See |autoload-functions|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000348 *CursorHold*
349CursorHold When the user doesn't press a key for the time
350 specified with 'updatetime'. Not re-triggered
351 until the user has pressed a key (i.e. doesn't
352 fire every 'updatetime' ms if you leave Vim to
353 make some coffee. :) See |CursorHold-example|
354 for previewing tags.
355 This event is only triggered in Normal mode.
356 Note: Interactive commands cannot be used for
357 this event. There is no hit-enter prompt,
358 the screen is updated directly (when needed).
359 Note: In the future there will probably be
360 another option to set the time.
361 Hint: to force an update of the status lines
362 use: >
363 :let &ro = &ro
364< {only on Amiga, Unix, Win32, MSDOS and all GUI
365 versions}
366 *BufEnter*
367BufEnter After entering a buffer. Useful for setting
368 options for a file type. Also executed when
369 starting to edit a buffer, after the
370 BufReadPost autocommands.
371 *BufLeave*
372BufLeave Before leaving to another buffer. Also when
373 leaving or closing the current window and the
374 new current window is not for the same buffer.
375 Not used for ":qa" or ":q" when exiting Vim.
376 *BufWinEnter*
377BufWinEnter After a buffer is displayed in a window. This
378 can be when the buffer is loaded (after
379 processing the modelines), when a hidden
380 buffer is displayed in a window (and is no
381 longer hidden) or a buffer already visible in
382 a window is also displayed in another window.
383 *BufWinLeave*
384BufWinLeave Before a buffer is removed from a window.
385 Not when it's still visible in another window.
386 Also triggered when exiting. It's triggered
387 before BufUnload or BufHidden.
388 NOTE: When this autocommand is executed, the
389 current buffer "%" may be different from the
390 buffer being unloaded "<afile>".
391 *BufUnload*
392BufUnload Before unloading a buffer. This is when the
393 text in the buffer is going to be freed. This
394 may be after a BufWritePost and before a
395 BufDelete. Also used for all buffers that are
396 loaded when Vim is going to exit.
397 NOTE: When this autocommand is executed, the
398 current buffer "%" may be different from the
399 buffer being unloaded "<afile>".
400 *BufHidden*
401BufHidden Just after a buffer has become hidden. That
402 is, when there are no longer windows that show
403 the buffer, but the buffer is not unloaded or
404 deleted. Not used for ":qa" or ":q" when
405 exiting Vim.
406 NOTE: When this autocommand is executed, the
407 current buffer "%" may be different from the
408 buffer being unloaded "<afile>".
409 *BufNew*
410BufNew Just after creating a new buffer. Also used
411 just after a buffer has been renamed. When
412 the buffer is added to the buffer list BufAdd
413 will be triggered too.
414 NOTE: When this autocommand is executed, the
415 current buffer "%" may be different from the
416 buffer being created "<afile>".
417 *BufCreate* *BufAdd*
418BufAdd or BufCreate Just after creating a new buffer which is
419 added to the buffer list, or adding a buffer
420 to the buffer list.
421 Also used just after a buffer in the buffer
422 list has been renamed.
423 The BufCreate event is for historic reasons.
424 NOTE: When this autocommand is executed, the
425 current buffer "%" may be different from the
426 buffer being created "<afile>".
427 *BufDelete*
428BufDelete Before deleting a buffer from the buffer list.
429 The BufUnload may be called first (if the
430 buffer was loaded).
431 Also used just before a buffer in the buffer
432 list is renamed.
433 NOTE: When this autocommand is executed, the
434 current buffer "%" may be different from the
435 buffer being deleted "<afile>".
436 *BufWipeout*
437BufWipeout Before completely deleting a buffer. The
438 BufUnload and BufDelete events may be called
439 first (if the buffer was loaded and was in the
440 buffer list). Also used just before a buffer
441 is renamed (also when it's not in the buffer
442 list).
443 NOTE: When this autocommand is executed, the
444 current buffer "%" may be different from the
445 buffer being deleted "<afile>".
446 *WinEnter*
447WinEnter After entering another window. Not done for
448 the first window, when Vim has just started.
449 Useful for setting the window height.
450 If the window is for another buffer, Vim
451 executes the BufEnter autocommands after the
452 WinEnter autocommands.
453 Note: When using ":split fname" the WinEnter
454 event is triggered after the split but before
455 the file "fname" is loaded.
456 *WinLeave*
457WinLeave Before leaving a window. If the window to be
458 entered next is for a different buffer, Vim
459 executes the BufLeave autocommands before the
460 WinLeave autocommands (but not for ":new").
461 Not used for ":qa" or ":q" when exiting Vim.
462 *CmdwinEnter*
463CmdwinEnter After entering the command-line window.
464 Useful for setting options specifically for
465 this special type of window. This is
466 triggered _instead_ of BufEnter and WinEnter.
467 <afile> is set to a single character,
468 indicating the type of command-line.
469 |cmdwin-char|
470 *CmdwinLeave*
471CmdwinLeave Before leaving the command-line window.
472 Useful to clean up any global setting done
473 with CmdwinEnter. This is triggered _instead_
474 of BufLeave and WinLeave.
475 <afile> is set to a single character,
476 indicating the type of command-line.
477 |cmdwin-char|
478 *GUIEnter*
479GUIEnter After starting the GUI successfully, and after
480 opening the window. It is triggered before
481 VimEnter when using gvim. Can be used to
482 position the window from a .gvimrc file: >
483 :autocmd GUIEnter * winpos 100 50
484< *VimEnter*
485VimEnter After doing all the startup stuff, including
486 loading .vimrc files, executing the "-c cmd"
487 arguments, creating all windows and loading
488 the buffers in them.
489 *VimLeavePre*
490VimLeavePre Before exiting Vim, just before writing the
491 .viminfo file. This is executed only once,
492 if there is a match with the name of what
493 happens to be the current buffer when exiting.
494 Mostly useful with a "*" pattern. >
495 :autocmd VimLeavePre * call CleanupStuff()
496< To detect an abnormal exit use |v:dying|.
497 *VimLeave*
498VimLeave Before exiting Vim, just after writing the
499 .viminfo file. Executed only once, like
500 VimLeavePre.
501 To detect an abnormal exit use |v:dying|.
502 *EncodingChanged*
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000503EncodingChanged Fires off after the 'encoding' option has been
Bram Moolenaar071d4272004-06-13 20:20:40 +0000504 changed. Useful to set up fonts, for example.
Bram Moolenaar843ee412004-06-30 16:16:41 +0000505 *InsertEnter*
506InsertEnter When starting Insert mode. Also for Replace
507 mode and Virtual Replace mode. The
508 |v:insertmode| variable indicates the mode.
509 Be careful not to move the cursor or do
510 anything else that the user does not expect.
511 *InsertChange*
512InsertChange When typing <Insert> while in Insert or
513 Replace mode. The |v:insertmode| variable
514 indicates the new mode.
515 Be careful not to move the cursor or do
516 anything else that the user does not expect.
517 *InsertLeave*
518InsertLeave When leaving Insert mode. Also when using
Bram Moolenaar677ee682005-01-27 14:41:15 +0000519 CTRL-O |i_CTRL-O|. But not for |i_CTRL-C|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000520 *FileEncoding*
521FileEncoding Obsolete. It still works and is equivalent
522 to |EncodingChanged|.
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000523 *ColorScheme*
524ColorScheme After loading a color scheme. |:colorscheme|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000525 *RemoteReply*
526RemoteReply When a reply from a Vim that functions as
527 server was received |server2client()|.
528 <amatch> is equal to the {serverid} from which
529 the reply was sent, and <afile> is the actual
530 reply string.
531 Note that even if an autocommand is defined,
532 the reply should be read with |remote_read()|
533 to consume it.
534 *TermChanged*
535TermChanged After the value of 'term' has changed. Useful
536 for re-loading the syntax file to update the
537 colors, fonts and other terminal-dependent
538 settings. Executed for all loaded buffers.
539 *TermResponse*
540TermResponse After the response to |t_RV| is received from
541 the terminal. The value of |v:termresponse|
542 can be used to do things depending on the
543 terminal version.
Bram Moolenaar7c626922005-02-07 22:01:03 +0000544QuickFixCmdPre *QuickFixCmdPre*
545 Before a quickfix command is run (|:make|,
546 |:grep|, |:grepadd|, |:vimgrep|,
547 |:vimgrepadd|). The pattern is matched against
548 the command being run. When |:grep| is used
549 but 'grepprg' is set to "internal" it still
550 matches "grep".
551 This command cannot be used to set the
552 'makeprg' and 'grepprg' variables.
553 If this command causes an error, the quickfix
554 command is not executed.
555QuickFixCmdPost *QuickFixCmdPost*
556 like QuickFixCmdPre, but after a quickfix
557 command is run.
Bram Moolenaar9372a112005-12-06 19:59:18 +0000558 *SessionLoadPost*
559SessionLoadPost After loading the session file created using
560 the |:mksession| command.
Bram Moolenaar45360022005-07-21 21:08:21 +0000561 *MenuPopup*
562MenuPopup Just before showing the popup menu (under the
563 right mouse button). Useful for adjusting the
564 menu for what is under the cursor or mouse
565 pointer.
566 The pattern is matched against a single
567 character representing the mode:
568 n Normal
569 v Visual
570 o Operator-pending
571 i Insert
572 c Commmand line
Bram Moolenaar071d4272004-06-13 20:20:40 +0000573 *UserGettingBored*
574UserGettingBored When the user hits CTRL-C. Just kidding! :-)
575 *User*
576User Never executed automatically. To be used for
577 autocommands that are only executed with
578 ":doautocmd".
579
580You can specify a comma-separated list of event names. No white space can be
581used in this list. The command applies to all the events in the list.
582
583For READING FILES there are four kinds of events possible:
584 BufNewFile starting to edit a non-existent file
585 BufReadPre BufReadPost starting to edit an existing file
586 FilterReadPre FilterReadPost read the temp file with filter output
587 FileReadPre FileReadPost any other file read
588Vim uses only one of these four kinds when reading a file. The "Pre" and
589"Post" events are both triggered, before and after reading the file.
590
591Note that the autocommands for the *ReadPre events and all the Filter events
592are not allowed to change the current buffer (you will get an error message if
593this happens). This is to prevent the file to be read into the wrong buffer.
594
595Note that the 'modified' flag is reset AFTER executing the BufReadPost
596and BufNewFile autocommands. But when the 'modified' option was set by the
597autocommands, this doesn't happen.
598
599You can use the 'eventignore' option to ignore a number of events or all
600events.
601
602==============================================================================
6036. Patterns *autocmd-patterns* *{pat}*
604
605The file pattern {pat} is tested for a match against the file name in one of
606two ways:
6071. When there is no '/' in the pattern, Vim checks for a match against only
608 the tail part of the file name (without its leading directory path).
6092. When there is a '/' in the pattern, Vim checks for a match against the
610 both short file name (as you typed it) and the full file name (after
611 expanding it to a full path and resolving symbolic links).
612
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000613The special pattern <buffer> or <buffer=N> is used for buffer-local
614autocommands |autocmd-buflocal|. This pattern is not matched against the name
615of a buffer.
616
Bram Moolenaar071d4272004-06-13 20:20:40 +0000617Examples: >
618 :autocmd BufRead *.txt set et
619Set the 'et' option for all text files. >
620
621 :autocmd BufRead /vim/src/*.c set cindent
622Set the 'cindent' option for C files in the /vim/src directory. >
623
624 :autocmd BufRead /tmp/*.c set ts=5
625If you have a link from "/tmp/test.c" to "/home/nobody/vim/src/test.c", and
626you start editing "/tmp/test.c", this autocommand will match.
627
628Note: To match part of a path, but not from the root directory, use a '*' as
629the first character. Example: >
630 :autocmd BufRead */doc/*.txt set tw=78
631This autocommand will for example be executed for "/tmp/doc/xx.txt" and
632"/usr/home/piet/doc/yy.txt". The number of directories does not matter here.
633
634
635The file name that the pattern is matched against is after expanding
636wildcards. Thus is you issue this command: >
637 :e $ROOTDIR/main.$EXT
638The argument is first expanded to: >
639 /usr/root/main.py
640Before it's matched with the pattern of the autocommand. Careful with this
641when using events like FileReadCmd, the value of <amatch> may not be what you
642expect.
643
644
645Environment variables can be used in a pattern: >
646 :autocmd BufRead $VIMRUNTIME/doc/*.txt set expandtab
647And ~ can be used for the home directory (if $HOME is defined): >
648 :autocmd BufWritePost ~/.vimrc so ~/.vimrc
649 :autocmd BufRead ~archive/* set readonly
650The environment variable is expanded when the autocommand is defined, not when
651the autocommand is executed. This is different from the command!
652
653 *file-pattern*
654The pattern is interpreted like mostly used in file names:
655 * matches any sequence of characters
656 ? matches any single character
657 \? matches a '?'
658 . matches a '.'
659 ~ matches a '~'
660 , separates patterns
661 \, matches a ','
662 { } like \( \) in a |pattern|
663 , inside { }: like \| in a |pattern|
664 \ special meaning like in a |pattern|
665 [ch] matches 'c' or 'h'
666 [^ch] match any character but 'c' and 'h'
667
668Note that for all systems the '/' character is used for path separator (even
669MS-DOS and OS/2). This was done because the backslash is difficult to use
670in a pattern and to make the autocommands portable across different systems.
671
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000672 *autocmd-changes*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000673Matching with the pattern is done when an event is triggered. Changing the
674buffer name in one of the autocommands, or even deleting the buffer, does not
675change which autocommands will be executed. Example: >
676
677 au BufEnter *.foo bdel
678 au BufEnter *.foo set modified
679
680This will delete the current buffer and then set 'modified' in what has become
681the current buffer instead. Vim doesn't take into account that "*.foo"
682doesn't match with that buffer name. It matches "*.foo" with the name of the
683buffer at the moment the event was triggered.
684
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000685However, buffer-local autocommands will not be executed for a buffer that has
686been wiped out with |:bwipe|. After deleting the buffer with |:bdel| the
687buffer actually still exists (it becomes unlisted), thus the autocommands are
688still executed.
689
Bram Moolenaar071d4272004-06-13 20:20:40 +0000690==============================================================================
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00006917. Buffer-local autocommands *autocmd-buflocal* *autocmd-buffer-local*
692 *<buffer=N>* *<buffer=abuf>* *E680*
693
694Buffer-local autocommands are attached to a specific buffer. They are useful
695if the buffer does not have a name and when the name does not match a specific
696pattern. But it also means they must be explicitly added to each buffer.
697
698Instead of a pattern buffer-local autocommands use one of these forms:
699 <buffer> current buffer
700 <buffer=99> buffer number 99
701 <buffer=abuf> using <abuf> (only when executing autocommands)
702 |<abuf>|
703
704Examples: >
705 :au CursorHold <buffer> echo 'hold'
706 :au CursorHold <buffer=33> echo 'hold'
707 :au CursorHold <buffer=abuf> echo 'hold'
708
709All the commands for autocommands also work with buffer-local autocommands,
710simply use the special string instead of the pattern. Examples: >
711 :au! * <buffer> " remove buffer-local autotommands for
712 " current buffer
713 :au! * <buffer=33> " remove buffer-local autotommands for
714 " buffer #33
715 :dobuf :au! CursorHold <buffer> " remove autocmd for given event for all
716 " buffers
717 :au * <buffer> " list buffer-local autocommands for
718 " current buffer
719
720Note that when an autocommand is defined for the current buffer, it is stored
721with the buffer number. Thus it uses the form "<buffer=12>", where 12 is the
722number of the current buffer. You will see this when listing autocommands,
723for example.
724
725To test for presence of buffer-local autocommands use the |exists()| function
726as follows: >
727 :if exists("#CursorHold#<buffer=12>") | ... | endif
728 :if exists("#CursorHold#<buffer>") | ... | endif " for current buffer
729
730When a buffer is wiped out its buffer-local autocommands are also gone, of
731course. Note that when deleting a buffer, e.g., with ":bdel", it is only
732unlisted, the autocommands are still present. In order to see the removal of
733buffer-local autocommands: >
734 :set verbose=6
735
736It is not possible to define buffer-local autocommands for a non-existent
737buffer.
738
739==============================================================================
7408. Groups *autocmd-groups*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000741
742Autocommands can be put together in a group. This is useful for removing or
743executing a group of autocommands. For example, all the autocommands for
744syntax highlighting are put in the "highlight" group, to be able to execute
745":doautoall highlight BufRead" when the GUI starts.
746
747When no specific group is selected, Vim uses the default group. The default
748group does not have a name. You cannot execute the autocommands from the
749default group separately; you can execute them only by executing autocommands
750for all groups.
751
752Normally, when executing autocommands automatically, Vim uses the autocommands
753for all groups. The group only matters when executing autocommands with
754":doautocmd" or ":doautoall", or when defining or deleting autocommands.
755
756The group name can contain any characters except white space. The group name
757"end" is reserved (also in uppercase).
758
759The group name is case sensitive. Note that this is different from the event
760name!
761
762 *:aug* *:augroup*
763:aug[roup] {name} Define the autocmd group name for the
764 following ":autocmd" commands. The name "end"
765 or "END" selects the default group.
766
767 *:augroup-delete* *E367*
768:aug[roup]! {name} Delete the autocmd group {name}. Don't use
769 this if there is still an autocommand using
770 this group! This is not checked.
771
772To enter autocommands for a specific group, use this method:
7731. Select the group with ":augroup {name}".
7742. Delete any old autocommands with ":au!".
7753. Define the autocommands.
7764. Go back to the default group with "augroup END".
777
778Example: >
779 :augroup uncompress
780 : au!
781 : au BufEnter *.gz %!gunzip
782 :augroup END
783
784This prevents having the autocommands defined twice (e.g., after sourcing the
785.vimrc file again).
786
787==============================================================================
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00007889. Executing autocommands *autocmd-execute*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000789
790Vim can also execute Autocommands non-automatically. This is useful if you
791have changed autocommands, or when Vim has executed the wrong autocommands
792(e.g., the file pattern match was wrong).
793
794Note that the 'eventignore' option applies here too. Events listed in this
795option will not cause any commands to be executed.
796
797 *:do* *:doau* *:doautocmd* *E217*
798:do[autocmd] [group] {event} [fname]
799 Apply the autocommands matching [fname] (default:
800 current file name) for {event} to the current buffer.
801 You can use this when the current file name does not
802 match the right pattern, after changing settings, or
803 to execute autocommands for a certain event.
804 It's possible to use this inside an autocommand too,
805 so you can base the autocommands for one extension on
806 another extension. Example: >
807 :au Bufenter *.cpp so ~/.vimrc_cpp
808 :au Bufenter *.cpp doau BufEnter x.c
809< Be careful to avoid endless loops. See
810 |autocmd-nested|.
811
812 When the [group] argument is not given, Vim executes
813 the autocommands for all groups. When the [group]
814 argument is included, Vim executes only the matching
815 autocommands for that group. Note: if you use an
816 undefined group name, Vim gives you an error message.
817
Bram Moolenaara5792f52005-11-23 21:25:05 +0000818 After applying the autocommands the modelines are
819 processed, so that their overrule the settings from
820 autocommands, like what happens when editing a file.
821
Bram Moolenaar071d4272004-06-13 20:20:40 +0000822 *:doautoa* *:doautoall*
823:doautoa[ll] [group] {event} [fname]
824 Like ":doautocmd", but apply the autocommands to each
825 loaded buffer. Note that {fname} is used to select
826 the autocommands, not the buffers to which they are
827 applied.
828 Careful: Don't use this for autocommands that delete a
829 buffer, change to another buffer or change the
830 contents of a buffer; the result is unpredictable.
831 This command is intended for autocommands that set
832 options, change highlighting, and things like that.
833
834==============================================================================
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +000083510. Using autocommands *autocmd-use*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000836
837For WRITING FILES there are four possible sets of events. Vim uses only one
838of these sets for a write command:
839
840BufWriteCmd BufWritePre BufWritePost writing the whole buffer
841 FilterWritePre FilterWritePost writing to filter temp file
842FileAppendCmd FileAppendPre FileAppendPost appending to a file
843FileWriteCmd FileWritePre FileWritePost any other file write
844
845When there is a matching "*Cmd" autocommand, it is assumed it will do the
846writing. No further writing is done and the other events are not triggered.
847|Cmd-event|
848
849Note that the *WritePost commands should undo any changes to the buffer that
850were caused by the *WritePre commands; otherwise, writing the file will have
851the side effect of changing the buffer.
852
853Before executing the autocommands, the buffer from which the lines are to be
854written temporarily becomes the current buffer. Unless the autocommands
855change the current buffer or delete the previously current buffer, the
856previously current buffer is made the current buffer again.
857
858The *WritePre and *AppendPre autocommands must not delete the buffer from
859which the lines are to be written.
860
861The '[ and '] marks have a special position:
862- Before the *ReadPre event the '[ mark is set to the line just above where
863 the new lines will be inserted.
864- Before the *ReadPost event the '[ mark is set to the first line that was
865 just read, the '] mark to the last line.
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000866- Before executing the *WriteCmd, *WritePre and *AppendPre autocommands the '[
867 mark is set to the first line that will be written, the '] mark to the last
868 line.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000869Careful: '[ and '] change when using commands that change the buffer.
870
871In commands which expect a file name, you can use "<afile>" for the file name
872that is being read |:<afile>| (you can also use "%" for the current file
873name). "<abuf>" can be used for the buffer number of the currently effective
874buffer. This also works for buffers that doesn't have a name. But it doesn't
875work for files without a buffer (e.g., with ":r file").
876
877 *gzip-example*
878Examples for reading and writing compressed files: >
879 :augroup gzip
880 : autocmd!
881 : autocmd BufReadPre,FileReadPre *.gz set bin
882 : autocmd BufReadPost,FileReadPost *.gz '[,']!gunzip
883 : autocmd BufReadPost,FileReadPost *.gz set nobin
884 : autocmd BufReadPost,FileReadPost *.gz execute ":doautocmd BufReadPost " . expand("%:r")
885 : autocmd BufWritePost,FileWritePost *.gz !mv <afile> <afile>:r
886 : autocmd BufWritePost,FileWritePost *.gz !gzip <afile>:r
887
888 : autocmd FileAppendPre *.gz !gunzip <afile>
889 : autocmd FileAppendPre *.gz !mv <afile>:r <afile>
890 : autocmd FileAppendPost *.gz !mv <afile> <afile>:r
891 : autocmd FileAppendPost *.gz !gzip <afile>:r
892 :augroup END
893
894The "gzip" group is used to be able to delete any existing autocommands with
895":autocmd!", for when the file is sourced twice.
896
897("<afile>:r" is the file name without the extension, see |:_%:|)
898
899The commands executed for the BufNewFile, BufRead/BufReadPost, BufWritePost,
900FileAppendPost and VimLeave events do not set or reset the changed flag of the
901buffer. When you decompress the buffer with the BufReadPost autocommands, you
902can still exit with ":q". When you use ":undo" in BufWritePost to undo the
903changes made by BufWritePre commands, you can still do ":q" (this also makes
904"ZZ" work). If you do want the buffer to be marked as modified, set the
905'modified' option.
906
907To execute Normal mode commands from an autocommand, use the ":normal"
908command. Use with care! If the Normal mode command is not finished, the user
909needs to type characters (e.g., after ":normal m" you need to type a mark
910name).
911
912If you want the buffer to be unmodified after changing it, reset the
913'modified' option. This makes it possible to exit the buffer with ":q"
914instead of ":q!".
915
916 *autocmd-nested* *E218*
917By default, autocommands do not nest. If you use ":e" or ":w" in an
918autocommand, Vim does not execute the BufRead and BufWrite autocommands for
919those commands. If you do want this, use the "nested" flag for those commands
920in which you want nesting. For example: >
921 :autocmd FileChangedShell *.c nested e!
922The nesting is limited to 10 levels to get out of recursive loops.
923
924It's possible to use the ":au" command in an autocommand. This can be a
925self-modifying command! This can be useful for an autocommand that should
926execute only once.
927
928There is currently no way to disable the autocommands. If you want to write a
929file without executing the autocommands for that type of file, write it under
930another name and rename it with a shell command. In some situations you can
931use the 'eventignore' option.
932
933Note: When reading a file (with ":read file" or with a filter command) and the
934last line in the file does not have an <EOL>, Vim remembers this. At the next
935write (with ":write file" or with a filter command), if the same line is
936written again as the last line in a file AND 'binary' is set, Vim does not
937supply an <EOL>. This makes a filter command on the just read lines write the
938same file as was read, and makes a write command on just filtered lines write
939the same file as was read from the filter. For example, another way to write
940a compressed file: >
941
942 :autocmd FileWritePre *.gz set bin|'[,']!gzip
943 :autocmd FileWritePost *.gz undo|set nobin
944<
945 *autocommand-pattern*
946You can specify multiple patterns, separated by commas. Here are some
947examples: >
948
949 :autocmd BufRead * set tw=79 nocin ic infercase fo=2croq
950 :autocmd BufRead .letter set tw=72 fo=2tcrq
951 :autocmd BufEnter .letter set dict=/usr/lib/dict/words
952 :autocmd BufLeave .letter set dict=
953 :autocmd BufRead,BufNewFile *.c,*.h set tw=0 cin noic
954 :autocmd BufEnter *.c,*.h abbr FOR for (i = 0; i < 3; ++i)<CR>{<CR>}<Esc>O
955 :autocmd BufLeave *.c,*.h unabbr FOR
956
957For makefiles (makefile, Makefile, imakefile, makefile.unix, etc.): >
958
959 :autocmd BufEnter ?akefile* set include=^s\=include
960 :autocmd BufLeave ?akefile* set include&
961
962To always start editing C files at the first function: >
963
964 :autocmd BufRead *.c,*.h 1;/^{
965
966Without the "1;" above, the search would start from wherever the file was
967entered, rather than from the start of the file.
968
969 *skeleton* *template*
970To read a skeleton (template) file when opening a new file: >
971
972 :autocmd BufNewFile *.c 0r ~/vim/skeleton.c
973 :autocmd BufNewFile *.h 0r ~/vim/skeleton.h
974 :autocmd BufNewFile *.java 0r ~/vim/skeleton.java
975
976To insert the current date and time in a *.html file when writing it: >
977
978 :autocmd BufWritePre,FileWritePre *.html ks|call LastMod()|'s
979 :fun LastMod()
980 : if line("$") > 20
981 : let l = 20
982 : else
983 : let l = line("$")
984 : endif
985 : exe "1," . l . "g/Last modified: /s/Last modified: .*/Last modified: " .
986 : \ strftime("%Y %b %d")
987 :endfun
988
989You need to have a line "Last modified: <date time>" in the first 20 lines
990of the file for this to work. Vim replaces <date time> (and anything in the
991same line after it) with the current date and time. Explanation:
992 ks mark current position with mark 's'
993 call LastMod() call the LastMod() function to do the work
994 's return the cursor to the old position
995The LastMod() function checks if the file is shorter than 20 lines, and then
996uses the ":g" command to find lines that contain "Last modified: ". For those
997lines the ":s" command is executed to replace the existing date with the
998current one. The ":execute" command is used to be able to use an expression
999for the ":g" and ":s" commands. The date is obtained with the strftime()
1000function. You can change its argument to get another date string.
1001
1002When entering :autocmd on the command-line, completion of events and command
1003names may be done (with <Tab>, CTRL-D, etc.) where appropriate.
1004
1005Vim executes all matching autocommands in the order that you specify them.
1006It is recommended that your first autocommand be used for all files by using
1007"*" as the file pattern. This means that you can define defaults you like
1008here for any settings, and if there is another matching autocommand it will
1009override these. But if there is no other matching autocommand, then at least
1010your default settings are recovered (if entering this file from another for
1011which autocommands did match). Note that "*" will also match files starting
1012with ".", unlike Unix shells.
1013
1014 *autocmd-searchpat*
1015Autocommands do not change the current search patterns. Vim saves the current
1016search patterns before executing autocommands then restores them after the
1017autocommands finish. This means that autocommands do not affect the strings
1018highlighted with the 'hlsearch' option. Within autocommands, you can still
1019use search patterns normally, e.g., with the "n" command.
1020If you want an autocommand to set the search pattern, such that it is used
1021after the autocommand finishes, use the ":let @/ =" command.
1022The search-highlighting cannot be switched off with ":nohlsearch" in an
1023autocommand. Use the 'h' flag in the 'viminfo' option to disable search-
1024highlighting when starting Vim.
1025
1026 *Cmd-event*
1027When using one of the "*Cmd" events, the matching autocommands are expected to
1028do the file reading or writing. This can be used when working with a special
1029kind of file, for example on a remote system.
1030CAREFUL: If you use these events in a wrong way, it may have the effect of
1031making it impossible to read or write the matching files! Make sure you test
1032your autocommands properly. Best is to use a pattern that will never match a
1033normal file name, for example "ftp://*".
1034
1035When defining a BufReadCmd it will be difficult for Vim to recover a crashed
1036editing session. When recovering from the original file, Vim reads only those
1037parts of a file that are not found in the swap file. Since that is not
1038possible with a BufReadCmd, use the |:preserve| command to make sure the
1039original file isn't needed for recovery. You might want to do this only when
1040you expect the file to be modified.
1041
1042The |v:cmdarg| variable holds the "++enc=" and "++ff=" argument that are
1043effective. These should be used for the command that reads/writes the file.
1044The |v:cmdbang| variable is one when "!" was used, zero otherwise.
1045
1046See the $VIMRUNTIME/plugin/netrw.vim for examples.
1047
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00001048
Bram Moolenaar071d4272004-06-13 20:20:40 +00001049 vim:tw=78:ts=8:ft=help:norl: