Dynamic File Type Configuration Through Scripting

Let’s look at another nifty script example. Normally, when editing a new file, the only clue Vim gets in order to determine and set filetype is the file’s extension. For example, .c means the file is C code. Vim easily determines this and loads the correct behavior to make it easy to edit a C program.

But not all files require an extension. For example, while it’s become common convention to create shell scripts with a .sh extension, this author doesn’t like or abide by this convention, especially having created thousands of scripts before a notion of this convention arose. Vim is actually sufficiently well-trained to recognize a shell script without the crutch of a file extension, by looking at the text inside the file. However, it can do so only on the second edit, when the file provides some context for determining the type. Vim scripts can fix that!

Autocommands

In our first script example, we relied on Vim’s habit of updating the status line constantly and “hid” our function in the status line to set the color scheme by time of day. Our script to determine the file type dynamically relies on a bit more formal Vim convention, autocommands.

Autocommands include any valid Vim commands. Vim uses events to execute commands. Some examples of Vim events include:

BufNewFile

Triggers an associated command when Vim begins editing a new file

BufReadPre

Triggers an associated command before Vim moves to a new buffer

BufReadBufReadPost

Trigger an ...

Get Learning the vi and Vim Editors, 7th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.