To get an idea of what Vimscript is capable of, take a look at all the events it can react to because basically your script won't do much except when something happens (usually caused by the user) and your script reacts. For example, do something when opening a file, or highlighting a word, or hitting some trigger key. You don't want your script to just be running constantly in a loop in the background, and you also don't want it to stall Vim during its handling of events, including at startup. If you go through Vim's built-in documentation you can find the list of events but I've created some tables to make it easier to view online. You've probably noticed these before in other people's VIm scripts or in .vimrc lines you've copied and pasted (the Buf* events like BufRead or BufWrite are common).
First an overview by function with a short explanation. Then the list
alphabetically with full explanations autocmd-events-abc
.
Name| triggered by
Reading
Event | Description |
---|---|
BufNewFile |
starting to edit a file that doesn't exist |
BufReadPre |
starting to edit a new buffer, before reading the file |
BufRead |
starting to edit a new buffer, after reading the file |
BufReadPost |
starting to edit a new buffer, after reading the file |
BufReadCmd |
before starting to edit a new buffer Cmd-event |
FileReadPre |
before reading a file with a ":read" command |
FileReadPost |
after reading a file with a ":read" command |
FileReadCmd |
before reading a file with a ":read" command Cmd-event |
FilterReadPre |
before reading a file from a filter command |
FilterReadPost |
after reading a file from a filter command |
StdinReadPre |
before reading from stdin into the buffer |
StdinReadPost |
After reading from the stdin into the buffer |
Writing
Event | Description |
---|---|
BufWrite |
starting to write the whole buffer to a file |
BufWritePre |
starting to write the whole buffer to a file |
BufWritePost |
after writing the whole buffer to a file |
BufWriteCmd |
before writing the whole buffer to a file Cmd-event |
FileWritePre |
starting to write part of a buffer to a file |
FileWritePost |
after writing part of a buffer to a file |
FileWriteCmd |
before writing part of a buffer to a file Cmd-event |
FileAppendPre |
starting to append to a file |
FileAppendPost |
after appending to a file |
FileAppendCmd |
before appending to a file Cmd-event |
FilterWritePre |
starting to write a file for a filter command or diff |
FilterWritePost |
after writing a file for a filter command or diff |
Buffers
Event | Description |
---|---|
BufAdd |
just after adding a buffer to the buffer list |
BufCreate |
just after adding a buffer to the buffer list |
BufDelete |
before deleting a buffer from the buffer list |
BufWipeout |
before completely deleting a buffer |
BufFilePre |
before changing the name of the current buffer |
BufFilePost |
after changing the name of the current buffer |
BufEnter |
after entering a buffer |
BufLeave |
before leaving to another buffer |
BufWinEnter |
after a buffer is displayed in a window |
BufWinLeave |
before a buffer is removed from a window |
BufUnload |
before unloading a buffer |
BufHidden |
just after a buffer has become hidden |
BufNew |
just after creating a new buffer |
SwapExists |
detected an existing swap file |
Options
Event | Description |
---|---|
FileType |
when the 'filetype' option has been set |
Syntax |
when the 'syntax' option has been set |
EncodingChanged |
after the 'encoding' option has been changed |
TermChanged |
after the value of 'term' has changed |
Startup and exit
Event | Description |
---|---|
VimEnter |
after doing all the startup stuff |
GUIEnter |
after starting the GUI successfully |
GUIFailed |
after starting the GUI failed |
TermResponse |
after the terminal response to t_RV is received |
QuitPre |
when using :quit , before deciding whether to quit |
VimLeavePre |
before exiting Vim, before writing the viminfo file |
VimLeave |
before exiting Vim, after writing the viminfo file |
Various
Event | Description |
---|---|
FileChangedShell |
Vim notices that a file changed since editing started |
FileChangedShellPost |
After handling a file changed since editing started |
FileChangedRO |
before making the first change to a read-only file |
ShellCmdPost |
after executing a shell command |
ShellFilterPost |
after filtering with a shell command |
FuncUndefined |
a user function is used but it isn't defined |
SpellFileMissing |
a spell file is used but it can't be found |
SourcePre |
before sourcing a Vim script |
SourceCmd |
before sourcing a Vim script Cmd-event |
VimResized |
after the Vim window size changed |
FocusGained |
Vim got input focus |
FocusLost |
Vim lost input focus |
CursorHold |
the user doesn't press a key for a while |
CursorHoldI |
the user doesn't press a key for a while in Insert mode |
CursorMoved |
the cursor was moved in Normal mode |
CursorMovedI |
the cursor was moved in Insert mode |
WinEnter |
after entering another window |
WinLeave |
before leaving a window |
TabEnter |
after entering another tab page |
TabLeave |
before leaving a tab page |
CmdwinEnter |
after entering the command-line window |
CmdwinLeave |
before leaving the command-line window |
InsertEnter |
starting Insert mode |
InsertChange |
when typing |
InsertLeave |
when leaving Insert mode |
InsertCharPre |
when a character was typed in Insert mode, before inserting it |
TextChanged |
after a change was made to the text in Normal mode |
TextChangedI |
after a change was made to the text in Insert mode |
ColorScheme |
after loading a color scheme |
RemoteReply |
a reply from a server Vim was received |
QuickFixCmdPre |
before a quickfix command is run |
QuickFixCmdPost |
after a quickfix command is run |
SessionLoadPost |
after loading a session file |
MenuPopup |
just before showing the popup menu |
CompleteDone |
after Insert mode completion is done |
User |
to be used in combination with ":doautocmd" |