Vim es muy complaciente cuando se trata de tab Vs. preferencias de espacio. Según tengo entendido, la tabstopconfiguración indica el ancho de un carácter de tabulación. La shiftwidthconfiguración especifica cuántas columnas aumentar / disminuir cuando se usan los comandos <<y >>, mientras que la softtabstopconfiguración influye en la cantidad de espacio en blanco que se insertará cuando presione la Tabtecla en el modo de inserción. Si expandtabestá activado, la tecla de tabulación inserta un softtabstopnúmero de caracteres de espacio. Mientras que con expandtabapagado, 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 listpara 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, softtabstopy shiftwidthal 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 expandtabla 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, softtabstopy shiftwidthal 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=4todavía me suena bien.
fuente

is there a practical case where you wouldn't want shiftwidth == tabstop && tabstop == softtabstop?, el propio código fuente de Vim usaset shiftwidth=4 tabstop=8 noexpandtab. Sí, normalmente uno quiereshiftwidth == softtabstop, pero eso es independiente del valor quetabstoptenga.