blob: 0ace7b1dae892b2de979c74e4d81250715144af9 [file] [log] [blame]
Danek Duvalld7d56032024-01-14 20:19:59 +01001*autocmd.txt* For Vim version 9.1. Last change: 2024 Jan 14
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
Bram Moolenaar675e8d62018-06-24 20:42:01 +02007Automatic commands *autocommand* *autocommands*
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
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 Moolenaarb3480382005-12-11 21:33:32 +00002111. Disabling autocommands |autocmd-disable|
Bram Moolenaar071d4272004-06-13 20:20:40 +000022
Bram Moolenaar071d4272004-06-13 20:20:40 +000023
24==============================================================================
251. Introduction *autocmd-intro*
26
Bram Moolenaard4755bb2004-09-02 19:12:26 +000027You can specify commands to be executed automatically when reading or writing
28a file, when entering or leaving a buffer or window, and when exiting Vim.
29For example, you can create an autocommand to set the 'cindent' option for
30files matching *.c. You can also use autocommands to implement advanced
Bram Moolenaar071d4272004-06-13 20:20:40 +000031features, such as editing compressed files (see |gzip-example|). The usual
32place to put autocommands is in your .vimrc or .exrc file.
33
Bram Moolenaar72540672018-02-09 22:00:53 +010034 *E203* *E204* *E143* *E855* *E937* *E952*
Bram Moolenaar071d4272004-06-13 20:20:40 +000035WARNING: Using autocommands is very powerful, and may lead to unexpected side
36effects. Be careful not to destroy your text.
37- It's a good idea to do some testing on an expendable copy of a file first.
38 For example: If you use autocommands to decompress a file when starting to
39 edit it, make sure that the autocommands for compressing when writing work
40 correctly.
41- Be prepared for an error halfway through (e.g., disk full). Vim will mostly
42 be able to undo the changes to the buffer, but you may have to clean up the
43 changes to other files by hand (e.g., compress a file that has been
44 decompressed).
45- If the BufRead* events allow you to edit a compressed file, the FileRead*
46 events should do the same (this makes recovery possible in some rare cases).
47 It's a good idea to use the same autocommands for the File* and Buf* events
48 when possible.
49
Yegappan Lakshmanan971f6822022-05-24 11:40:11 +010050Recommended use:
51- Always use a group, so that it's easy to delete the autocommand.
52- Keep the command itself short, call a function to do more work.
Bram Moolenaarcfa8f9a2022-06-03 21:59:47 +010053- Make it so that the script it is defined in can be sourced several times
Yegappan Lakshmanan971f6822022-05-24 11:40:11 +010054 without the autocommand being repeated.
55
56Example in Vim9 script: >
57 autocmd_add({replace: true,
58 group: 'DemoGroup',
59 event: 'BufEnter',
60 pattern: '*.txt',
61 cmd: 'call DemoBufEnter()'
62 })
63
64In legacy script: >
65 call autocmd_add(#{replace: v:true,
66 \ group: 'DemoGroup',
Bram Moolenaar938ae282023-02-20 20:44:55 +000067 \ event: 'BufEnter',
Yegappan Lakshmanan971f6822022-05-24 11:40:11 +010068 \ pattern: '*.txt',
69 \ cmd: 'call DemoBufEnter()'
70 \ })
71
Bram Moolenaar071d4272004-06-13 20:20:40 +000072==============================================================================
732. Defining autocommands *autocmd-define*
74
Bram Moolenaar071d4272004-06-13 20:20:40 +000075 *:au* *:autocmd*
Bram Moolenaarfd31be22022-01-16 14:46:06 +000076:au[tocmd] [group] {event} {aupat} [++once] [++nested] {cmd}
Bram Moolenaar071d4272004-06-13 20:20:40 +000077 Add {cmd} to the list of commands that Vim will
78 execute automatically on {event} for a file matching
Bram Moolenaarfd31be22022-01-16 14:46:06 +000079 {aupat} |autocmd-patterns|.
Bram Moolenaar85388672021-01-31 17:03:52 +010080 Here {event} cannot be "*". *E1155*
Bram Moolenaar98ef2332018-03-18 14:44:37 +010081 Note: A quote character is seen as argument to the
82 :autocmd and won't start a comment.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010083 Vim always adds the {cmd} after existing autocommands,
84 so that the autocommands execute in the order in which
Bram Moolenaareb93f3f2019-04-04 15:04:56 +020085 they were given.
86 See |autocmd-nested| for [++nested]. "nested"
87 (without the ++) can also be used, for backwards
Bram Moolenaar1588bc82022-03-08 21:35:07 +000088 compatibility, but not in |Vim9| script. *E1078*
Bram Moolenaareb93f3f2019-04-04 15:04:56 +020089 *autocmd-once*
90 If [++once] is supplied the command is executed once,
91 then removed ("one shot").
Bram Moolenaar071d4272004-06-13 20:20:40 +000092
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +000093The special pattern <buffer> or <buffer=N> defines a buffer-local autocommand.
94See |autocmd-buflocal|.
95
Bram Moolenaar1b884a02020-12-10 21:11:27 +010096If the `:autocmd` is in Vim9 script (a script that starts with `:vim9script`
97and in a `:def` function) then {cmd} will be executed as in Vim9
Bram Moolenaar4466ad62020-11-21 13:16:30 +010098script. Thus this depends on where the autocmd is defined, not where it is
99triggered.
Bram Moolenaarf1dcd142022-12-31 15:30:45 +0000100 *:autocmd-block*
Bram Moolenaar6aa57292021-08-14 21:25:52 +0200101{cmd} can be a block, like with `:command`, see |:command-repl|. Example: >
Bram Moolenaar73b8b0a2021-08-01 14:52:32 +0200102 au BufReadPost *.xml {
103 setlocal matchpairs+=<:>
104 /<start
105 }
106
Yegappan Lakshmanan1755a912022-05-19 10:31:47 +0100107The |autocmd_add()| function can be used to add a list of autocmds and autocmd
Yegappan Lakshmanan971f6822022-05-24 11:40:11 +0100108groups from a Vim script. It is preferred if you have anything that would
109require using `:execute` with `:autocmd`.
Yegappan Lakshmanan1755a912022-05-19 10:31:47 +0100110
Bram Moolenaare99e8442016-07-26 20:43:40 +0200111Note: The ":autocmd" command can only be followed by another command when the
Bram Moolenaar88a42052021-11-21 21:13:36 +0000112'|' appears where the pattern is expected. This works: >
Bram Moolenaare99e8442016-07-26 20:43:40 +0200113 :augroup mine | au! BufRead | augroup END
114But this sees "augroup" as part of the defined command: >
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100115 :augroup mine | au! BufRead * | augroup END
Bram Moolenaare99e8442016-07-26 20:43:40 +0200116 :augroup mine | au BufRead * set tw=70 | augroup END
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100117Instead you can put the group name into the command: >
118 :au! mine BufRead *
119 :au mine BufRead * set tw=70
120Or use `:execute`: >
121 :augroup mine | exe "au! BufRead *" | augroup END
122 :augroup mine | exe "au BufRead * set tw=70" | augroup END
Bram Moolenaare99e8442016-07-26 20:43:40 +0200123
Bram Moolenaar75ab5902022-04-18 15:36:40 +0100124< *autocmd-expand*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125Note that special characters (e.g., "%", "<cword>") in the ":autocmd"
126arguments are not expanded when the autocommand is defined. These will be
127expanded when the Event is recognized, and the {cmd} is executed. The only
128exception is that "<sfile>" is expanded when the autocmd is defined. Example:
129>
130 :au BufNewFile,BufRead *.html so <sfile>:h/html.vim
131
132Here Vim expands <sfile> to the name of the file containing this line.
133
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200134`:autocmd` adds to the list of autocommands regardless of whether they are
135already present. When your .vimrc file is sourced twice, the autocommands
136will appear twice. To avoid this, define your autocommands in a group, so
137that you can easily clear them: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000138
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200139 augroup vimrc
Bram Moolenaar98ef2332018-03-18 14:44:37 +0100140 " Remove all vimrc autocommands
141 autocmd!
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200142 au BufNewFile,BufRead *.html so <sfile>:h/html.vim
143 augroup END
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144
145If you don't want to remove all autocommands, you can instead use a variable
146to ensure that Vim includes the autocommands only once: >
147
148 :if !exists("autocommands_loaded")
149 : let autocommands_loaded = 1
150 : au ...
151 :endif
152
153When the [group] argument is not given, Vim uses the current group (as defined
154with ":augroup"); otherwise, Vim uses the group defined with [group]. Note
155that [group] must have been defined before. You cannot define a new group
156with ":au group ..."; use ":augroup" for that.
157
158While testing autocommands, you might find the 'verbose' option to be useful: >
159 :set verbose=9
160This setting makes Vim echo the autocommands as it executes them.
161
162When defining an autocommand in a script, it will be able to call functions
163local to the script and use mappings local to the script. When the event is
164triggered and the command executed, it will run in the context of the script
165it was defined in. This matters if |<SID>| is used in a command.
166
Bram Moolenaar446cb832008-06-24 21:56:24 +0000167When executing the commands, the message from one command overwrites a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168previous message. This is different from when executing the commands
169manually. Mostly the screen will not scroll up, thus there is no hit-enter
170prompt. When one command outputs two messages this can happen anyway.
171
172==============================================================================
1733. Removing autocommands *autocmd-remove*
174
Yegappan Lakshmanan1755a912022-05-19 10:31:47 +0100175In addition to the below described commands, the |autocmd_delete()| function can
176be used to remove a list of autocmds and autocmd groups from a Vim script.
177
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000178:au[tocmd]! [group] {event} {aupat} [++once] [++nested] {cmd}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179 Remove all autocommands associated with {event} and
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000180 {aupat}, and add the command {cmd}.
Bram Moolenaareb93f3f2019-04-04 15:04:56 +0200181 See |autocmd-once| for [++once].
182 See |autocmd-nested| for [++nested].
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000184:au[tocmd]! [group] {event} {aupat}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185 Remove all autocommands associated with {event} and
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000186 {aupat}.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000188:au[tocmd]! [group] * {aupat}
189 Remove all autocommands associated with {aupat} for
190 all events.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191
192:au[tocmd]! [group] {event}
193 Remove ALL autocommands for {event}.
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200194 Warning: You should not do this without a group for
195 |BufRead| and other common events, it can break
196 plugins, syntax highlighting, etc.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000197
198:au[tocmd]! [group] Remove ALL autocommands.
Bram Moolenaar98ef2332018-03-18 14:44:37 +0100199 Note: a quote will be seen as argument to the :autocmd
200 and won't start a comment.
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200201 Warning: You should normally not do this without a
202 group, it breaks plugins, syntax highlighting, etc.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203
204When the [group] argument is not given, Vim uses the current group (as defined
205with ":augroup"); otherwise, Vim uses the group defined with [group].
206
207==============================================================================
2084. Listing autocommands *autocmd-list*
209
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000210:au[tocmd] [group] {event} {aupat}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211 Show the autocommands associated with {event} and
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000212 {aupat}.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000214:au[tocmd] [group] * {aupat}
215 Show the autocommands associated with {aupat} for all
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216 events.
217
218:au[tocmd] [group] {event}
219 Show all autocommands for {event}.
220
221:au[tocmd] [group] Show all autocommands.
222
223If you provide the [group] argument, Vim lists only the autocommands for
224[group]; otherwise, Vim lists the autocommands for ALL groups. Note that this
225argument behavior differs from that for defining and removing autocommands.
226
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000227In order to list buffer-local autocommands, use a pattern in the form <buffer>
228or <buffer=N>. See |autocmd-buflocal|.
229
Yegappan Lakshmanan1755a912022-05-19 10:31:47 +0100230The |autocmd_get()| function can be used from a Vim script to get a list of
231autocmds.
232
Bram Moolenaarac6e65f2005-08-29 22:25:38 +0000233 *:autocmd-verbose*
234When 'verbose' is non-zero, listing an autocommand will also display where it
235was last defined. Example: >
236
237 :verbose autocmd BufEnter
238 FileExplorer BufEnter
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000239 * call s:LocalBrowse(expand("<amatch>"))
Bram Moolenaarac6e65f2005-08-29 22:25:38 +0000240 Last set from /usr/share/vim/vim-7.0/plugin/NetrwPlugin.vim
241<
242See |:verbose-cmd| for more information.
243
Bram Moolenaar071d4272004-06-13 20:20:40 +0000244==============================================================================
2455. Events *autocmd-events* *E215* *E216*
246
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000247You can specify a comma-separated list of event names. No white space can be
248used in this list. The command applies to all the events in the list.
249
250For READING FILES there are four kinds of events possible:
251 BufNewFile starting to edit a non-existent file
252 BufReadPre BufReadPost starting to edit an existing file
253 FilterReadPre FilterReadPost read the temp file with filter output
254 FileReadPre FileReadPost any other file read
255Vim uses only one of these four kinds when reading a file. The "Pre" and
256"Post" events are both triggered, before and after reading the file.
257
258Note that the autocommands for the *ReadPre events and all the Filter events
259are not allowed to change the current buffer (you will get an error message if
260this happens). This is to prevent the file to be read into the wrong buffer.
261
262Note that the 'modified' flag is reset AFTER executing the BufReadPost
263and BufNewFile autocommands. But when the 'modified' option was set by the
264autocommands, this doesn't happen.
265
266You can use the 'eventignore' option to ignore a number of events or all
267events.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000268 *autocommand-events* *{event}*
269Vim recognizes the following events. Vim ignores the case of event names
270(e.g., you can use "BUFread" or "bufread" instead of "BufRead").
271
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000272First an overview by function with a short explanation. Then the list
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000273alphabetically with full explanations |autocmd-events-abc|.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000274
275Name triggered by ~
276
277 Reading
278|BufNewFile| starting to edit a file that doesn't exist
279|BufReadPre| starting to edit a new buffer, before reading the file
280|BufRead| starting to edit a new buffer, after reading the file
281|BufReadPost| starting to edit a new buffer, after reading the file
282|BufReadCmd| before starting to edit a new buffer |Cmd-event|
283
284|FileReadPre| before reading a file with a ":read" command
285|FileReadPost| after reading a file with a ":read" command
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000286|FileReadCmd| before reading a file with a ":read" command |Cmd-event|
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000287
288|FilterReadPre| before reading a file from a filter command
289|FilterReadPost| after reading a file from a filter command
290
291|StdinReadPre| before reading from stdin into the buffer
292|StdinReadPost| After reading from the stdin into the buffer
293
294 Writing
295|BufWrite| starting to write the whole buffer to a file
296|BufWritePre| starting to write the whole buffer to a file
297|BufWritePost| after writing the whole buffer to a file
298|BufWriteCmd| before writing the whole buffer to a file |Cmd-event|
299
300|FileWritePre| starting to write part of a buffer to a file
301|FileWritePost| after writing part of a buffer to a file
302|FileWriteCmd| before writing part of a buffer to a file |Cmd-event|
303
304|FileAppendPre| starting to append to a file
305|FileAppendPost| after appending to a file
306|FileAppendCmd| before appending to a file |Cmd-event|
307
308|FilterWritePre| starting to write a file for a filter command or diff
309|FilterWritePost| after writing a file for a filter command or diff
310
311 Buffers
312|BufAdd| just after adding a buffer to the buffer list
313|BufCreate| just after adding a buffer to the buffer list
314|BufDelete| before deleting a buffer from the buffer list
315|BufWipeout| before completely deleting a buffer
316
317|BufFilePre| before changing the name of the current buffer
318|BufFilePost| after changing the name of the current buffer
319
320|BufEnter| after entering a buffer
321|BufLeave| before leaving to another buffer
322|BufWinEnter| after a buffer is displayed in a window
323|BufWinLeave| before a buffer is removed from a window
324
325|BufUnload| before unloading a buffer
Bram Moolenaarcb80aa22020-10-26 21:12:46 +0100326|BufHidden| just before a buffer becomes hidden
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000327|BufNew| just after creating a new buffer
328
329|SwapExists| detected an existing swap file
330
331 Options
332|FileType| when the 'filetype' option has been set
333|Syntax| when the 'syntax' option has been set
334|EncodingChanged| after the 'encoding' option has been changed
335|TermChanged| after the value of 'term' has changed
Bram Moolenaar53744302015-07-17 17:38:22 +0200336|OptionSet| after setting any option
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000337
338 Startup and exit
339|VimEnter| after doing all the startup stuff
340|GUIEnter| after starting the GUI successfully
Bram Moolenaard09acef2012-09-21 14:54:30 +0200341|GUIFailed| after starting the GUI failed
Bram Moolenaard7afed32007-05-06 13:26:41 +0000342|TermResponse| after the terminal response to |t_RV| is received
Danek Duvalld7d56032024-01-14 20:19:59 +0100343|TermResponseAll| after the terminal response to |t_RV| and others is received
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000344
Bram Moolenaar12a96de2018-03-11 14:44:18 +0100345|QuitPre| when using `:quit`, before deciding whether to exit
346|ExitPre| when using a command that may make Vim exit
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000347|VimLeavePre| before exiting Vim, before writing the viminfo file
348|VimLeave| before exiting Vim, after writing the viminfo file
349
Bram Moolenaar100118c2020-12-11 19:30:34 +0100350|VimSuspend| when suspending Vim
351|VimResume| when Vim is resumed after being suspended
352
Bram Moolenaar28ed4df2019-10-26 16:21:40 +0200353 Terminal
354|TerminalOpen| after a terminal buffer was created
355|TerminalWinOpen| after a terminal buffer was created in a new window
356
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000357 Various
358|FileChangedShell| Vim notices that a file changed since editing started
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +0000359|FileChangedShellPost| After handling a file changed since editing started
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000360|FileChangedRO| before making the first change to a read-only file
361
Bram Moolenaar2c64ca12018-10-19 16:22:31 +0200362|DiffUpdated| after diffs have been updated
Bram Moolenaar28e8f732022-02-09 12:58:20 +0000363|DirChangedPre| before the working directory will change
Bram Moolenaarb7407d32018-02-03 17:36:27 +0100364|DirChanged| after the working directory has changed
365
Bram Moolenaara94bc432006-03-10 21:42:59 +0000366|ShellCmdPost| after executing a shell command
367|ShellFilterPost| after filtering with a shell command
368
Bram Moolenaard5005162014-08-22 23:05:54 +0200369|CmdUndefined| a user command is used but it isn't defined
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000370|FuncUndefined| a user function is used but it isn't defined
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000371|SpellFileMissing| a spell file is used but it can't be found
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000372|SourcePre| before sourcing a Vim script
Bram Moolenaar2a953fc2019-01-26 17:41:47 +0100373|SourcePost| after sourcing a Vim script
Bram Moolenaar8dd1aa52007-01-16 20:33:19 +0000374|SourceCmd| before sourcing a Vim script |Cmd-event|
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000375
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +0000376|VimResized| after the Vim window size changed
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000377|FocusGained| Vim got input focus
378|FocusLost| Vim lost input focus
379|CursorHold| the user doesn't press a key for a while
Bram Moolenaar754b5602006-02-09 23:53:20 +0000380|CursorHoldI| the user doesn't press a key for a while in Insert mode
381|CursorMoved| the cursor was moved in Normal mode
382|CursorMovedI| the cursor was moved in Insert mode
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000383
Bram Moolenaarc917da42016-07-19 22:31:36 +0200384|WinNew| after creating a new window
Bram Moolenaar12c11d52016-07-19 23:13:03 +0200385|TabNew| after creating a new tab page
naohiro ono23beefe2021-11-13 12:38:49 +0000386|WinClosed| after closing a window
Bram Moolenaar12c11d52016-07-19 23:13:03 +0200387|TabClosed| after closing a tab page
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000388|WinEnter| after entering another window
389|WinLeave| before leaving a window
Bram Moolenaarfaa959a2006-02-20 21:37:40 +0000390|TabEnter| after entering another tab page
391|TabLeave| before leaving a tab page
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000392|CmdwinEnter| after entering the command-line window
393|CmdwinLeave| before leaving the command-line window
394
Bram Moolenaarb5b75622018-03-09 22:22:21 +0100395|CmdlineChanged| after a change was made to the command-line text
396|CmdlineEnter| after the cursor moves to the command line
397|CmdlineLeave| before the cursor leaves the command line
398
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000399|InsertEnter| starting Insert mode
400|InsertChange| when typing <Insert> while in Insert or Replace mode
401|InsertLeave| when leaving Insert mode
Bram Moolenaar938ae282023-02-20 20:44:55 +0000402|InsertLeavePre| just before leaving Insert mode
Bram Moolenaare659c952011-05-19 17:25:41 +0200403|InsertCharPre| when a character was typed in Insert mode, before
404 inserting it
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000405
=?UTF-8?q?Magnus=20Gro=C3=9F?=f1e88762021-09-12 13:39:55 +0200406|ModeChanged| after changing the mode
407
Bram Moolenaardfb18412013-12-11 18:53:29 +0100408|TextChanged| after a change was made to the text in Normal mode
409|TextChangedI| after a change was made to the text in Insert mode
Bram Moolenaar5a093432018-02-10 18:15:19 +0100410 when popup menu is not visible
411|TextChangedP| after a change was made to the text in Insert mode
412 when popup menu visible
Shougo Matsushita4ccaedf2022-10-15 11:48:00 +0100413|TextChangedT| after a change was made to the text in Terminal mode
Bram Moolenaarb477af22018-07-15 20:20:18 +0200414|TextYankPost| after text has been yanked or deleted
Bram Moolenaardfb18412013-12-11 18:53:29 +0100415
Bram Moolenaar8aeec402019-09-15 23:02:04 +0200416|SafeState| nothing pending, going to wait for the user to type a
417 character
Bram Moolenaar69198cb2019-09-16 21:58:13 +0200418|SafeStateAgain| repeated SafeState
Bram Moolenaar8aeec402019-09-15 23:02:04 +0200419
Bram Moolenaar15142e22018-04-30 22:19:58 +0200420|ColorSchemePre| before loading a color scheme
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000421|ColorScheme| after loading a color scheme
422
423|RemoteReply| a reply from a server Vim was received
424
425|QuickFixCmdPre| before a quickfix command is run
426|QuickFixCmdPost| after a quickfix command is run
427
428|SessionLoadPost| after loading a session file
429
430|MenuPopup| just before showing the popup menu
Bram Moolenaard7f246c2019-04-08 18:15:41 +0200431|CompleteChanged| after Insert mode completion menu changed
Bram Moolenaar3f169ce2020-01-26 22:43:31 +0100432|CompleteDonePre| after Insert mode completion is done, before clearing
433 info
434|CompleteDone| after Insert mode completion is done, after clearing
435 info
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000436
437|User| to be used in combination with ":doautocmd"
Bram Moolenaarbe5ee862020-06-10 20:56:58 +0200438|SigUSR1| after the SIGUSR1 signal has been detected
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000439
LemonBoy09371822022-04-08 15:18:45 +0100440|WinScrolled| after scrolling or resizing a window
441
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000442
443The alphabetical list of autocommand events: *autocmd-events-abc*
444
445 *BufCreate* *BufAdd*
446BufAdd or BufCreate Just after creating a new buffer which is
447 added to the buffer list, or adding a buffer
448 to the buffer list.
449 Also used just after a buffer in the buffer
450 list has been renamed.
Bram Moolenaar469bdbd2019-12-11 23:05:48 +0100451 Not triggered for the initial buffers created
452 during startup.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000453 The BufCreate event is for historic reasons.
454 NOTE: When this autocommand is executed, the
455 current buffer "%" may be different from the
456 buffer being created "<afile>".
457 *BufDelete*
458BufDelete Before deleting a buffer from the buffer list.
459 The BufUnload may be called first (if the
460 buffer was loaded).
461 Also used just before a buffer in the buffer
462 list is renamed.
463 NOTE: When this autocommand is executed, the
464 current buffer "%" may be different from the
Bram Moolenaar446cb832008-06-24 21:56:24 +0000465 buffer being deleted "<afile>" and "<abuf>".
Bram Moolenaarb849e712009-06-24 15:51:37 +0000466 Don't change to another buffer, it will cause
467 problems.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000468 *BufEnter*
469BufEnter After entering a buffer. Useful for setting
470 options for a file type. Also executed when
471 starting to edit a buffer, after the
472 BufReadPost autocommands.
473 *BufFilePost*
474BufFilePost After changing the name of the current buffer
475 with the ":file" or ":saveas" command.
Bram Moolenaar4770d092006-01-12 23:22:24 +0000476 *BufFilePre*
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000477BufFilePre Before changing the name of the current buffer
478 with the ":file" or ":saveas" command.
479 *BufHidden*
Bram Moolenaar790c18b2019-07-04 17:22:06 +0200480BufHidden Just before a buffer becomes hidden. That is,
481 when there are no longer windows that show
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000482 the buffer, but the buffer is not unloaded or
483 deleted. Not used for ":qa" or ":q" when
484 exiting Vim.
485 NOTE: When this autocommand is executed, the
486 current buffer "%" may be different from the
487 buffer being unloaded "<afile>".
488 *BufLeave*
489BufLeave Before leaving to another buffer. Also when
490 leaving or closing the current window and the
491 new current window is not for the same buffer.
492 Not used for ":qa" or ":q" when exiting Vim.
493 *BufNew*
494BufNew Just after creating a new buffer. Also used
495 just after a buffer has been renamed. When
496 the buffer is added to the buffer list BufAdd
497 will be triggered too.
498 NOTE: When this autocommand is executed, the
499 current buffer "%" may be different from the
500 buffer being created "<afile>".
Bram Moolenaar071d4272004-06-13 20:20:40 +0000501 *BufNewFile*
502BufNewFile When starting to edit a file that doesn't
503 exist. Can be used to read in a skeleton
504 file.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000505 *BufRead* *BufReadPost*
506BufRead or BufReadPost When starting to edit a new buffer, after
507 reading the file into the buffer, before
508 executing the modelines. See |BufWinEnter|
509 for when you need to do something after
510 processing the modelines.
Bram Moolenaar75ab5902022-04-18 15:36:40 +0100511 Also triggered:
512 - when writing an unnamed buffer in a way that
513 the buffer gets a name
514 - after successfully recovering a file
515 - for the filetypedetect group when executing
516 ":filetype detect"
517 Not triggered:
518 - for the `:read file` command
519 - when the file doesn't exist
Bram Moolenaar4770d092006-01-12 23:22:24 +0000520 *BufReadCmd*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000521BufReadCmd Before starting to edit a new buffer. Should
522 read the file into the buffer. |Cmd-event|
Bram Moolenaar4770d092006-01-12 23:22:24 +0000523 *BufReadPre* *E200* *E201*
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000524BufReadPre When starting to edit a new buffer, before
525 reading the file into the buffer. Not used
526 if the file doesn't exist.
527 *BufUnload*
528BufUnload Before unloading a buffer. This is when the
529 text in the buffer is going to be freed. This
530 may be after a BufWritePost and before a
531 BufDelete. Also used for all buffers that are
532 loaded when Vim is going to exit.
533 NOTE: When this autocommand is executed, the
534 current buffer "%" may be different from the
535 buffer being unloaded "<afile>".
Bram Moolenaar64d8e252016-09-06 22:12:34 +0200536 Don't change to another buffer or window, it
537 will cause problems!
Bram Moolenaar0e1e25f2010-05-28 21:07:08 +0200538 When exiting and v:dying is 2 or more this
539 event is not triggered.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000540 *BufWinEnter*
541BufWinEnter After a buffer is displayed in a window. This
542 can be when the buffer is loaded (after
Bram Moolenaar446cb832008-06-24 21:56:24 +0000543 processing the modelines) or when a hidden
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000544 buffer is displayed in a window (and is no
Bram Moolenaar446cb832008-06-24 21:56:24 +0000545 longer hidden).
546 Does not happen for |:split| without
547 arguments, since you keep editing the same
548 buffer, or ":split" with a file that's already
Bram Moolenaarc236c162008-07-13 17:41:49 +0000549 open in a window, because it re-uses an
550 existing buffer. But it does happen for a
551 ":split" with the name of the current buffer,
552 since it reloads that buffer.
Bram Moolenaar606cb8b2018-05-03 20:40:20 +0200553 Does not happen for a terminal window, because
554 it starts in Terminal-Job mode and Normal mode
555 commands won't work. Use |TerminalOpen| instead.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000556 *BufWinLeave*
557BufWinLeave Before a buffer is removed from a window.
558 Not when it's still visible in another window.
559 Also triggered when exiting. It's triggered
560 before BufUnload or BufHidden.
561 NOTE: When this autocommand is executed, the
562 current buffer "%" may be different from the
563 buffer being unloaded "<afile>".
Bram Moolenaar0e1e25f2010-05-28 21:07:08 +0200564 When exiting and v:dying is 2 or more this
565 event is not triggered.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000566 *BufWipeout*
567BufWipeout Before completely deleting a buffer. The
568 BufUnload and BufDelete events may be called
569 first (if the buffer was loaded and was in the
570 buffer list). Also used just before a buffer
571 is renamed (also when it's not in the buffer
572 list).
573 NOTE: When this autocommand is executed, the
574 current buffer "%" may be different from the
575 buffer being deleted "<afile>".
Bram Moolenaarb849e712009-06-24 15:51:37 +0000576 Don't change to another buffer, it will cause
577 problems.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000578 *BufWrite* *BufWritePre*
579BufWrite or BufWritePre Before writing the whole buffer to a file.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000580 *BufWriteCmd*
581BufWriteCmd Before writing the whole buffer to a file.
582 Should do the writing of the file and reset
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000583 'modified' if successful, unless '+' is in
584 'cpo' and writing to another file |cpo-+|.
585 The buffer contents should not be changed.
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200586 When the command resets 'modified' the undo
587 information is adjusted to mark older undo
588 states as 'modified', like |:write| does.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000589 |Cmd-event|
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000590 *BufWritePost*
591BufWritePost After writing the whole buffer to a file
592 (should undo the commands for BufWritePre).
Bram Moolenaard5005162014-08-22 23:05:54 +0200593 *CmdUndefined*
594CmdUndefined When a user command is used but it isn't
595 defined. Useful for defining a command only
596 when it's used. The pattern is matched
597 against the command name. Both <amatch> and
598 <afile> are set to the name of the command.
599 NOTE: Autocompletion won't work until the
600 command is defined. An alternative is to
601 always define the user command and have it
602 invoke an autoloaded function. See |autoload|.
Bram Moolenaar153b7042018-01-31 15:48:32 +0100603 *CmdlineChanged*
Bram Moolenaarb5b75622018-03-09 22:22:21 +0100604CmdlineChanged After a change was made to the text in the
605 command line. Be careful not to mess up
606 the command line, it may cause Vim to lock up.
Bram Moolenaar153b7042018-01-31 15:48:32 +0100607 <afile> is set to a single character,
608 indicating the type of command-line.
609 |cmdwin-char|
Bram Moolenaarfafcf0d2017-10-19 18:35:51 +0200610 *CmdlineEnter*
611CmdlineEnter After moving the cursor to the command line,
612 where the user can type a command or search
Bram Moolenaar957cf672020-11-12 14:21:06 +0100613 string; including non-interactive use of ":"
614 in a mapping, but not when using |<Cmd>|.
Bram Moolenaar938ae282023-02-20 20:44:55 +0000615 The pattern is matched against the character
616 representing the type of command-line.
617 |cmdwin-char|
Bram Moolenaarfafcf0d2017-10-19 18:35:51 +0200618 <afile> is set to a single character,
619 indicating the type of command-line.
Bram Moolenaarfafcf0d2017-10-19 18:35:51 +0200620 *CmdlineLeave*
Bram Moolenaar957cf672020-11-12 14:21:06 +0100621CmdlineLeave Before leaving the command line; including
622 non-interactive use of ":" in a mapping, but
623 not when using |<Cmd>|.
Bram Moolenaar01164a62017-11-02 22:58:42 +0100624 Also when abandoning the command line, after
625 typing CTRL-C or <Esc>.
626 When the commands result in an error the
627 command line is still executed.
Bram Moolenaarfafcf0d2017-10-19 18:35:51 +0200628 <afile> is set to a single character,
629 indicating the type of command-line.
630 |cmdwin-char|
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000631 *CmdwinEnter*
632CmdwinEnter After entering the command-line window.
633 Useful for setting options specifically for
Bram Moolenaar96e38a82019-09-09 18:35:33 +0200634 this special type of window.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000635 <afile> is set to a single character,
636 indicating the type of command-line.
637 |cmdwin-char|
638 *CmdwinLeave*
639CmdwinLeave Before leaving the command-line window.
640 Useful to clean up any global setting done
Bram Moolenaar96e38a82019-09-09 18:35:33 +0200641 with CmdwinEnter.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000642 <afile> is set to a single character,
643 indicating the type of command-line.
644 |cmdwin-char|
645 *ColorScheme*
646ColorScheme After loading a color scheme. |:colorscheme|
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100647 Not triggered if the color scheme is not
648 found.
Bram Moolenaarb95186f2013-11-28 18:53:52 +0100649 The pattern is matched against the
650 colorscheme name. <afile> can be used for the
651 name of the actual file where this option was
652 set, and <amatch> for the new colorscheme
653 name.
654
Bram Moolenaar15142e22018-04-30 22:19:58 +0200655 *ColorSchemePre*
656ColorSchemePre Before loading a color scheme. |:colorscheme|
657 Useful to setup removing things added by a
658 color scheme, before another one is loaded.
Bram Moolenaar589edb32019-09-20 14:38:13 +0200659CompleteChanged *CompleteChanged*
Bram Moolenaard7f246c2019-04-08 18:15:41 +0200660 After each time the Insert mode completion
661 menu changed. Not fired on popup menu hide,
Bram Moolenaar3f169ce2020-01-26 22:43:31 +0100662 use |CompleteDonePre| or |CompleteDone| for
663 that. Never triggered recursively.
Bram Moolenaar754b5602006-02-09 23:53:20 +0000664
Bram Moolenaard7f246c2019-04-08 18:15:41 +0200665 Sets these |v:event| keys:
Bram Moolenaar911ead12019-04-21 00:03:35 +0200666 completed_item See |complete-items|.
Bram Moolenaard7f246c2019-04-08 18:15:41 +0200667 height nr of items visible
668 width screen cells
669 row top screen row
670 col leftmost screen column
671 size total nr of items
672 scrollbar TRUE if visible
673
674 It is not allowed to change the text |textlock|.
Bram Moolenaare9bd5722019-08-17 19:36:06 +0200675
676 The size and position of the popup are also
677 available by calling |pum_getpos()|.
678
Bram Moolenaar3f169ce2020-01-26 22:43:31 +0100679 *CompleteDonePre*
680CompleteDonePre After Insert mode completion is done. Either
681 when something was completed or abandoning
682 completion. |ins-completion|
683 |complete_info()| can be used, the info is
684 cleared after triggering CompleteDonePre.
685 The |v:completed_item| variable contains
686 information about the completed item.
687
Bram Moolenaar30b65812012-07-12 22:01:11 +0200688 *CompleteDone*
689CompleteDone After Insert mode completion is done. Either
690 when something was completed or abandoning
691 completion. |ins-completion|
Bram Moolenaar3f169ce2020-01-26 22:43:31 +0100692 |complete_info()| cannot be used, the info is
693 cleared before triggering CompleteDone. Use
694 CompleteDonePre if you need it.
Bram Moolenaar42a45122015-07-10 17:56:23 +0200695 The |v:completed_item| variable contains
696 information about the completed item.
Bram Moolenaar30b65812012-07-12 22:01:11 +0200697
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000698 *CursorHold*
699CursorHold When the user doesn't press a key for the time
Bram Moolenaard58a3bf2020-09-28 21:48:16 +0200700 specified with 'updatetime'. Not triggered
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000701 until the user has pressed a key (i.e. doesn't
702 fire every 'updatetime' ms if you leave Vim to
703 make some coffee. :) See |CursorHold-example|
704 for previewing tags.
705 This event is only triggered in Normal mode.
Bram Moolenaard7afed32007-05-06 13:26:41 +0000706 It is not triggered when waiting for a command
707 argument to be typed, or a movement after an
708 operator.
Bram Moolenaare3226be2005-12-18 22:10:00 +0000709 While recording the CursorHold event is not
710 triggered. |q|
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200711 *<CursorHold>*
712 Internally the autocommand is triggered by the
713 <CursorHold> key. In an expression mapping
714 |getchar()| may see this character.
715
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000716 Note: Interactive commands cannot be used for
717 this event. There is no hit-enter prompt,
718 the screen is updated directly (when needed).
719 Note: In the future there will probably be
720 another option to set the time.
721 Hint: to force an update of the status lines
722 use: >
723 :let &ro = &ro
Bram Moolenaar5666fcd2019-12-26 14:35:26 +0100724< {only on Amiga, Unix, Win32 and all GUI
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000725 versions}
Bram Moolenaar754b5602006-02-09 23:53:20 +0000726 *CursorHoldI*
727CursorHoldI Just like CursorHold, but in Insert mode.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200728 Not triggered when waiting for another key,
729 e.g. after CTRL-V, and not when in CTRL-X mode
730 |insert_expand|.
Bram Moolenaar754b5602006-02-09 23:53:20 +0000731
732 *CursorMoved*
Bram Moolenaar52b91d82013-06-15 21:39:51 +0200733CursorMoved After the cursor was moved in Normal or Visual
734 mode. Also when the text of the cursor line
735 has been changed, e.g., with "x", "rx" or "p".
Bram Moolenaar46eea442022-03-30 10:51:39 +0100736 Not always triggered when there is typeahead,
737 while executing commands in a script file,
738 when an operator is pending or when moving to
Bram Moolenaar90df4b92021-07-07 20:26:08 +0200739 another window while remaining at the same
740 cursor position.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +0000741 For an example see |match-parens|.
Bram Moolenaar26967612019-03-17 17:13:16 +0100742 Note: This can not be skipped with
743 `:noautocmd`.
Bram Moolenaarbf884932013-04-05 22:26:15 +0200744 Careful: This is triggered very often, don't
745 do anything that the user does not expect or
746 that is slow.
Bram Moolenaar754b5602006-02-09 23:53:20 +0000747 *CursorMovedI*
748CursorMovedI After the cursor was moved in Insert mode.
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200749 Not triggered when the popup menu is visible.
Bram Moolenaar754b5602006-02-09 23:53:20 +0000750 Otherwise the same as CursorMoved.
Bram Moolenaar75ab5902022-04-18 15:36:40 +0100751 *DiffUpdated*
752DiffUpdated After diffs have been updated. Depending on
753 what kind of diff is being used (internal or
754 external) this can be triggered on every
755 change or when doing |:diffupdate|.
756 *DirChangedPre*
757DirChangedPre The working directory is going to be changed,
758 as with |DirChanged|. The pattern is like
759 with |DirChanged|. The new directory can be
760 found in v:event.directory.
761 *DirChanged*
762DirChanged The working directory has changed in response
763 to the |:cd| or |:tcd| or |:lcd| commands, or
764 as a result of the 'autochdir' option.
765 The pattern can be:
766 "window" to trigger on `:lcd`
767 "tabpage" to trigger on `:tcd`
768 "global" to trigger on `:cd`
769 "auto" to trigger on 'autochdir'.
770 "drop" to trigger on editing a file
771 <afile> is set to the new directory name.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000772 *EncodingChanged*
773EncodingChanged Fires off after the 'encoding' option has been
774 changed. Useful to set up fonts, for example.
Bram Moolenaar75ab5902022-04-18 15:36:40 +0100775 *ExitPre*
776ExitPre When using `:quit`, `:wq` in a way it makes
777 Vim exit, or using `:qall`, just after
778 |QuitPre|. Can be used to close any
779 non-essential window. Exiting may still be
780 cancelled if there is a modified buffer that
781 isn't automatically saved, use |VimLeavePre|
782 for really exiting.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000783 *FileAppendCmd*
784FileAppendCmd Before appending to a file. Should do the
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000785 appending to the file. Use the '[ and ']
Bram Moolenaar22863042021-10-16 15:23:36 +0100786 marks for the range of lines. |Cmd-event|
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000787 *FileAppendPost*
788FileAppendPost After appending to a file.
789 *FileAppendPre*
790FileAppendPre Before appending to a file. Use the '[ and ']
791 marks for the range of lines.
792 *FileChangedRO*
793FileChangedRO Before making the first change to a read-only
794 file. Can be used to check-out the file from
795 a source control system. Not triggered when
796 the change was caused by an autocommand.
797 This event is triggered when making the first
798 change in a buffer or the first change after
Bram Moolenaar61660ea2006-04-07 21:40:07 +0000799 'readonly' was set, just before the change is
800 applied to the text.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000801 WARNING: If the autocommand moves the cursor
802 the effect of the change is undefined.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000803 *E788*
804 It is not allowed to change to another buffer
805 here. You can reload the buffer but not edit
806 another one.
Bram Moolenaar92dff182014-02-11 19:15:50 +0100807 *E881*
808 If the number of lines changes saving for undo
809 may fail and the change will be aborted.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000810 *FileChangedShell*
811FileChangedShell When Vim notices that the modification time of
812 a file has changed since editing started.
813 Also when the file attributes of the file
Bram Moolenaare968e362014-05-13 20:23:24 +0200814 change or when the size of the file changes.
815 |timestamp|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000816 Mostly triggered after executing a shell
817 command, but also with a |:checktime| command
Bram Moolenaar6aa8cea2017-06-05 14:44:35 +0200818 or when gvim regains input focus.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000819 This autocommand is triggered for each changed
820 file. It is not used when 'autoread' is set
821 and the buffer was not changed. If a
822 FileChangedShell autocommand is present the
823 warning message and prompt is not given.
Bram Moolenaar19a09a12005-03-04 23:39:37 +0000824 The |v:fcs_reason| variable is set to indicate
825 what happened and |v:fcs_choice| can be used
826 to tell Vim what to do next.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000827 NOTE: When this autocommand is executed, the
828 current buffer "%" may be different from the
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +0200829 buffer that was changed, which is in "<afile>".
Bram Moolenaar071d4272004-06-13 20:20:40 +0000830 NOTE: The commands must not change the current
831 buffer, jump to another buffer or delete a
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100832 buffer. *E246* *E811*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000833 NOTE: This event never nests, to avoid an
834 endless loop. This means that while executing
835 commands for the FileChangedShell event no
836 other FileChangedShell event will be
837 triggered.
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +0000838 *FileChangedShellPost*
839FileChangedShellPost After handling a file that was changed outside
840 of Vim. Can be used to update the statusline.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000841 *FileEncoding*
842FileEncoding Obsolete. It still works and is equivalent
843 to |EncodingChanged|.
844 *FileReadCmd*
845FileReadCmd Before reading a file with a ":read" command.
846 Should do the reading of the file. |Cmd-event|
847 *FileReadPost*
848FileReadPost After reading a file with a ":read" command.
849 Note that Vim sets the '[ and '] marks to the
850 first and last line of the read. This can be
851 used to operate on the lines just read.
852 *FileReadPre*
853FileReadPre Before reading a file with a ":read" command.
854 *FileType*
Bram Moolenaard7afed32007-05-06 13:26:41 +0000855FileType When the 'filetype' option has been set. The
856 pattern is matched against the filetype.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000857 <afile> can be used for the name of the file
858 where this option was set, and <amatch> for
Bram Moolenaar74675a62017-07-15 13:53:23 +0200859 the new value of 'filetype'. Navigating to
860 another window or buffer is not allowed.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000861 See |filetypes|.
862 *FileWriteCmd*
863FileWriteCmd Before writing to a file, when not writing the
864 whole buffer. Should do the writing to the
865 file. Should not change the buffer. Use the
866 '[ and '] marks for the range of lines.
867 |Cmd-event|
868 *FileWritePost*
869FileWritePost After writing to a file, when not writing the
870 whole buffer.
871 *FileWritePre*
872FileWritePre Before writing to a file, when not writing the
873 whole buffer. Use the '[ and '] marks for the
874 range of lines.
875 *FilterReadPost*
876FilterReadPost After reading a file from a filter command.
877 Vim checks the pattern against the name of
878 the current buffer as with FilterReadPre.
879 Not triggered when 'shelltemp' is off.
880 *FilterReadPre* *E135*
881FilterReadPre Before reading a file from a filter command.
882 Vim checks the pattern against the name of
883 the current buffer, not the name of the
884 temporary file that is the output of the
885 filter command.
886 Not triggered when 'shelltemp' is off.
887 *FilterWritePost*
888FilterWritePost After writing a file for a filter command or
Bram Moolenaar4c05fa02019-01-01 15:32:17 +0100889 making a diff with an external diff (see
Bram Moolenaar22863042021-10-16 15:23:36 +0100890 |DiffUpdated| for internal diff).
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000891 Vim checks the pattern against the name of
892 the current buffer as with FilterWritePre.
893 Not triggered when 'shelltemp' is off.
894 *FilterWritePre*
895FilterWritePre Before writing a file for a filter command or
Bram Moolenaar4c05fa02019-01-01 15:32:17 +0100896 making a diff with an external diff.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000897 Vim checks the pattern against the name of
898 the current buffer, not the name of the
899 temporary file that is the output of the
900 filter command.
901 Not triggered when 'shelltemp' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000902 *FocusGained*
903FocusGained When Vim got input focus. Only for the GUI
904 version and a few console versions where this
905 can be detected.
906 *FocusLost*
907FocusLost When Vim lost input focus. Only for the GUI
908 version and a few console versions where this
Bram Moolenaar843ee412004-06-30 16:16:41 +0000909 can be detected. May also happen when a
910 dialog pops up.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000911 *FuncUndefined*
912FuncUndefined When a user function is used but it isn't
913 defined. Useful for defining a function only
Bram Moolenaard7afed32007-05-06 13:26:41 +0000914 when it's used. The pattern is matched
915 against the function name. Both <amatch> and
916 <afile> are set to the name of the function.
Bram Moolenaar4072ba52020-12-23 13:56:35 +0100917 Not triggered when compiling a |Vim9|
918 function.
Bram Moolenaard5005162014-08-22 23:05:54 +0200919 NOTE: When writing Vim scripts a better
920 alternative is to use an autoloaded function.
Bram Moolenaar7c626922005-02-07 22:01:03 +0000921 See |autoload-functions|.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000922 *GUIEnter*
923GUIEnter After starting the GUI successfully, and after
924 opening the window. It is triggered before
925 VimEnter when using gvim. Can be used to
926 position the window from a .gvimrc file: >
927 :autocmd GUIEnter * winpos 100 50
Bram Moolenaard7afed32007-05-06 13:26:41 +0000928< *GUIFailed*
929GUIFailed After starting the GUI failed. Vim may
930 continue to run in the terminal, if possible
931 (only on Unix and alikes, when connecting the
932 X server fails). You may want to quit Vim: >
933 :autocmd GUIFailed * qall
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000934< *InsertChange*
935InsertChange When typing <Insert> while in Insert or
936 Replace mode. The |v:insertmode| variable
937 indicates the new mode.
938 Be careful not to move the cursor or do
939 anything else that the user does not expect.
Bram Moolenaare659c952011-05-19 17:25:41 +0200940 *InsertCharPre*
941InsertCharPre When a character is typed in Insert mode,
942 before inserting the char.
943 The |v:char| variable indicates the char typed
944 and can be changed during the event to insert
945 a different character. When |v:char| is set
946 to more than one character this text is
947 inserted literally.
948 It is not allowed to change the text |textlock|.
949 The event is not triggered when 'paste' is
Bram Moolenaarb5b75622018-03-09 22:22:21 +0100950 set. {only with the +eval feature}
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000951 *InsertEnter*
Bram Moolenaard7afed32007-05-06 13:26:41 +0000952InsertEnter Just before starting Insert mode. Also for
953 Replace mode and Virtual Replace mode. The
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000954 |v:insertmode| variable indicates the mode.
Bram Moolenaar097c9922013-05-19 21:15:15 +0200955 Be careful not to do anything else that the
956 user does not expect.
957 The cursor is restored afterwards. If you do
958 not want that set |v:char| to a non-empty
959 string.
Bram Moolenaarb53e13a2020-10-21 12:19:53 +0200960 *InsertLeavePre*
961InsertLeavePre Just before leaving Insert mode. Also when
Bram Moolenaarcb80aa22020-10-26 21:12:46 +0100962 using CTRL-O |i_CTRL-O|. Be careful not to
Bram Moolenaarb53e13a2020-10-21 12:19:53 +0200963 change mode or use `:normal`, it will likely
964 cause trouble.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000965 *InsertLeave*
Bram Moolenaarb53e13a2020-10-21 12:19:53 +0200966InsertLeave Just after leaving Insert mode. Also when
967 using CTRL-O |i_CTRL-O|. But not for |i_CTRL-C|.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000968 *MenuPopup*
969MenuPopup Just before showing the popup menu (under the
970 right mouse button). Useful for adjusting the
971 menu for what is under the cursor or mouse
972 pointer.
Bram Moolenaar4c5d8152018-10-19 22:36:53 +0200973 The pattern is matched against one or two
974 characters representing the mode:
Bram Moolenaar4e330bb2005-12-07 21:04:31 +0000975 n Normal
976 v Visual
977 o Operator-pending
978 i Insert
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000979 c Command line
Bram Moolenaar4c5d8152018-10-19 22:36:53 +0200980 tl Terminal
=?UTF-8?q?Magnus=20Gro=C3=9F?=f1e88762021-09-12 13:39:55 +0200981 *ModeChanged*
982ModeChanged After changing the mode. The pattern is
983 matched against `'old_mode:new_mode'`, for
=?UTF-8?q?Magnus=20Gro=C3=9F?=25def2c2021-10-22 18:56:39 +0100984 example match against `*:c*` to simulate
985 |CmdlineEnter|.
=?UTF-8?q?Magnus=20Gro=C3=9F?=f1e88762021-09-12 13:39:55 +0200986 The following values of |v:event| are set:
987 old_mode The mode before it changed.
988 new_mode The new mode as also returned
=?UTF-8?q?Magnus=20Gro=C3=9F?=25def2c2021-10-22 18:56:39 +0100989 by |mode()| called with a
990 non-zero argument.
=?UTF-8?q?Magnus=20Gro=C3=9F?=f1e88762021-09-12 13:39:55 +0200991 When ModeChanged is triggered, old_mode will
992 have the value of new_mode when the event was
993 last triggered.
=?UTF-8?q?Magnus=20Gro=C3=9F?=25def2c2021-10-22 18:56:39 +0100994 This will be triggered on every minor mode
995 change.
=?UTF-8?q?Magnus=20Gro=C3=9F?=f1e88762021-09-12 13:39:55 +0200996 Usage example to use relative line numbers
Bram Moolenaar6e649222021-10-04 21:32:54 +0100997 when entering Visual mode: >
=?UTF-8?q?Magnus=20Gro=C3=9F?=25def2c2021-10-22 18:56:39 +0100998 :au ModeChanged [vV\x16]*:* let &l:rnu = mode() =~# '^[vV\x16]'
999 :au ModeChanged *:[vV\x16]* let &l:rnu = mode() =~# '^[vV\x16]'
1000 :au WinEnter,WinLeave * let &l:rnu = mode() =~# '^[vV\x16]'
=?UTF-8?q?Magnus=20Gro=C3=9F?=f1e88762021-09-12 13:39:55 +02001001< *OptionSet*
Bram Moolenaar53744302015-07-17 17:38:22 +02001002OptionSet After setting an option. The pattern is
1003 matched against the long option name.
Bram Moolenaard7c96872019-06-15 17:12:48 +02001004 |<amatch>| indicates what option has been set.
Bram Moolenaar53744302015-07-17 17:38:22 +02001005
Bram Moolenaard7c96872019-06-15 17:12:48 +02001006 |v:option_type| indicates whether it's global
Bram Moolenaar6c1e1572019-06-22 02:13:00 +02001007 or local scoped.
Bram Moolenaard7c96872019-06-15 17:12:48 +02001008 |v:option_command| indicates what type of
1009 set/let command was used (follow the tag to
1010 see the table).
1011 |v:option_new| indicates the newly set value.
Bram Moolenaar6c1e1572019-06-22 02:13:00 +02001012 |v:option_oldlocal| has the old local value.
1013 |v:option_oldglobal| has the old global value.
Bram Moolenaard7c96872019-06-15 17:12:48 +02001014 |v:option_old| indicates the old option value.
1015
1016 |v:option_oldlocal| is only set when |:set|
1017 or |:setlocal| or a |modeline| was used to set
1018 the option. Similarly |v:option_oldglobal| is
1019 only set when |:set| or |:setglobal| was used.
1020
Bram Moolenaar10e8ff92023-06-10 21:40:39 +01001021 This does not set |<abuf>|, you could use
1022 |bufnr()|.
1023
Bram Moolenaard7c96872019-06-15 17:12:48 +02001024 Note that when setting a |global-local| string
1025 option with |:set|, then |v:option_old| is the
1026 old global value. However, for all other kinds
1027 of options (local string options, global-local
1028 number options, ...) it is the old local
1029 value.
1030
1031 OptionSet is not triggered on startup and for
1032 the 'key' option for obvious reasons.
Bram Moolenaar53744302015-07-17 17:38:22 +02001033
Bram Moolenaarf9132812015-07-21 19:19:13 +02001034 Usage example: Check for the existence of the
1035 directory in the 'backupdir' and 'undodir'
1036 options, create the directory if it doesn't
1037 exist yet.
1038
1039 Note: It's a bad idea to reset an option
1040 during this autocommand, this may break a
1041 plugin. You can always use `:noa` to prevent
1042 triggering this autocommand.
Bram Moolenaar53744302015-07-17 17:38:22 +02001043
Bram Moolenaar95bafa22018-10-02 13:26:25 +02001044 When using |:set| in the autocommand the event
1045 is not triggered again.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001046 *QuickFixCmdPre*
1047QuickFixCmdPre Before a quickfix command is run (|:make|,
Bram Moolenaara6557602006-02-04 22:43:20 +00001048 |:lmake|, |:grep|, |:lgrep|, |:grepadd|,
1049 |:lgrepadd|, |:vimgrep|, |:lvimgrep|,
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001050 |:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
Bram Moolenaar84f72352012-03-11 15:57:40 +01001051 |:cfile|, |:cgetfile|, |:caddfile|, |:lfile|,
1052 |:lgetfile|, |:laddfile|, |:helpgrep|,
Bram Moolenaar64d8e252016-09-06 22:12:34 +02001053 |:lhelpgrep|, |:cexpr|, |:cgetexpr|,
1054 |:caddexpr|, |:cbuffer|, |:cgetbuffer|,
1055 |:caddbuffer|).
Bram Moolenaarf1eeae92010-05-14 23:14:42 +02001056 The pattern is matched against the command
1057 being run. When |:grep| is used but 'grepprg'
1058 is set to "internal" it still matches "grep".
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001059 This command cannot be used to set the
1060 'makeprg' and 'grepprg' variables.
1061 If this command causes an error, the quickfix
1062 command is not executed.
1063 *QuickFixCmdPost*
1064QuickFixCmdPost Like QuickFixCmdPre, but after a quickfix
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00001065 command is run, before jumping to the first
Bram Moolenaar8ec1f852012-03-07 20:13:49 +01001066 location. For |:cfile| and |:lfile| commands
Bram Moolenaarb59ae592022-11-23 23:46:31 +00001067 it is run after the error file is read and
1068 before moving to the first error.
Bram Moolenaar8ec1f852012-03-07 20:13:49 +01001069 See |QuickFixCmdPost-example|.
Bram Moolenaar30b65812012-07-12 22:01:11 +02001070 *QuitPre*
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001071QuitPre When using `:quit`, `:wq` or `:qall`, before
1072 deciding whether it closes the current window
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +02001073 or quits Vim. For `:wq` the buffer is written
1074 before QuitPre is triggered. Can be used to
1075 close any non-essential window if the current
1076 window is the last ordinary window.
Bram Moolenaar12a96de2018-03-11 14:44:18 +01001077 Also see |ExitPre|.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001078 *RemoteReply*
1079RemoteReply When a reply from a Vim that functions as
Bram Moolenaard7afed32007-05-06 13:26:41 +00001080 server was received |server2client()|. The
1081 pattern is matched against the {serverid}.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001082 <amatch> is equal to the {serverid} from which
1083 the reply was sent, and <afile> is the actual
1084 reply string.
1085 Note that even if an autocommand is defined,
1086 the reply should be read with |remote_read()|
1087 to consume it.
Bram Moolenaar8aeec402019-09-15 23:02:04 +02001088 *SafeState*
1089SafeState When nothing is pending, going to wait for the
1090 user to type a character.
1091 This will not be triggered when:
1092 - an operator is pending
1093 - a register was entered with "r
1094 - halfway executing a command
1095 - executing a mapping
1096 - there is typeahead
1097 - Insert mode completion is active
1098 - Command line completion is active
1099 You can use `mode()` to find out what state
1100 Vim is in. That may be:
1101 - VIsual mode
1102 - Normal mode
1103 - Insert mode
1104 - Command-line mode
1105 Depending on what you want to do, you may also
1106 check more with `state()`, e.g. whether the
1107 screen was scrolled for messages.
Bram Moolenaar69198cb2019-09-16 21:58:13 +02001108 *SafeStateAgain*
1109SafeStateAgain Like SafeState but after processing any
1110 messages and invoking callbacks. This may be
1111 triggered often, don't do something that takes
1112 time.
Bram Moolenaar8aeec402019-09-15 23:02:04 +02001113
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001114 *SessionLoadPost*
1115SessionLoadPost After loading the session file created using
1116 the |:mksession| command.
Bram Moolenaara94bc432006-03-10 21:42:59 +00001117 *ShellCmdPost*
1118ShellCmdPost After executing a shell command with |:!cmd|,
1119 |:shell|, |:make| and |:grep|. Can be used to
1120 check for any changed files.
1121 *ShellFilterPost*
1122ShellFilterPost After executing a shell command with
1123 ":{range}!cmd", ":w !cmd" or ":r !cmd".
1124 Can be used to check for any changed files.
Bram Moolenaar1f35bf92006-03-07 22:38:47 +00001125 *SourcePre*
1126SourcePre Before sourcing a Vim script. |:source|
Bram Moolenaar8dd1aa52007-01-16 20:33:19 +00001127 <afile> is the name of the file being sourced.
Bram Moolenaar2b618522019-01-12 13:26:03 +01001128 *SourcePost*
1129SourcePost After sourcing a Vim script. |:source|
1130 <afile> is the name of the file being sourced.
1131 Not triggered when sourcing was interrupted.
1132 Also triggered after a SourceCmd autocommand
1133 was triggered.
Bram Moolenaar8dd1aa52007-01-16 20:33:19 +00001134 *SourceCmd*
1135SourceCmd When sourcing a Vim script. |:source|
1136 <afile> is the name of the file being sourced.
1137 The autocommand must source this file.
1138 |Cmd-event|
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001139 *SpellFileMissing*
1140SpellFileMissing When trying to load a spell checking file and
Bram Moolenaar8dd1aa52007-01-16 20:33:19 +00001141 it can't be found. The pattern is matched
1142 against the language. <amatch> is the
1143 language, 'encoding' also matters. See
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001144 |spell-SpellFileMissing|.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001145 *StdinReadPost*
1146StdinReadPost After reading from the stdin into the buffer,
1147 before executing the modelines. Only used
1148 when the "-" argument was used when Vim was
1149 started |--|.
1150 *StdinReadPre*
1151StdinReadPre Before reading from stdin into the buffer.
1152 Only used when the "-" argument was used when
1153 Vim was started |--|.
1154 *SwapExists*
1155SwapExists Detected an existing swap file when starting
1156 to edit a file. Only when it is possible to
1157 select a way to handle the situation, when Vim
1158 would ask the user what to do.
1159 The |v:swapname| variable holds the name of
Bram Moolenaarb3480382005-12-11 21:33:32 +00001160 the swap file found, <afile> the file being
1161 edited. |v:swapcommand| may contain a command
1162 to be executed in the opened file.
1163 The commands should set the |v:swapchoice|
1164 variable to a string with one character to
1165 tell Vim what should be done next:
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001166 'o' open read-only
1167 'e' edit the file anyway
1168 'r' recover
1169 'd' delete the swap file
1170 'q' quit, don't edit the file
1171 'a' abort, like hitting CTRL-C
1172 When set to an empty string the user will be
1173 asked, as if there was no SwapExists autocmd.
Bram Moolenaarb849e712009-06-24 15:51:37 +00001174 *E812*
1175 It is not allowed to change to another buffer,
1176 change a buffer name or change directory
1177 here.
Bram Moolenaarb5b75622018-03-09 22:22:21 +01001178 {only available with the +eval feature}
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001179 *Syntax*
Bram Moolenaard7afed32007-05-06 13:26:41 +00001180Syntax When the 'syntax' option has been set. The
1181 pattern is matched against the syntax name.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001182 <afile> can be used for the name of the file
1183 where this option was set, and <amatch> for
1184 the new value of 'syntax'.
1185 See |:syn-on|.
Bram Moolenaar12c11d52016-07-19 23:13:03 +02001186 *TabClosed*
1187TabClosed After closing a tab page.
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00001188 *TabEnter*
1189TabEnter Just after entering a tab page. |tab-page|
Bram Moolenaar56a907a2006-05-06 21:44:30 +00001190 After triggering the WinEnter and before
1191 triggering the BufEnter event.
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00001192 *TabLeave*
1193TabLeave Just before leaving a tab page. |tab-page|
1194 A WinLeave event will have been triggered
1195 first.
Bram Moolenaarc917da42016-07-19 22:31:36 +02001196 *TabNew*
1197TabNew When a tab page was created. |tab-page|
1198 A WinEnter event will have been triggered
1199 first, TabEnter follows.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001200 *TermChanged*
1201TermChanged After the value of 'term' has changed. Useful
1202 for re-loading the syntax file to update the
1203 colors, fonts and other terminal-dependent
1204 settings. Executed for all loaded buffers.
Bram Moolenaarb852c3e2018-03-11 16:55:36 +01001205 *TerminalOpen*
1206TerminalOpen Just after a terminal buffer was created, with
1207 `:terminal` or |term_start()|. This event is
1208 triggered even if the buffer is created
1209 without a window, with the ++hidden option.
Bram Moolenaar28ed4df2019-10-26 16:21:40 +02001210 *TerminalWinOpen*
1211TerminalWinOpen Just after a terminal buffer was created, with
1212 `:terminal` or |term_start()|. This event is
1213 triggered only if the buffer is created
1214 with a window. Can be used to set window
1215 local options for the terminal window.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001216 *TermResponse*
1217TermResponse After the response to |t_RV| is received from
1218 the terminal. The value of |v:termresponse|
1219 can be used to do things depending on the
Bram Moolenaar8e5af3e2011-04-28 19:02:44 +02001220 terminal version. Note that this event may be
1221 triggered halfway executing another event,
1222 especially if file I/O, a shell command or
1223 anything else that takes time is involved.
Danek Duvalld7d56032024-01-14 20:19:59 +01001224 *TermResponseAll*
1225TermResponseAll After the response to |t_RV|, |t_RC|, |t_RS|,
1226 |t_RB|, |t_RF|, or |t_u7| are received from
1227 the terminal. The value of |v:termresponse|,
1228 |v:termblinkresp|, |v:termstyleresp|,
1229 |v:termrbgresp|, |v:termrfgresp|, and
1230 |v:termu7resp|, correspondingly, can be used.
1231 <amatch> will be set to any of:
1232 "version",
1233 "cursorblink",
1234 "cursorshape",
1235 "background",
1236 "foreground",
1237 "ambiguouswidth"
1238 Note that this event may be triggered halfway
1239 executing another event, especially if file I/O,
1240 a shell command or anything else that takes time
1241 is involved.
Bram Moolenaarbf884932013-04-05 22:26:15 +02001242 *TextChanged*
1243TextChanged After a change was made to the text in the
Bram Moolenaard09091d2019-01-17 16:07:22 +01001244 current buffer in Normal mode. That is after
1245 |b:changedtick| has changed (also when that
1246 happened before the TextChanged autocommand
1247 was defined).
Bram Moolenaarbf884932013-04-05 22:26:15 +02001248 Not triggered when there is typeahead or when
1249 an operator is pending.
Bram Moolenaar26967612019-03-17 17:13:16 +01001250 Note: This can not be skipped with
1251 `:noautocmd`.
Bram Moolenaarbf884932013-04-05 22:26:15 +02001252 Careful: This is triggered very often, don't
1253 do anything that the user does not expect or
1254 that is slow.
1255 *TextChangedI*
1256TextChangedI After a change was made to the text in the
1257 current buffer in Insert mode.
1258 Not triggered when the popup menu is visible.
1259 Otherwise the same as TextChanged.
Bram Moolenaar5a093432018-02-10 18:15:19 +01001260 *TextChangedP*
1261TextChangedP After a change was made to the text in the
1262 current buffer in Insert mode, only when the
1263 popup menu is visible. Otherwise the same as
1264 TextChanged.
Shougo Matsushita4ccaedf2022-10-15 11:48:00 +01001265 *TextChangedT*
1266TextChangedT After a change was made to the text in the
1267 current buffer in Terminal mode.
1268 Otherwise the same as TextChanged.
Bram Moolenaarf0b03c42017-12-17 17:17:07 +01001269 *TextYankPost*
Bram Moolenaar7e1652c2017-12-16 18:27:02 +01001270TextYankPost After text has been yanked or deleted in the
1271 current buffer. The following values of
1272 |v:event| can be used to determine the operation
1273 that triggered this autocmd:
Bram Moolenaara016eeb2022-04-09 11:37:38 +01001274 inclusive TRUE if the motion is
1275 |inclusive| else the motion is
1276 |exclusive|.
Bram Moolenaar589edb32019-09-20 14:38:13 +02001277 operator The operation performed.
1278 regcontents Text that was stored in the
Bram Moolenaar7e1652c2017-12-16 18:27:02 +01001279 register, as a list of lines,
1280 like with: >
1281 getreg(r, 1, 1)
Bram Moolenaar22863042021-10-16 15:23:36 +01001282< regname Name of the register or empty
1283 string for the unnamed
1284 register, see |registers|.
Bram Moolenaar7e1652c2017-12-16 18:27:02 +01001285 regtype Type of the register, see
1286 |getregtype()|.
Bram Moolenaar37d16732020-06-12 22:09:01 +02001287 visual True if the operation is
1288 performed on a |Visual| area.
Bram Moolenaar7e1652c2017-12-16 18:27:02 +01001289 Not triggered when |quote_| is used nor when
1290 called recursively.
1291 It is not allowed to change the buffer text,
Bram Moolenaar6f4754b2022-01-23 12:07:04 +00001292 see |textlock|. *E1064*
Bram Moolenaarb5b75622018-03-09 22:22:21 +01001293 {only when compiled with the +eval feature}
Bram Moolenaarbe5ee862020-06-10 20:56:58 +02001294
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001295 *User*
1296User Never executed automatically. To be used for
1297 autocommands that are only executed with
1298 ":doautocmd".
Bram Moolenaar7dda86f2018-04-20 22:36:41 +02001299 Note that when `:doautocmd User MyEvent` is
1300 used while there are no matching autocommands,
1301 you will get an error. If you don't want
LemonBoy09371822022-04-08 15:18:45 +01001302 that, either check whether an autocommand is
1303 defined using `exists('#User#MyEvent')` or
1304 define a dummy autocommand yourself.
1305 Example: >
1306 if exists('#User#MyEvent')
1307 doautocmd User MyEvent
1308 endif
Bram Moolenaarb529cfb2022-07-25 15:42:07 +01001309<
Bram Moolenaarbe5ee862020-06-10 20:56:58 +02001310 *SigUSR1*
1311SigUSR1 After the SIGUSR1 signal has been detected.
1312 Could be used if other ways of notifying Vim
1313 are not feasible. E.g. to check for the
1314 result of a build that takes a long time, or
1315 when a motion sensor is triggered.
1316 {only on Unix}
1317
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001318 *UserGettingBored*
Bram Moolenaarbf884932013-04-05 22:26:15 +02001319UserGettingBored When the user presses the same key 42 times.
1320 Just kidding! :-)
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001321 *VimEnter*
1322VimEnter After doing all the startup stuff, including
1323 loading .vimrc files, executing the "-c cmd"
1324 arguments, creating all windows and loading
1325 the buffers in them.
Bram Moolenaar14735512016-03-26 21:00:08 +01001326 Just before this event is triggered the
1327 |v:vim_did_enter| variable is set, so that you
1328 can do: >
1329 if v:vim_did_enter
1330 call s:init()
1331 else
Bram Moolenaar589edb32019-09-20 14:38:13 +02001332 au VimEnter * call s:init()
Bram Moolenaar14735512016-03-26 21:00:08 +01001333 endif
1334< *VimLeave*
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001335VimLeave Before exiting Vim, just after writing the
1336 .viminfo file. Executed only once, like
1337 VimLeavePre.
1338 To detect an abnormal exit use |v:dying|.
Bram Moolenaar0e1e25f2010-05-28 21:07:08 +02001339 When v:dying is 2 or more this event is not
1340 triggered.
Bram Moolenaarf0068c52020-11-30 17:42:10 +01001341 To get the exit code use |v:exiting|.
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001342 *VimLeavePre*
1343VimLeavePre Before exiting Vim, just before writing the
1344 .viminfo file. This is executed only once,
1345 if there is a match with the name of what
1346 happens to be the current buffer when exiting.
1347 Mostly useful with a "*" pattern. >
1348 :autocmd VimLeavePre * call CleanupStuff()
1349< To detect an abnormal exit use |v:dying|.
Bram Moolenaar0e1e25f2010-05-28 21:07:08 +02001350 When v:dying is 2 or more this event is not
1351 triggered.
Bram Moolenaarf0068c52020-11-30 17:42:10 +01001352 To get the exit code use |v:exiting|.
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +00001353 *VimResized*
1354VimResized After the Vim window was resized, thus 'lines'
1355 and/or 'columns' changed. Not when starting
1356 up though.
Bram Moolenaar100118c2020-12-11 19:30:34 +01001357 *VimResume*
1358VimResume When the Vim instance is resumed after being
1359 suspended and |VimSuspend| was triggered.
1360 Useful for triggering |:checktime| and ensure
1361 the buffers content did not change while Vim
1362 was suspended: >
1363 :autocmd VimResume * checktime
1364< *VimSuspend*
1365VimSuspend When the Vim instance is suspended. Only when
dbivolaruab16ad32021-12-29 19:41:47 +00001366 CTRL-Z was typed inside Vim, or when the SIGTSTP
1367 signal was sent to Vim, but not for SIGSTOP.
naohiro ono23beefe2021-11-13 12:38:49 +00001368 *WinClosed*
Bram Moolenaarb59ae592022-11-23 23:46:31 +00001369WinClosed When closing a window, just before it is
1370 removed from the window layout. The pattern
1371 is matched against the |window-ID|. Both
naohiro ono23beefe2021-11-13 12:38:49 +00001372 <amatch> and <afile> are set to the
1373 |window-ID|. Non-recursive (event cannot
1374 trigger itself).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001375 *WinEnter*
1376WinEnter After entering another window. Not done for
1377 the first window, when Vim has just started.
1378 Useful for setting the window height.
1379 If the window is for another buffer, Vim
1380 executes the BufEnter autocommands after the
1381 WinEnter autocommands.
Bram Moolenaar7dda86f2018-04-20 22:36:41 +02001382 Note: For split and tabpage commands the
1383 WinEnter event is triggered after the split
1384 or tab command but before the file is loaded.
1385
Bram Moolenaar071d4272004-06-13 20:20:40 +00001386 *WinLeave*
1387WinLeave Before leaving a window. If the window to be
1388 entered next is for a different buffer, Vim
1389 executes the BufLeave autocommands before the
1390 WinLeave autocommands (but not for ":new").
1391 Not used for ":qa" or ":q" when exiting Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001392
Bram Moolenaar12c11d52016-07-19 23:13:03 +02001393 *WinNew*
1394WinNew When a new window was created. Not done for
Bram Moolenaar50ba5262016-09-22 22:33:02 +02001395 the first window, when Vim has just started.
Bram Moolenaar12c11d52016-07-19 23:13:03 +02001396 Before a WinEnter event.
1397
LemonBoy09371822022-04-08 15:18:45 +01001398 *WinScrolled*
Bram Moolenaar35fc61c2022-11-22 12:40:50 +00001399WinScrolled After any window in the current tab page
1400 scrolled the text (horizontally or vertically)
1401 or changed width or height. See
1402 |win-scrolled-resized|.
Bram Moolenaar0a60f792022-11-19 21:18:11 +00001403
1404 The pattern is matched against the |window-ID|
1405 of the first window that scrolled or resized.
1406 Both <amatch> and <afile> are set to the
1407 |window-ID|.
1408
Bram Moolenaar35fc61c2022-11-22 12:40:50 +00001409 |v:event| is set with information about size
1410 and scroll changes. |WinScrolled-event|
1411
Bram Moolenaar0a60f792022-11-19 21:18:11 +00001412 Only starts triggering after startup finished
1413 and the first screen redraw was done.
Bram Moolenaar35fc61c2022-11-22 12:40:50 +00001414 Does not trigger when defining the first
1415 WinScrolled or WinResized event, but may
1416 trigger when adding more.
Bram Moolenaar0a60f792022-11-19 21:18:11 +00001417
1418 Non-recursive: the event will not trigger
1419 while executing commands for the WinScrolled
1420 event. However, if the command causes a
1421 window to scroll or change size, then another
LemonBoy09371822022-04-08 15:18:45 +01001422 WinScrolled event will be triggered later.
Bram Moolenaar0a60f792022-11-19 21:18:11 +00001423
Bram Moolenaar35fc61c2022-11-22 12:40:50 +00001424
1425 *WinResized*
1426WinResized After a window in the current tab page changed
1427 width or height.
1428 See |win-scrolled-resized|.
1429
1430 |v:event| is set with information about size
1431 changes. |WinResized-event|
1432
1433 Same behavior as |WinScrolled| for the
1434 pattern, triggering and recursiveness.
LemonBoy09371822022-04-08 15:18:45 +01001435
Bram Moolenaar071d4272004-06-13 20:20:40 +00001436==============================================================================
Bram Moolenaarfd31be22022-01-16 14:46:06 +000014376. Patterns *autocmd-patterns* *{aupat}*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001438
LemonBoy09371822022-04-08 15:18:45 +01001439The {aupat} argument of `:autocmd` can be a comma-separated list. This works as
Bram Moolenaarfd31be22022-01-16 14:46:06 +00001440if the command was given with each pattern separately. Thus this command: >
Bram Moolenaar5a5f4592015-04-13 12:43:06 +02001441 :autocmd BufRead *.txt,*.info set et
1442Is equivalent to: >
1443 :autocmd BufRead *.txt set et
1444 :autocmd BufRead *.info set et
1445
Bram Moolenaarfd31be22022-01-16 14:46:06 +00001446The file pattern {aupat} is tested for a match against the file name in one of
Bram Moolenaar071d4272004-06-13 20:20:40 +00001447two ways:
14481. When there is no '/' in the pattern, Vim checks for a match against only
1449 the tail part of the file name (without its leading directory path).
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010014502. When there is a '/' in the pattern, Vim checks for a match against both the
1451 short file name (as you typed it) and the full file name (after expanding
1452 it to a full path and resolving symbolic links).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001453
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00001454The special pattern <buffer> or <buffer=N> is used for buffer-local
1455autocommands |autocmd-buflocal|. This pattern is not matched against the name
1456of a buffer.
1457
Bram Moolenaar071d4272004-06-13 20:20:40 +00001458Examples: >
1459 :autocmd BufRead *.txt set et
1460Set the 'et' option for all text files. >
1461
1462 :autocmd BufRead /vim/src/*.c set cindent
1463Set the 'cindent' option for C files in the /vim/src directory. >
1464
1465 :autocmd BufRead /tmp/*.c set ts=5
1466If you have a link from "/tmp/test.c" to "/home/nobody/vim/src/test.c", and
1467you start editing "/tmp/test.c", this autocommand will match.
1468
1469Note: To match part of a path, but not from the root directory, use a '*' as
1470the first character. Example: >
1471 :autocmd BufRead */doc/*.txt set tw=78
1472This autocommand will for example be executed for "/tmp/doc/xx.txt" and
1473"/usr/home/piet/doc/yy.txt". The number of directories does not matter here.
1474
1475
1476The file name that the pattern is matched against is after expanding
Bram Moolenaar446cb832008-06-24 21:56:24 +00001477wildcards. Thus if you issue this command: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001478 :e $ROOTDIR/main.$EXT
1479The argument is first expanded to: >
1480 /usr/root/main.py
1481Before it's matched with the pattern of the autocommand. Careful with this
1482when using events like FileReadCmd, the value of <amatch> may not be what you
1483expect.
1484
1485
1486Environment variables can be used in a pattern: >
1487 :autocmd BufRead $VIMRUNTIME/doc/*.txt set expandtab
1488And ~ can be used for the home directory (if $HOME is defined): >
1489 :autocmd BufWritePost ~/.vimrc so ~/.vimrc
1490 :autocmd BufRead ~archive/* set readonly
1491The environment variable is expanded when the autocommand is defined, not when
1492the autocommand is executed. This is different from the command!
1493
1494 *file-pattern*
1495The pattern is interpreted like mostly used in file names:
Bram Moolenaar3b1db362013-08-10 15:00:24 +02001496 * matches any sequence of characters; Unusual: includes path
Bram Moolenaar9d98fe92013-08-03 18:35:36 +02001497 separators
Bram Moolenaar071d4272004-06-13 20:20:40 +00001498 ? matches any single character
1499 \? matches a '?'
1500 . matches a '.'
1501 ~ matches a '~'
1502 , separates patterns
1503 \, matches a ','
1504 { } like \( \) in a |pattern|
1505 , inside { }: like \| in a |pattern|
Bram Moolenaara946afe2013-08-02 15:22:39 +02001506 \} literal }
1507 \{ literal {
1508 \\\{n,m\} like \{n,m} in a |pattern|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001509 \ special meaning like in a |pattern|
1510 [ch] matches 'c' or 'h'
1511 [^ch] match any character but 'c' and 'h'
1512
1513Note that for all systems the '/' character is used for path separator (even
Bram Moolenaar6f345a12019-12-17 21:27:18 +01001514for MS-Windows). This was done because the backslash is difficult to use in a
1515pattern and to make the autocommands portable across different systems.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001516
Bram Moolenaar64d8e252016-09-06 22:12:34 +02001517It is possible to use |pattern| items, but they may not work as expected,
1518because of the translation done for the above.
1519
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00001520 *autocmd-changes*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001521Matching with the pattern is done when an event is triggered. Changing the
1522buffer name in one of the autocommands, or even deleting the buffer, does not
1523change which autocommands will be executed. Example: >
1524
1525 au BufEnter *.foo bdel
1526 au BufEnter *.foo set modified
1527
1528This will delete the current buffer and then set 'modified' in what has become
1529the current buffer instead. Vim doesn't take into account that "*.foo"
1530doesn't match with that buffer name. It matches "*.foo" with the name of the
1531buffer at the moment the event was triggered.
1532
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00001533However, buffer-local autocommands will not be executed for a buffer that has
1534been wiped out with |:bwipe|. After deleting the buffer with |:bdel| the
1535buffer actually still exists (it becomes unlisted), thus the autocommands are
1536still executed.
1537
Bram Moolenaar071d4272004-06-13 20:20:40 +00001538==============================================================================
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000015397. Buffer-local autocommands *autocmd-buflocal* *autocmd-buffer-local*
1540 *<buffer=N>* *<buffer=abuf>* *E680*
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00001541
1542Buffer-local autocommands are attached to a specific buffer. They are useful
1543if the buffer does not have a name and when the name does not match a specific
1544pattern. But it also means they must be explicitly added to each buffer.
1545
1546Instead of a pattern buffer-local autocommands use one of these forms:
1547 <buffer> current buffer
1548 <buffer=99> buffer number 99
1549 <buffer=abuf> using <abuf> (only when executing autocommands)
1550 |<abuf>|
1551
1552Examples: >
1553 :au CursorHold <buffer> echo 'hold'
1554 :au CursorHold <buffer=33> echo 'hold'
Bram Moolenaar88774fd2015-08-25 19:52:04 +02001555 :au BufNewFile * au CursorHold <buffer=abuf> echo 'hold'
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00001556
1557All the commands for autocommands also work with buffer-local autocommands,
1558simply use the special string instead of the pattern. Examples: >
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001559 :au! * <buffer> " remove buffer-local autocommands for
1560 " current buffer
1561 :au! * <buffer=33> " remove buffer-local autocommands for
1562 " buffer #33
Bram Moolenaar446cb832008-06-24 21:56:24 +00001563 :bufdo :au! CursorHold <buffer> " remove autocmd for given event for all
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001564 " buffers
1565 :au * <buffer> " list buffer-local autocommands for
1566 " current buffer
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00001567
1568Note that when an autocommand is defined for the current buffer, it is stored
1569with the buffer number. Thus it uses the form "<buffer=12>", where 12 is the
1570number of the current buffer. You will see this when listing autocommands,
1571for example.
1572
1573To test for presence of buffer-local autocommands use the |exists()| function
1574as follows: >
1575 :if exists("#CursorHold#<buffer=12>") | ... | endif
1576 :if exists("#CursorHold#<buffer>") | ... | endif " for current buffer
1577
1578When a buffer is wiped out its buffer-local autocommands are also gone, of
1579course. Note that when deleting a buffer, e.g., with ":bdel", it is only
1580unlisted, the autocommands are still present. In order to see the removal of
1581buffer-local autocommands: >
1582 :set verbose=6
1583
1584It is not possible to define buffer-local autocommands for a non-existent
1585buffer.
1586
1587==============================================================================
15888. Groups *autocmd-groups*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001589
1590Autocommands can be put together in a group. This is useful for removing or
1591executing a group of autocommands. For example, all the autocommands for
1592syntax highlighting are put in the "highlight" group, to be able to execute
1593":doautoall highlight BufRead" when the GUI starts.
1594
1595When no specific group is selected, Vim uses the default group. The default
1596group does not have a name. You cannot execute the autocommands from the
1597default group separately; you can execute them only by executing autocommands
1598for all groups.
1599
1600Normally, when executing autocommands automatically, Vim uses the autocommands
1601for all groups. The group only matters when executing autocommands with
1602":doautocmd" or ":doautoall", or when defining or deleting autocommands.
1603
1604The group name can contain any characters except white space. The group name
1605"end" is reserved (also in uppercase).
1606
1607The group name is case sensitive. Note that this is different from the event
1608name!
1609
1610 *:aug* *:augroup*
1611:aug[roup] {name} Define the autocmd group name for the
1612 following ":autocmd" commands. The name "end"
1613 or "END" selects the default group.
Bram Moolenaar256972a2015-12-29 19:10:25 +01001614 To avoid confusion, the name should be
1615 different from existing {event} names, as this
1616 most likely will not do what you intended.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001617
Bram Moolenaar64d8e252016-09-06 22:12:34 +02001618 *:augroup-delete* *E367* *W19* *E936*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001619:aug[roup]! {name} Delete the autocmd group {name}. Don't use
1620 this if there is still an autocommand using
Bram Moolenaarbc8801c2016-08-02 21:04:33 +02001621 this group! You will get a warning if doing
Bram Moolenaare7b1ea02020-08-07 19:54:59 +02001622 it anyway. When the group is the current
1623 group you will get error E936.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001624
1625To enter autocommands for a specific group, use this method:
16261. Select the group with ":augroup {name}".
16272. Delete any old autocommands with ":au!".
16283. Define the autocommands.
16294. Go back to the default group with "augroup END".
1630
1631Example: >
1632 :augroup uncompress
1633 : au!
1634 : au BufEnter *.gz %!gunzip
1635 :augroup END
1636
1637This prevents having the autocommands defined twice (e.g., after sourcing the
1638.vimrc file again).
1639
Bram Moolenaar6e649222021-10-04 21:32:54 +01001640 *FileExplorer*
1641There is one group that is recognized by Vim: FileExplorer. If this group
1642exists Vim assumes that editing a directory is possible and will trigger a
1643plugin that lists the files in that directory. This is used by the |netrw|
1644plugin. This allows you to do: >
1645 browse edit
1646
Bram Moolenaar071d4272004-06-13 20:20:40 +00001647==============================================================================
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +000016489. Executing autocommands *autocmd-execute*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001649
1650Vim can also execute Autocommands non-automatically. This is useful if you
1651have changed autocommands, or when Vim has executed the wrong autocommands
1652(e.g., the file pattern match was wrong).
1653
1654Note that the 'eventignore' option applies here too. Events listed in this
1655option will not cause any commands to be executed.
1656
Bram Moolenaar61da1bf2019-06-06 12:14:49 +02001657 *:do* *:doau* *:doaut* *:doautocmd* *E217*
Bram Moolenaar5dc62522012-02-13 00:05:22 +01001658:do[autocmd] [<nomodeline>] [group] {event} [fname]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001659 Apply the autocommands matching [fname] (default:
1660 current file name) for {event} to the current buffer.
1661 You can use this when the current file name does not
1662 match the right pattern, after changing settings, or
1663 to execute autocommands for a certain event.
1664 It's possible to use this inside an autocommand too,
1665 so you can base the autocommands for one extension on
1666 another extension. Example: >
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01001667 :au BufEnter *.cpp so ~/.vimrc_cpp
1668 :au BufEnter *.cpp doau BufEnter x.c
Bram Moolenaar071d4272004-06-13 20:20:40 +00001669< Be careful to avoid endless loops. See
1670 |autocmd-nested|.
1671
1672 When the [group] argument is not given, Vim executes
1673 the autocommands for all groups. When the [group]
1674 argument is included, Vim executes only the matching
1675 autocommands for that group. Note: if you use an
1676 undefined group name, Vim gives you an error message.
Bram Moolenaar60542ac2012-02-12 20:14:01 +01001677 *<nomodeline>*
1678 After applying the autocommands the modelines are
1679 processed, so that their settings overrule the
1680 settings from autocommands, like what happens when
1681 editing a file. This is skipped when the <nomodeline>
1682 argument is present. You probably want to use
1683 <nomodeline> for events that are not used when loading
1684 a buffer, such as |User|.
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001685 Processing modelines is also skipped when no
1686 matching autocommands were executed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001687
1688 *:doautoa* *:doautoall*
Bram Moolenaara61d5fb2012-02-12 00:18:58 +01001689:doautoa[ll] [<nomodeline>] [group] {event} [fname]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001690 Like ":doautocmd", but apply the autocommands to each
Bram Moolenaardad44732021-03-31 20:07:33 +02001691 loaded buffer. The current buffer is done last.
1692
1693 Note that [fname] is used to select the autocommands,
Bram Moolenaar4c295022021-05-02 17:19:11 +02001694 not the buffers to which they are applied. Example: >
1695 augroup mine
1696 autocmd!
1697 autocmd FileType * echo expand('<amatch>')
1698 augroup END
1699 doautoall mine FileType Loaded-Buffer
1700< Sourcing this script, you'll see as many
1701 "Loaded-Buffer" echoed as there are loaded buffers.
Bram Moolenaardad44732021-03-31 20:07:33 +02001702
Bram Moolenaar071d4272004-06-13 20:20:40 +00001703 Careful: Don't use this for autocommands that delete a
1704 buffer, change to another buffer or change the
1705 contents of a buffer; the result is unpredictable.
1706 This command is intended for autocommands that set
1707 options, change highlighting, and things like that.
1708
1709==============================================================================
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000171010. Using autocommands *autocmd-use*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001711
1712For WRITING FILES there are four possible sets of events. Vim uses only one
1713of these sets for a write command:
1714
1715BufWriteCmd BufWritePre BufWritePost writing the whole buffer
1716 FilterWritePre FilterWritePost writing to filter temp file
1717FileAppendCmd FileAppendPre FileAppendPost appending to a file
1718FileWriteCmd FileWritePre FileWritePost any other file write
1719
1720When there is a matching "*Cmd" autocommand, it is assumed it will do the
1721writing. No further writing is done and the other events are not triggered.
1722|Cmd-event|
1723
1724Note that the *WritePost commands should undo any changes to the buffer that
1725were caused by the *WritePre commands; otherwise, writing the file will have
1726the side effect of changing the buffer.
1727
1728Before executing the autocommands, the buffer from which the lines are to be
1729written temporarily becomes the current buffer. Unless the autocommands
1730change the current buffer or delete the previously current buffer, the
1731previously current buffer is made the current buffer again.
1732
1733The *WritePre and *AppendPre autocommands must not delete the buffer from
1734which the lines are to be written.
1735
1736The '[ and '] marks have a special position:
1737- Before the *ReadPre event the '[ mark is set to the line just above where
1738 the new lines will be inserted.
1739- Before the *ReadPost event the '[ mark is set to the first line that was
1740 just read, the '] mark to the last line.
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001741- Before executing the *WriteCmd, *WritePre and *AppendPre autocommands the '[
1742 mark is set to the first line that will be written, the '] mark to the last
1743 line.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001744Careful: '[ and '] change when using commands that change the buffer.
1745
1746In commands which expect a file name, you can use "<afile>" for the file name
1747that is being read |:<afile>| (you can also use "%" for the current file
1748name). "<abuf>" can be used for the buffer number of the currently effective
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +02001749buffer. This also works for buffers that don't have a name. But it doesn't
Bram Moolenaar071d4272004-06-13 20:20:40 +00001750work for files without a buffer (e.g., with ":r file").
1751
1752 *gzip-example*
1753Examples for reading and writing compressed files: >
1754 :augroup gzip
1755 : autocmd!
1756 : autocmd BufReadPre,FileReadPre *.gz set bin
1757 : autocmd BufReadPost,FileReadPost *.gz '[,']!gunzip
1758 : autocmd BufReadPost,FileReadPost *.gz set nobin
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001759 : autocmd BufReadPost,FileReadPost *.gz execute ":doautocmd BufReadPost " .. expand("%:r")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001760 : autocmd BufWritePost,FileWritePost *.gz !mv <afile> <afile>:r
1761 : autocmd BufWritePost,FileWritePost *.gz !gzip <afile>:r
1762
1763 : autocmd FileAppendPre *.gz !gunzip <afile>
1764 : autocmd FileAppendPre *.gz !mv <afile>:r <afile>
1765 : autocmd FileAppendPost *.gz !mv <afile> <afile>:r
1766 : autocmd FileAppendPost *.gz !gzip <afile>:r
1767 :augroup END
1768
1769The "gzip" group is used to be able to delete any existing autocommands with
1770":autocmd!", for when the file is sourced twice.
1771
1772("<afile>:r" is the file name without the extension, see |:_%:|)
1773
1774The commands executed for the BufNewFile, BufRead/BufReadPost, BufWritePost,
1775FileAppendPost and VimLeave events do not set or reset the changed flag of the
1776buffer. When you decompress the buffer with the BufReadPost autocommands, you
1777can still exit with ":q". When you use ":undo" in BufWritePost to undo the
1778changes made by BufWritePre commands, you can still do ":q" (this also makes
1779"ZZ" work). If you do want the buffer to be marked as modified, set the
1780'modified' option.
1781
1782To execute Normal mode commands from an autocommand, use the ":normal"
1783command. Use with care! If the Normal mode command is not finished, the user
1784needs to type characters (e.g., after ":normal m" you need to type a mark
1785name).
1786
1787If you want the buffer to be unmodified after changing it, reset the
1788'modified' option. This makes it possible to exit the buffer with ":q"
1789instead of ":q!".
1790
1791 *autocmd-nested* *E218*
Bram Moolenaar26967612019-03-17 17:13:16 +01001792By default, autocommands do not nest. For example, if you use ":e" or ":w" in
1793an autocommand, Vim does not execute the BufRead and BufWrite autocommands for
Bram Moolenaar071d4272004-06-13 20:20:40 +00001794those commands. If you do want this, use the "nested" flag for those commands
1795in which you want nesting. For example: >
Bram Moolenaareb93f3f2019-04-04 15:04:56 +02001796 :autocmd FileChangedShell *.c ++nested e!
Bram Moolenaar071d4272004-06-13 20:20:40 +00001797The nesting is limited to 10 levels to get out of recursive loops.
1798
1799It's possible to use the ":au" command in an autocommand. This can be a
1800self-modifying command! This can be useful for an autocommand that should
1801execute only once.
1802
Bram Moolenaarb3480382005-12-11 21:33:32 +00001803If you want to skip autocommands for one command, use the |:noautocmd| command
1804modifier or the 'eventignore' option.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001805
1806Note: When reading a file (with ":read file" or with a filter command) and the
1807last line in the file does not have an <EOL>, Vim remembers this. At the next
1808write (with ":write file" or with a filter command), if the same line is
1809written again as the last line in a file AND 'binary' is set, Vim does not
1810supply an <EOL>. This makes a filter command on the just read lines write the
1811same file as was read, and makes a write command on just filtered lines write
1812the same file as was read from the filter. For example, another way to write
1813a compressed file: >
1814
1815 :autocmd FileWritePre *.gz set bin|'[,']!gzip
1816 :autocmd FileWritePost *.gz undo|set nobin
1817<
1818 *autocommand-pattern*
1819You can specify multiple patterns, separated by commas. Here are some
1820examples: >
1821
1822 :autocmd BufRead * set tw=79 nocin ic infercase fo=2croq
1823 :autocmd BufRead .letter set tw=72 fo=2tcrq
1824 :autocmd BufEnter .letter set dict=/usr/lib/dict/words
1825 :autocmd BufLeave .letter set dict=
1826 :autocmd BufRead,BufNewFile *.c,*.h set tw=0 cin noic
1827 :autocmd BufEnter *.c,*.h abbr FOR for (i = 0; i < 3; ++i)<CR>{<CR>}<Esc>O
1828 :autocmd BufLeave *.c,*.h unabbr FOR
1829
1830For makefiles (makefile, Makefile, imakefile, makefile.unix, etc.): >
1831
1832 :autocmd BufEnter ?akefile* set include=^s\=include
1833 :autocmd BufLeave ?akefile* set include&
1834
1835To always start editing C files at the first function: >
1836
1837 :autocmd BufRead *.c,*.h 1;/^{
1838
1839Without the "1;" above, the search would start from wherever the file was
1840entered, rather than from the start of the file.
1841
1842 *skeleton* *template*
1843To read a skeleton (template) file when opening a new file: >
1844
1845 :autocmd BufNewFile *.c 0r ~/vim/skeleton.c
1846 :autocmd BufNewFile *.h 0r ~/vim/skeleton.h
1847 :autocmd BufNewFile *.java 0r ~/vim/skeleton.java
1848
1849To insert the current date and time in a *.html file when writing it: >
1850
1851 :autocmd BufWritePre,FileWritePre *.html ks|call LastMod()|'s
1852 :fun LastMod()
1853 : if line("$") > 20
1854 : let l = 20
1855 : else
1856 : let l = line("$")
1857 : endif
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001858 : exe "1," .. l .. "g/Last modified: /s/Last modified: .*/Last modified: " ..
Bram Moolenaar071d4272004-06-13 20:20:40 +00001859 : \ strftime("%Y %b %d")
1860 :endfun
1861
1862You need to have a line "Last modified: <date time>" in the first 20 lines
1863of the file for this to work. Vim replaces <date time> (and anything in the
1864same line after it) with the current date and time. Explanation:
1865 ks mark current position with mark 's'
1866 call LastMod() call the LastMod() function to do the work
1867 's return the cursor to the old position
1868The LastMod() function checks if the file is shorter than 20 lines, and then
1869uses the ":g" command to find lines that contain "Last modified: ". For those
1870lines the ":s" command is executed to replace the existing date with the
1871current one. The ":execute" command is used to be able to use an expression
1872for the ":g" and ":s" commands. The date is obtained with the strftime()
1873function. You can change its argument to get another date string.
1874
1875When entering :autocmd on the command-line, completion of events and command
1876names may be done (with <Tab>, CTRL-D, etc.) where appropriate.
1877
1878Vim executes all matching autocommands in the order that you specify them.
1879It is recommended that your first autocommand be used for all files by using
1880"*" as the file pattern. This means that you can define defaults you like
1881here for any settings, and if there is another matching autocommand it will
1882override these. But if there is no other matching autocommand, then at least
1883your default settings are recovered (if entering this file from another for
1884which autocommands did match). Note that "*" will also match files starting
1885with ".", unlike Unix shells.
1886
1887 *autocmd-searchpat*
1888Autocommands do not change the current search patterns. Vim saves the current
1889search patterns before executing autocommands then restores them after the
1890autocommands finish. This means that autocommands do not affect the strings
1891highlighted with the 'hlsearch' option. Within autocommands, you can still
1892use search patterns normally, e.g., with the "n" command.
1893If you want an autocommand to set the search pattern, such that it is used
1894after the autocommand finishes, use the ":let @/ =" command.
1895The search-highlighting cannot be switched off with ":nohlsearch" in an
1896autocommand. Use the 'h' flag in the 'viminfo' option to disable search-
1897highlighting when starting Vim.
1898
1899 *Cmd-event*
1900When using one of the "*Cmd" events, the matching autocommands are expected to
Bram Moolenaar8dd1aa52007-01-16 20:33:19 +00001901do the file reading, writing or sourcing. This can be used when working with
1902a special kind of file, for example on a remote system.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001903CAREFUL: If you use these events in a wrong way, it may have the effect of
1904making it impossible to read or write the matching files! Make sure you test
1905your autocommands properly. Best is to use a pattern that will never match a
1906normal file name, for example "ftp://*".
1907
1908When defining a BufReadCmd it will be difficult for Vim to recover a crashed
1909editing session. When recovering from the original file, Vim reads only those
1910parts of a file that are not found in the swap file. Since that is not
1911possible with a BufReadCmd, use the |:preserve| command to make sure the
1912original file isn't needed for recovery. You might want to do this only when
1913you expect the file to be modified.
1914
Bram Moolenaar8dd1aa52007-01-16 20:33:19 +00001915For file read and write commands the |v:cmdarg| variable holds the "++enc="
1916and "++ff=" argument that are effective. These should be used for the command
1917that reads/writes the file. The |v:cmdbang| variable is one when "!" was
1918used, zero otherwise.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001919
Bram Moolenaarc88ebf72010-07-22 22:30:23 +02001920See the $VIMRUNTIME/plugin/netrwPlugin.vim for examples.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001921
Bram Moolenaarb3480382005-12-11 21:33:32 +00001922==============================================================================
192311. Disabling autocommands *autocmd-disable*
1924
1925To disable autocommands for some time use the 'eventignore' option. Note that
1926this may cause unexpected behavior, make sure you restore 'eventignore'
1927afterwards, using a |:try| block with |:finally|.
1928
1929 *:noautocmd* *:noa*
1930To disable autocommands for just one command use the ":noautocmd" command
1931modifier. This will set 'eventignore' to "all" for the duration of the
1932following command. Example: >
1933
1934 :noautocmd w fname.gz
1935
1936This will write the file without triggering the autocommands defined by the
1937gzip plugin.
1938
Bram Moolenaar26967612019-03-17 17:13:16 +01001939Note that some autocommands are not triggered right away, but only later.
1940This specifically applies to |CursorMoved| and |TextChanged|.
1941
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +00001942
Bram Moolenaar91f84f62018-07-29 15:07:52 +02001943 vim:tw=78:ts=8:noet:ft=help:norl: