今までなんとなく使ってたし、ブログとかでも特に言及とかはない感じだったので漫然と混在して使ってました。
しかし、ここのところファイルタイプ検出が不安定で$HOME/.vim/filetype.vim
を設定しなおしてて気になったので:help setfiletype
してみたらずばりだった。実際古事記ばりの情報量な。
以下引用
:setf[iletype] {filetype} *:setf* *:setfiletype* Set the 'filetype' option to {filetype}, but only if not done yet in a sequence of (nested) autocommands. This is short for: > :if !did_filetype() : setlocal filetype={filetype} :endif This command is used in a filetype.vim file to avoid setting the 'filetype' option twice, causing different settings and syntax files to be loaded. {not in Vi}
ざっくり訳すと、
「ファイルタイプを設定するオプションです。ただし連続した(入れ子になった)autocmdの途中で設定されていない場合に限ります」
「このコマンドは filetype.vim の中で、'filetype' オプションが重複して設定され、そのせいで異なるftpluginやsyntaxがロードされることを避ける為に使われます」
みたいな感じだろうか。
しかし続くコード例をみる感じ、autocmdとか関係なしにfiletypeが設定済みかどうかをみているだけっぽい気がする。こういうときはコードの導きを信じるべし。
というわけで、今までの.vim/filetype.vim
では
if exists("did_load_filetypes") finish endif augroup filetypedetect au BufRead,BufNewFile *.vb setf vbnet autocmd BufRead,BufNewFile *.md setl ft=markdown autocmd BufRead,BufNewFile *.mkd setl ft=markdown augroup END
みたいな感じに混在させていたのを、全て'setf'に統一することにした。