A cosa serve `softtabstop`?


21

Sono a conoscenza di queste impostazioni relative alle schede in Vim:

  • ts
  • sw
  • expandtab
  • smarttab
  • sts

La mia impostazione normale è set ts=4 sw=4 expandtab smarttab.

Ma secondo la stsdocumentazione , se expandtabnon impostato, proverà a utilizzare una combinazione di spazi e schede per creare il numero desiderato di spazi vuoti per una dimensione della scheda.

Non riesco davvero a pensare a uno scenario utile per questa impostazione: perché qualcuno dovrebbe avere un numero fisso di schede e spazi che potrebbero semplicemente rovinare le cose? L'unico vantaggio di questo che mi viene in mente è quello di ridurre il numero di caratteri e quindi la dimensione del file, il che mi sembra strano.

Risposte:


20

Come softtabstopmenzionato nella documentazione, è utile se si desidera mantenere una dimensione di interruzione di tabulazione predefinita di 8, ma modificare un file come se la dimensione di interruzione di tabulazione fosse un altro valore. Ad esempio, se si desidera un livello di rientro pari a 4 durante la modifica del codice, ma alcuni commenti hanno un testo con rientro di tabulazione come una tabella che dipende da un punto di tabulazione di 8, è possibile impostare stssu 4.

Una differenza che noto tra le impostazioni della scheda ( set ts=4 sw=4 expandtab smarttab) e l'uso di sts(ad es. set ts=8 sts=4) È quando si esegue il backspacing sugli spazi nel mezzo di una riga di testo. Ad esempio, considera la seguente riga di testo, dove ·indica uno spazio:

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

Nella modalità di inserimento, spostare il cursore appena prima di mof more text. Con le tue impostazioni, premendo Backspace si elimina un singolo spazio. Ma durante l'utilizzo sts=4, Backspace elimina fino al precedente punto di tabulazione, come si comporterebbe se gli spazi fossero invece un carattere di tabulazione.

È possibile impostare sts=4oltre alle impostazioni e ottenere il comportamento backspace della linea mediana senza mescolare schede e spazi. Le schede verranno espanse in quattro spazi, ma è possibile tornare indietro su un intervallo di spazi nel mezzo di una linea.


3

Vedi l'esempio di seguito,

// 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.

Lo stesso tabstopvale per l'ampiezza di una Tabdefinita, mentre softtabstopper quanto riguarda la distanza di spostamento del cursore durante la digitazione Tab . Quando non sono impostati per avere lo stesso valore, significa che se si preme il Tabtasto, non implica banalmente un Tabpersonaggio. In ogni caso, è Vim a decidere quando si esce dalla modalità di inserimento. Vim tenterà innanzitutto di abbinare l'inserzione il maggior numero tabstoppossibile; se alla fine non riesce a fare un pieno tabstop, vim compensa semplicemente Space.

Per parlare un po 'di più, se si imposta expandtab, è uguale a dire a Vim:

Si prega di non preoccuparsi di calcolare quanti Tabed Sapceè necessario. Basta inserire Space.


La tua risposta sembra piuttosto una trappola e non sembra rispondere alla domanda.
Herb Wolfe,

@Herb Wolfe Vorrei che la mia risposta potesse aiutare PO a capire cosa succede quando si fa un'impostazione insolita :set st=7 sts=13. Come vim non è progettato solo per la codifica, ma originariamente per la modifica del testo.
Chen XI

1

Risposta semplice:

Ad esempio, è estremamente utile per la programmazione, specialmente in Python, in cui la tabulazione è cruciale. Quando si preme backspace con sts = 4, si stacca la linea, non si elimina un singolo carattere di spazio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.