Cambiando el comportamiento de indentación de Vim por tipo de archivo

¿Podría alguien explicarme en términos simples la forma más fácil de cambiar el comportamiento de indentación de Vim en función del tipo de archivo? Por ejemplo, si abro un archivo de Python debería sangrar con 2 espacios, pero si abro un script de Powershell debería usar 4 espacios.

Puede agregar archivos .vim para que se ejecuten siempre que vim cambie a un tipo de archivo en particular.

Por ejemplo, tengo un archivo ~/.vim/after/ftplugin/html.vim con este contenido:

 setlocal shiftwidth=2 setlocal tabstop=2 

Lo que hace que vim use tabs con un ancho de 2 caracteres para sangrar (la opción noexpandtab se establece globalmente en otra parte de mi configuración).

Esto se describe aquí: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4 , desplácese hacia abajo a la sección sobre los plugins de tipo de archivo.

Use ftplugins o autocommands para establecer las opciones. (: h ftplugin para más información)

En ~ / .vim / ftplugin / python.vim:

 setlocal sw=2 sts=2 et 

Y no olvides activarlos en ~ / .vimrc

 filetype plugin indent on 

O en ~ / .vimrc

 au FileType python setl sw=2 sts=2 et 

También te sugiero que aprendas la diferencia entre ‘ts’ y ‘sts’. Mucha gente no sabe acerca de ‘pts’.

edite su ~/.vimrc , y agregue diferentes tipos de archivos para diferentes sangrías; por ejemplo, quiero sangría html/rb para 2 espacios, y sangría archivos js/coffee para 4 espacios:

 " by default, the indent is 2 spaces. set shiftwidth=2 set softtabstop=2 set tabstop=2 " for html/rb files, 2 spaces autocmd Filetype html setlocal ts=2 sw=2 expandtab autocmd Filetype ruby setlocal ts=2 sw=2 expandtab " for js/coffee/jade files, 4 spaces autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab 

consulte: Configuración de las preferencias de espacio en blanco de Vim por tipo de archivo

Ponga comandos autocmd basados ​​en el sufijo del archivo en su ~ / .vimrc

 autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab autocmd BufRead,BufNewFile *.pl syntax on 

Los comandos que estás buscando son probablemente ts = y sw =

Normalmente trabajo con set de expandtab , pero eso es malo para makefiles. Recientemente agregué:

 :autocmd FileType make set noexpandtab 

al final de mi archivo .vimrc y reconoce Makefile, makefile y * .mk como makefiles y no expande tabs. Presumiblemente, puedes extender esto.

Siempre me sorprenden las personas que cambian el tamaño de las tabs por diferentes tipos de archivos. ¿Qué diablos haces cuando miras un archivo usando menos?

Personalmente, uso estas configuraciones en .vimrc:

 autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab 

Esto podría ser conocido por la mayoría de nosotros, pero de todos modos (me sorprendió la primera vez): Hacer :set et ( :set expandtabs) no cambia las tabs que ya existen en el archivo, uno tiene que hacer :retab . Por ejemplo:

 :set et :retab 

y las tabs en el archivo se reemplazan por suficientes espacios. Para tener tabs atrás simplemente hazlo:

 :set noet :retab 

Si bien puede configurar la sangría de Vim con el plugin de sangrado o manualmente usando la configuración, le recomiendo usar un guión de Python llamado Vindect que automáticamente establece la configuración relevante para usted cuando abre un archivo de Python. Use este consejo para hacer que usar Vindect sea aún más efectivo. Cuando comencé a editar archivos python creados por otros con varios estilos de sangría (tabulación frente a espacio y cantidad de espacios), fue increíblemente frustrante. Pero Vindect junto con este archivo de sangrado

También recomiendo:

  • pythonhelper
  • python_match
  • python_ifold

Hoy, podrías probar editorconfig , también hay un complemento vim para él. Con esto, puede cambiar el tamaño de sangría en vim, pero en muchos otros editores, mantenga estilos de encoding coherentes.

A continuación se muestra un editor de configuración simple, como puede ver, los archivos de Python tendrán 4 espacios para la sangría, y los archivos de plantillas de pug solo tendrán 2.

 # 4 space indentation for python files [*.py] indent_style = space indent_size = 4 # 2 space indentation for pug templates [*.pug] indent_size = 2 

Uso una utilidad que escribí en C llamada autotab . Analiza las primeras miles de líneas de un archivo que carga y determina los valores para los parámetros de Vim shiftwidth , tabstop y expandtab .

Esto se comstack utilizando, por ejemplo, gcc -O autotab.c -o autotab . Las instrucciones para integrarse con Vim están en el encabezado de comentario en la parte superior.

Autotab es bastante inteligente, pero puede confundirse de vez en cuando, en particular por el hecho de que se ha mantenido inconsistentemente usando diferentes estilos de sangría.

Si un archivo utiliza evidentemente tabs, o una combinación de tabs y espacios, para la sangría, Autotab determinará qué tamaño de tabs se está utilizando al considerar factores como la alineación de elementos internos en líneas sucesivas, como los comentarios.

Funciona para una variedad de lenguajes de progtwigción, y es indulgente con los elementos “fuera de banda” que no obedecen a los incrementos de sangría, como las directivas de preprocesamiento de C, las tags de las declaraciones de C, sin mencionar las obvias líneas en blanco.