Respuestas:
El mejor método es poner esa configuración ~/.vim/after/ftplugin/<filetype>.vim.
Para HTML (suponiendo que desee pestañas de 4 caracteres de ancho):
~/.vim/after/ftplugin/html.vim
setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab
El uso de un ftplugin es preferible al uso de los comandos automáticos porque Vim ya realiza comprobaciones de tipo de archivo por sí mismo y ya intenta obtener el ftplugin adecuado, por lo que no hay razón para forzar aún más comprobaciones y reimplementar la rueda.
- editar -
Asumiendo que tiene filetype plugin onen su vimrc, lo que debería, Vim intentará detectar el tipo de archivo de los archivos que edita y, una vez que se encuentre el tipo de archivo correcto y se configure para el búfer, intente obtener el ftplugin correspondiente en estas ubicaciones estándar:
$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim
Todo eso sucede automáticamente , por lo que, si Vim reconoce su tipo de archivo, no hay absolutamente ninguna razón para agregar ninguna lógica de detección de tipo de archivo: simplemente agregue su configuración al ftplugin correcto y estará bien.
filetype plugin indent onen tu vimrc.
filetype plugin onesté configurado, la ruta de vim incluye los archivos ftplugin/<filetype>.vimy after/ftplugin/<filetype>/vimen su ruta.
Puede hacer esto con los comandos automáticos en su .vimrc.
Por ejemplo, tengo una función html_like_modeque configura varias cosas para editar archivos HTML. En mi .vimrc, tengo:
au BufNewFile,BufRead *.html call s:html_like_mode()
Eso elimina la extensión del archivo. También puede quitar el tipo de archivo, si lo tiene habilitado:
au FileType perl setlocal equalprg=perltidy
Como puede ver, puede hacer que haga cualquier comando allí. Así que podría hacer fácilmente un setlocal shiftwidth 4para sus archivos * .c.
augrouple permite agrupar comandos automáticos relacionados en grupos con nombre. (Consulte aquí para obtener información sobre los grupos de autocomando). Utilizamos augroups para agregar autocomandos de ~/.vimrcuna manera que no agregue un duplicado cada vez que lo obtengamos.
augroup vimrc
autocmd!
augroup END
autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4