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 on
no 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 on
no seu vimrc
.
filetype plugin on
estiver definido, o caminho do vim inclui os arquivos ftplugin/<filetype>.vim
e after/ftplugin/<filetype>/vim
em seu caminho.
Você pode fazer isso com comandos automáticos no seu .vimrc
.
Por exemplo, eu tenho uma função html_like_mode
que 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 4
para seus arquivos * .c.
augroup
permite agrupar comandos automáticos relacionados em grupos nomeados. (Veja aqui para aprender sobre os grupos de comandos automáticos.) Usamos augroup
s para adicionar comandos automáticos de ~/.vimrc
uma 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