Respostas:
O melhor método é colocar essas configurações ~/.vim/after/ftplugin/<filetype>.vim.
Para HTML (supondo que você queira quatro guias com caracteres amplos):
~/.vim/after/ftplugin/html.vim
setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab
O uso de um ftplugin é preferível ao uso de comandos automáticos, porque o Vim já faz verificações de tipo de arquivo por si só e já tenta obter o ftplugin adequado para que não haja motivo para forçar ainda mais verificações e reimplementar a roda.
- editar -
Supondo que você tenha filetype plugin onno seu vimrc- o que você deve - o Vim tentará detectar o tipo de arquivo dos arquivos que você editar e, uma vez que o tipo de arquivo correto seja encontrado e definido para o buffer, tente obter o plug-in correspondente nos locais padrão:
$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim
Tudo isso acontece automaticamente , portanto, se o seu tipo de arquivo for reconhecido pelo Vim, não há absolutamente nenhuma razão para adicionar qualquer lógica de detecção de tipo de arquivo: basta adicionar suas configurações ao plug-in correto e você estará bem.
filetype plugin indent onno seu vimrc.
filetype plugin onestiver definido, o caminho do vim inclui os arquivos ftplugin/<filetype>.vime after/ftplugin/<filetype>/vimem seu caminho.
Você pode fazer isso com comandos automáticos no seu .vimrc.
Por exemplo, eu tenho uma função html_like_modeque configura várias coisas para editar arquivos HTML. Na minha .vimrc, eu tenho:
au BufNewFile,BufRead *.html call s:html_like_mode()
Isso interrompe a extensão do arquivo. Você também pode desativar o tipo de arquivo, se tiver ativado:
au FileType perl setlocal equalprg=perltidy
Como você pode ver, você pode fazer qualquer comando lá. Então você pode facilmente fazer um setlocal shiftwidth 4para seus arquivos * .c.
augrouppermite agrupar comandos automáticos relacionados em grupos nomeados. (Veja aqui para aprender sobre os grupos de comandos automáticos.) Usamos augroups para adicionar comandos automáticos de ~/.vimrcuma maneira que não adicione duplicados toda vez que os originamos.
augroup vimrc
autocmd!
augroup END
autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4