I'm going through my vim dotfiles to tidy them up. I've noticed that through time I've added various filetype specific settings in various inconsistent ways. Let's suppose I'm customizing for Python:
au BufRead,BufNewfFile *.py (do something). I don't like this because some Python files might not have the .py termination.au FileType python (do something). This seems a better option because it doesn't depend on the file having the .py termination. The drawback is that Vim doesn't know about some filetypes. I can make Vim recognize additional filetypes, but I also have various inconsistent ways of doing it: a.vim/filetype.vimfile, another in.vim/after/filetype.vimand variousset filetypecommands in.vimrc.Add a
.vim/ftplugin/python.vimfile with filetype specific settings. I understand the$VIMRUNTIME/ftplugin/python.vimcan override whatever settings I make here. One problem is that I'm not sure how this interacts with.vim/filetype.vimand.vim/after/filetype.vim.Add a
.vim/after/ftplugin/python.vim. I understand that this is loaded after$VIMRUNTIME/ftplugin/python.vimso it can overwrite settings from there. As in the previous method I'm not sure how it interacts with thefiletype.vimfiles.
So I have at least four ways of doing this, not mentioning syntax files and filetype-specific plugins. It seems to me the best way to do this is to put my filetype specific settings in after/ftplugin so they don't get overwritten, and filetypes.vim in after for the same reason.
However, before I proceed I'd like to ask if anyone has suggestions about the best way to deal with filetype specific settings.