Pregunta

¿Podría alguien explicarme en términos sencillos la forma más fácil de cambiar el comportamiento de sangrado 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.

¿Fue útil?

Solución

Puedes agregar archivos .vim para que se ejecuten cada vez 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 pestañas con un ancho de 2 caracteres para la sangría (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 hasta la sección de complementos de tipo de archivo.

Otros consejos

Use ftplugins o autocomandos para establecer opciones.

ftplugin

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

setlocal shiftwidth=2 softtabstop=2 expandtab

Y no olvides activarlos en ~ / .vimrc :

filetype plugin indent on

(: h ftplugin para obtener más información)

autocommand

En ~ / .vimrc :

autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab

Puede reemplazar cualquiera de los comandos largos o configuraciones con sus versiones cortas:
autocmd : au
setlocal : setl
shiftwidth : sw
tabstop : ts
softtabstop : sts
expandtab : et

También sugeriría aprender la diferencia entre tabstop y softtabstop . Mucha gente no sabe acerca de softtabstop .

edite su ~ / .vimrc , y agregue diferentes tipos de archivos para diferentes sangrías, por ejemplo. Quiero la sangría de html / rb para 2 espacios, y los archivos de 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 espacios en blanco de Vim por tipo de archivo

Coloque comandos autocmd basados ??en el sufijo de 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 el conjunto expandtab , pero eso es malo para makefiles. Recientemente agregué:

:autocmd FileType make set noexpandtab

hasta el final de mi archivo .vimrc y reconoce Makefile, makefile y * .mk como makefiles y no expande las pestañas. Presumiblemente, puedes extender esto.

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

Personalmente, uso esta configuración 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 pestañas ya existentes en el archivo, uno tiene que hacer : retab . Por ejemplo:

:set et
:retab

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

:set noet
:retab

Hoy, puede probar editorconfig , también hay un plugin vim para ello. Con esto, no solo puede cambiar el tamaño de la sangría en vim, sino que en muchos otros editores, mantener estilos de codificación coherentes.

A continuación se muestra un sencillo editorconfig, 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

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

También recomiendo:

Utilizo 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 Vimales shiftwidth , tabstop y expandtab .

Esto se compila utilizando, por ejemplo, gcc -O autotab.c -o autotab . Las instrucciones para integrarse con Vim se encuentran en el encabezado del comentario en la parte superior.

Autotab es bastante inteligente, pero puede confundirse de vez en cuando, en particular debido a que se han mantenido inconsistentemente utilizando diferentes estilos de sangría.

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

Funciona para una variedad de lenguajes de programación, y perdona para " fuera de banda " Elementos que no obedecen a los incrementos de sangría, como las directivas de preprocesamiento de C, las etiquetas de declaración C, por no mencionar las líneas en blanco obvias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top