Vim es muy complaciente cuando se trata de tab Vs. preferencias de espacio. Según tengo entendido, la tabstop
configuración indica el ancho de un carácter de tabulación. La shiftwidth
configuración especifica cuántas columnas aumentar / disminuir cuando se usan los comandos <<y >>, mientras que la softtabstop
configuración influye en la cantidad de espacio en blanco que se insertará cuando presione la Tabtecla en el modo de inserción. Si expandtab
está activado, la tecla de tabulación inserta un softtabstop
número de caracteres de espacio. Mientras que con expandtab
apagado, al presionar la Tabtecla se inserta el menor número posible de caracteres de tabulación + espacio que coincida softtabstop
. (Por favor corrígeme si estoy equivocado.)
Este último punto me hace preguntarme: ¿hay algún caso práctico en el que no quisieras shiftwidth == tabstop && tabstop == softtabstop
? No puedo pensar en uno. En lo que a mí respecta, sería más conveniente si pudiera establecer los 3 con el mismo valor, en una sola asignación. por ejemplo, llamando:
:set stab=4
que sería equivalente a ejecutar:
:set tabstop=4 softtabstop=4 shiftwidth=4
¿Alguien puede sugerir cómo se podría hacer esto?
ACTUALIZAR
Gracias por las respuestas hasta ahora de demasiado php , hobbs y kaiser.se . En lugar de responder a cada uno individualmente, estoy actualizando la pregunta aquí.
Softtabstop con la pestaña de expansión apagada
Dije anteriormente que con expandtab desactivado, al presionar la tecla Tab se inserta el menor número posible de caracteres de tabulación + espacio que coincida softtabstop
. Lo mantengo, pero creo que necesito explicar lo que quise decir. Intentaré hacerlo mediante algunos ejemplos. Para seguirlo, ejecute :set list
para que pueda ver los caracteres de tabulación.
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
En el modo de inserción, al presionar la tecla de tabulación se insertan 2 caracteres de espacio. Presione la tecla de tabulación por segunda vez, y en lugar de insertar dos caracteres de espacio más (para un total de 4 caracteres de espacio), reemplaza los 2 espacios anteriores con un solo carácter de tabulación. Tabstop se establece en 4, por lo que un solo carácter de tabulación tiene el mismo ancho que 4 espacios.
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
En el modo de inserción, al presionar la tecla de tabulación se inserta 1 carácter de tabulación más 2 espacios. El carácter de tabulación tiene un ancho de 4, por lo que el ancho total es 6, y esto se logra usando 3 caracteres. Al presionar la tecla de tabulación por segunda vez, se insertan dos caracteres de tabulación y se eliminan los dos espacios que se insertaron anteriormente. El ancho total es 12, y esto se logra usando 3 caracteres.
En ambos ejemplos, Vim inserta el número mínimo posible de caracteres de tabulación + espacio que coincida con softtabstop.
Si estoy trabajando con expandtab desactivado, no puedo imaginarme queriendo el control granular adicional que se puede lograr configurando softtabstop en un valor diferente de tabstop. Todavía sería útil para mí poder establecer tabstop
, softtabstop
y shiftwidth
al mismo valor con un solo comando.
¿Expandtab hace que la función softtabstop sea redundante?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
En el modo de inserción, al presionar la tecla de tabulación se insertan 4 espacios. Al presionar la tecla Eliminar, se elimina un solo espacio, por lo que debe retroceder 4 veces si presiona la tecla Tab por accidente.
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
En el modo de inserción, al presionar la tecla de tabulación se insertan 4 espacios. Al presionar la tecla de retroceso se borran 4 espacios.
Si estoy trabajando con expandtab
la tecla encendida, preferiría que la tecla de eliminación elimine la misma cantidad de espacios en blanco que la tecla de tabulación inserta. Así pues, en este caso, también, siento que sería útil poder asignar el mismo valor a tabstop
, softtabstop
y shiftwidth
al mismo tiempo.
Un atajo aún sería útil
Es genial que Vim brinde tanta flexibilidad, pero no me veo necesitándolo. Solo quiero poder elegir el ancho de una pestaña, y si es una pestaña 'dura' (usando un carácter de pestaña) o una pestaña 'blanda' (formada por espacios). Alternar entre pestañas duras y blandas es bastante fácil ( :set expandtab!
), pero desearía que fuera más sencillo establecer el ancho de la pestaña, sin tener que jugar con 3 parámetros diferentes.
Entonces, mi sugerencia propuesta para algo como :set stab=4
todavía me suena bien.