¿Para qué se utiliza `softtabstop`?

21

He estado al tanto de estas configuraciones relacionadas con pestañas en Vim:

  • ts
  • sw
  • expandtab
  • smarttab
  • sts

Mi configuración normal es set ts=4 sw=4 expandtab smarttab.

Pero de acuerdo con la stsdocumentación , si expandtabno está configurado, intentará usar una combinación de espacios y pestañas para formar el número deseado de espacios en blanco para un tamaño de pestaña.

Realmente no puedo pensar en un escenario útil para esta configuración: ¿Por qué alguien querría tener un número fijo de pestañas y espacios que pueden estropear las cosas? La única ventaja de hacer esto que se me ocurre es reducir el número de caracteres y, por lo tanto, reducir el tamaño del archivo, lo que me parece extraño.

KFL
fuente

Respuestas:

20

Como se softtabstopmenciona en la documentación, es útil si desea mantener el tamaño predeterminado de tabulación de 8, pero edite un archivo como si el tamaño de tabulación fuera otro valor. Por ejemplo, si usted quiere un nivel de sangría de 4 durante la edición de código, pero algunos comentarios tenido texto separado por sangría, como una mesa que dependía de una tabulación de 8, podría establecer stsa 4.

Una diferencia que noto entre la configuración de su pestaña ( set ts=4 sw=4 expandtab smarttab) y el uso de sts(p set ts=8 sts=4. Ej. ) Es cuando se retrocede sobre espacios en el medio de una línea de texto. Por ejemplo, considere la siguiente línea de texto, donde ·indica un espacio:

some·text·······more·text

En el modo de inserción, mueva el cursor justo antes de la mde more text. Con su configuración, presionar Retroceso elimina un solo espacio. Pero durante el uso sts=4, la tecla de retroceso elimina todo el camino hasta la tabulación anterior, ya que se comportaría si los espacios fueran un carácter de tabulación.

Puede establecer sts=4además de su configuración y obtener el comportamiento de retroceso de la línea media sin mezclar pestañas y espacios. Las pestañas se expandirán a cuatro espacios, pero puede retroceder en un rango de espacios en el medio de una línea.

Lithis
fuente
3

Vea el ejemplo a continuación,

// Start vim without loading your vimrc. set only tabstop=8 softtabstop=4.
// This makes <Tab> in insert mode equals to 4 <Space> length at max.

// In insert mode, type 12, one <Tab>, 5. We get insertion below,
12··5
// Quit insert mode. Move cursor back, we find 2 <Space> inserted.

// In insert mode, type 12, two <Tab>, 9. We get insertion below,
12······9
// Quit insert mode. Move cursor back, you find a <Tab> inserted.

// In insert mode, type 12, three <Tab>, 3. We get insertion below,
12··········3
// Move the cursor back, you find a <Tab> and 4 <Space> inserted.

// We can even set sotftabstop=12, but this time we only need type one <Tab>, then 3.
12··········3
// Move the cursor back, you find a <Tab> and 4 <Sapce> inserted.

Entonces, tabstopse trata de qué tan ancho Tabse define a, mientras que softtabstopse trata de qué tan lejos se mueve el cursor mientras se escribe Tab . Cuando no están configurados para tener el mismo valor, significa que si presionas la Tabtecla, no implica trivialmente un Tabpersonaje. En cualquier caso, es vim quien decide una vez que abandona el modo de inserción. Vim primero intentará hacer coincidir la inserción con la mayor cantidad tabstopposible; si por fin no puede completar tabstop, vim simplemente lo compensa Space.

Para hablar un poco más, si configuras expandtab, es igual decir a vim:

No se moleste en calcular cuántos Taby Sapcese necesitan. Simplemente inserte Space.

Chen XI
fuente
Su respuesta parece más bien una queja, y no parece responder la pregunta.
Herb Wolfe
@Herb Wolfe Deseo que mi respuesta pueda ayudar a PO a descubrir qué sucede cuando se realiza una configuración inusual :set st=7 sts=13. Como vim no solo está diseñado para la codificación, sino originalmente para la edición de texto.
Chen XI
1

Respuesta simple:

Por ejemplo, es extremadamente útil para la programación, especialmente en Python, en la cual la tabulación es crucial. Cuando presiona la tecla de retroceso con sts = 4, se desestabilizará la línea, no se eliminará un solo carácter de espacio.

SergeyR
fuente