¿Cómo puedo cambiar la sangría predeterminada según el tipo de archivo?

34

Me gustaría tener diferentes hendiduras según el tipo de archivo en el que estoy trabajando. Por ejemplo, trabajando en un .carchivo, me gustaría que mi sangría sea de 4 espacios. En los .htmlarchivos me gustaría (tengo que) trabajar con pestañas.

¿Cómo lo logro?

DeltaLima
fuente

Respuestas:

25

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.

romainl
fuente
¿Debo activar el ftplugin de alguna manera o la creación de los archivos lo activará automáticamente?
DeltaLima
Asegúrate de tener filetype plugin indent onen tu vimrc.
romainl
1
@DeltaLima vim tiene una ruta que sigue para verificar la configuración. Mientras filetype plugin onesté configurado, la ruta de vim incluye los archivos ftplugin/<filetype>.vimy after/ftplugin/<filetype>/vimen su ruta.
davidlowryduda
@DeltaLima, mira mi edición.
romainl
14

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.

derobert
fuente
9

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
shawndumas
fuente
2
Sería útil si explicara qué hace esto y cómo configurarlo, no todos lo sabrán;)
Seth
3

Usado autocmd y FileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4
avelino
fuente