example.
That is used in the |gzip| plugin.
Autocommands are very powerful. Use them with care and they will help you
avoid typing many commands. Use them carelessly and they will cause a lot of
trouble.
Suppose you want to replace a datestamp on the end of a file every time it is
written. First you define a function: >
:function DateInsert()
: $delete
: read !date
:endfunction
You want this function to be called each time, just before a buffer is written
to a file. This will make that happen: >
:autocmd BufWritePre * call DateInsert()
"BufWritePre" is the event for which this autocommand is triggered: Just
before (pre) writing a buffer to a file. The "*" is a pattern to match with
the file name. In this case it matches all files.
With this command enabled, when you do a ":write", Vim checks for any
matching BufWritePre autocommands and executes them, and then it
performs the ":write".
The general form of the :autocmd command is as follows: >
:autocmd [group] {events} {file-pattern} [++nested] {command}
The [group] name is optional. It is used in managing and calling the commands
(more on this later). The {events} parameter is a list of events (comma
separated) that trigger the command.
{file-pattern} is a filename, usually with wildcards. For example, using
"*.txt" makes the autocommand be used for all files whose name end in ".txt".
The optional [++nested] flag allows for nesting of autocommands (see below),
and finally, {command} is the command to be executed.
When adding an autocommand the already existing ones remain. To avoid adding
the autocommand several times you should use this form: >
:augroup updateDate
: autocmd!
: autocmd BufWritePre * call DateInsert()
:augroup END
This will delete any previously defined autocommand with `:autocmd!` before
defining the new one. Groups are explained later.
EVENTS
One of the most useful events is BufReadPost. It is triggered after a new
file is being edited. It is commonly used to set option values. For example,
you know that "*.gsm" files are GNU assembly language. To get the syntax file
right, define this autocommand: >
:autocmd BufReadPost *.gsm set filetype=asm
If Vim is able to detect the type of file, it will set the 'filetype' option
for you. This triggers the Filetype event. Use this to do something when a
certain type of file is edited. For example, to load a list of abbreviations
for text files: >
:autocmd Filetype text source ~/.config/nvim/abbrevs.vim
When starting to edit a new file, you could make Vim insert a skeleton: >
:autocmd BufNewFile *.[ch] 0read ~/skeletons/skel.c
See |autocmd-events| for a complete list of events.
PATTERNS
The {file-pattern} argument can actually be a comma-separated list of file
patterns. For example: `*.c,*.h` matches files ending in ".c" and ".h".
The usual file wildcards can be used. Here is a summary of the most often
used ones:
* Match any character any number of times
? Match any character once
[abc] Match the character a, b or c
. Matches a dot
a{b,c} Matches "ab" and "ac"
When the pattern includes a slash (/) Vim will compare directory names.
Without the slash only the last part of a file name is used. For example,
"*.txt" matches "/home/biep/readme.txt". The pattern "/home/biep/*" would
also match it. But "home/foo/*.txt" wouldn't.
When including a slash, Vim matches the pattern against both the full path
of the file ("/home/biep/readme.txt") and the relative path (e.g.,
"biep/readme.txt").
Note:
When working on a system that uses a backslash as file separator, such
as MS-Windows, you still use forward slashes in autocommands. This
makes it easier to write the pattern, since a backslash has a special
meaning. It also makes the autocommands portable.
DELETING
To delete an autocommand, use the same command as what it was defined with,
but leave out the {command} at the end and use a !. Example: >
:autocmd! FileWritePre *
This