¿Cómo cambio el tamaño de la pestaña en Vim?

172

Cada vez que agrego un selector en CSS y presiono Enterpara definir las propiedades, termina así:

#selector {
        property: value;
}

(Pestañas de 8 espacios)

¿Cómo puedo configurar Vim para que sea así?

#selector {
    property: value;
}

(Pestañas de 4 espacios)

alexchenco
fuente
44
¿Quieres una pestaña de 4 espacios de ancho? Cuatro espacios? ¿O cuatro pestañas de 1 ancho de espacio? Son cosas diferentes, y no estás claro. En cualquier caso, comience con la lectura: he ts,: he sw, y: he expat
abyer

Respuestas:

102

Ampliando la respuesta de zoul:

Si desea configurar Vim para usar configuraciones específicas al editar un tipo de archivo en particular, querrá usar los comandos automáticos:

autocmd Filetype css setlocal tabstop=4

Esto hará que las pestañas se muestren como 4 espacios. La configuración expandtabhará que Vim realmente inserte espacios (controlando el número de ellos tabstop) cuando presiona tabulador; es posible que desee utilizar softtabstoppara que el espacio de retroceso funcione correctamente (es decir, reducir la sangría cuando eso es lo que sucedería si se usaran pestañas, en lugar de eliminar siempre un carácter a la vez).

Para tomar una decisión plenamente informada en cuanto a la manera de arreglar las cosas, tendrá que leer documentos en Vim tabstop, shiftwidth, softtabstopy expandtab. El bit más interesante se encuentra en expandtab( :help 'expandtab):

Hay cuatro formas principales de usar pestañas en Vim:

  1. Mantenga siempre 'tabstop' en 8, establezca 'softtabstop' y 'shiftwidth' en 4 (o 3 o lo que prefiera) y use 'noexpandtab'. Luego, Vim usará una combinación de pestañas y espacios, pero al escribir y se comportará como si una pestaña apareciera cada 4 (o 3) caracteres.

  2. Establezca 'tabstop' y 'shiftwidth' a lo que prefiera y use 'expandtab'. De esta manera siempre insertarás espacios. El formato nunca se estropeará cuando se cambie 'tabstop'.

  3. Establezca 'tabstop' y 'shiftwidth' a lo que prefiera y use | modeline | para establecer estos valores al editar el archivo nuevamente. Solo funciona cuando se usa Vim para editar el archivo.

  4. Establezca siempre 'tabstop' y 'shiftwidth' en el mismo valor, y 'noexpandtab'. Esto debería funcionar (solo para sangrías iniciales) para cualquier configuración de tabulación que las personas usen. Sin embargo, podría ser bueno tener pestañas después del primer espacio no en blanco insertado como espacios. De lo contrario, los comentarios alineados serán incorrectos cuando se cambie 'tabulación'.

Michał Marczyk
fuente
Además, no se preocupe demasiado por cambiar de opinión más adelante ... vea :help retab(verifique la variante).
Michał Marczyk
¿El uso de autocmd es complementario con el uso de .vimrc, o una alternativa?
Josh Desmond
224
:set tabstop=4
:set shiftwidth=4
:set expandtab

Esto insertará cuatro espacios en lugar de un carácter de tabulación. Los espacios son un poco más "estables", lo que significa que el texto sangrado con espacios se mostrará igual en el navegador y en cualquier otra aplicación.

zoul
fuente
83
Sí, pero las pestañas son semánticas (cada pestaña significa 1 capa de sangría), mientras que los espacios son puramente presentacionales. O en otras palabras, el uso de pestañas permitirá que otras personas vean su código para mostrar lo ancho que se sientan cómodos, mientras que los espacios no lo permitirían.
K Prime
11
Tenga en cuenta que si prefiere '>' y '<' para mover su texto la misma distancia que la tecla de tabulación , puede simplemente :set shiftwidth=0en su vimrc y olvidarse de él para siempre, porque esto le dice a vim que siempre quiere que coincida tabstop.
SeldomNeedy
132

Para realizar el cambio para una sesión, use este comando:

:set tabstop=4

Para que el cambio sea permanente, agréguelo ~/.vimrco ~/.vim/vimrc:

set tabstop=4

Esto afectará a todos los archivos, no solo a CSS. Para afectar solo los archivos css:

autocmd Filetype css setlocal tabstop=4

como se indica en la respuesta de Michał .

Keith
fuente
2
si desea que la pestaña funcione como cuatro espacios, también es necesario agregar las otras líneas en la respuesta @Zoul al .vimrc; es decir, agregue 'set shiftwidth = 4' y 'set expandtab' al .vimrc también.
qartal
77
La pregunta es "¿Cómo cambio el tamaño de la pestaña en Vim?"
Keith
Así es como lo haría. Y para asegurarme de ~/.vimrcque siempre se realice una copia de seguridad, generalmente guardo el archivo en mi carpeta de Dropbox y luego creo un enlace simbólico al escritorio:ln -s /home/myfolder/Dropbox/.vimrc ~
enchance
41

Varias de las respuestas en esta página son soluciones de 'uso único' para el problema descrito. Es decir, la próxima vez que abra un documento con vim, volverá la configuración de la pestaña anterior.

Si alguien está interesado en cambiar permanentemente la configuración de la pestaña:

Alexander McNulty
fuente
11
Esto inserta espacios, no pestañas.
Supernovah
55
@Supernovah puede quitar el "expandtab", para conseguir pestañas
kommradHomer
28

Como una línea en vim :

:set tabstop=4 shiftwidth=4 expandtab

Para una configuración permanente , agregue estas líneas a ~ / .vimrc :

set tabstop=4
set shiftwidth=4
set expandtab
oz19
fuente
6

ACTUALIZAR

Si está trabajando en un proyecto en particular, le recomiendo usar editorconfig .

Le permite definir un .editorconfigarchivo en la raíz de su repositorio definiendo la sangría que desea usar para cada tipo de archivo en su repositorio.

Por ejemplo:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

Hay un complemento vim que configura automáticamente vim de acuerdo con el archivo de configuración para el archivo que abre.

Además de eso, el .editorconfigarchivo se admite automáticamente en muchos otros IDE y editores, por lo que es la mejor opción para colaborar entre usuarios con diferentes entornos.

RESPUESTA ORIGINAL

Si necesita cambiar los tamaños con frecuencia y no desea vincular esto a un tipo de archivo específico, puede tener comandos predefinidos en su archivo .vimrc para cambiar rápidamente las preferencias:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

Esto asigna dos conjuntos diferentes de tamaños a las teclas \ t y \ m. Puede volver a vincular esto a las teclas que desee.

Jens
fuente