Vim has been my primary text editor for more than 15 years, but even though I use it on a daily basis, my configuration hasn’t changed much over time. When I set up a new workstation, I stumbled upon the filetype plugin that I wasn’t aware of. Using this plugin, you can import different vim configuration files depending on the type of the file you’re editing.
My configuration has always been modularized, but until recently, I used the low-level autocmd feature to config source files depending on the type of the file I was editing. Here’s how it looked in my
autocmd BufNewFile,BufRead *.[ch] source ~/.vim/vimrc-c autocmd BufNewFile,BufRead *.py source ~/.vim/vimrc-python autocmd BufNewFile,BufRead *.xml source ~/.vim/vimrc-xml autocmd BufNewFile,BufRead *.html source ~/.vim/vimrc-html ...
I was able to clean that up a bit using the filetype plugin. But first, the plugin needs to be enabled in the main
filetype plugin on
The plugin uses file type detection that may also scan the beginning of the file to figure out its type. The built-in detection routines are more robust than my simple file name checks.
For each type of file you work with, you place a configuration file in
TYPE is one of vim’s supported file types. You can get the full list from
$VIMRUNTIME/ftplugin/. Run ":echo $VIMRUNTIME" in vim if you don’t know the location of vim’s runtime directory (on my system, it’s
When programming Python, for example, I don’t ever want to use tab characters, and I indent code blocks using four spaces. To make this happen, I created the file
~/.vim/after/ftplugin/python.vim with the following content:
set tabstop=8 set shiftwidth=4 set softtabstop=4 set expandtab
There’s a lot more to the filetype plugin than discussed here. See the documentation for more advanced use cases, like writing your own autodetection mechanisms.