Vim è molto accomodante quando si tratta di tab vs. preferenze di spazio. A quanto ho capito, l' tabstop
impostazione indica la larghezza di un carattere di tabulazione. L' shiftwidth
impostazione specifica quante colonne aumentare / diminuire quando si utilizzano i comandi <<e >>, mentre l' softtabstop
impostazione influenza la quantità di spazi bianchi da inserire quando si preme il Tabtasto in modalità di inserimento. Se expandtab
è attivato, il tasto Tab inserisce il softtabstop
numero di caratteri di spazio. Mentre con expandtab
spento, premendo il Tabtasto si inserisce il minor numero possibile di caratteri di tabulazione + spazio che corrispondono softtabstop
. (Per favore correggimi se sbaglio.)
Quest'ultimo punto mi fa chiedere: c'è un caso pratico in cui non vorresti shiftwidth == tabstop && tabstop == softtabstop
? Non riesco a pensare a uno. Per quanto mi riguarda, sarebbe più conveniente se potessi impostare tutti e 3 questi allo stesso valore, in una singola assegnazione. ad es. chiamando:
:set stab=4
che sarebbe equivalente a eseguire:
:set tabstop=4 softtabstop=4 shiftwidth=4
Qualcuno può suggerire come questo potrebbe essere fatto?
AGGIORNARE
Grazie per le risposte finora da troppo php , hobbs e kaiser.se . Piuttosto che rispondere a ciascuno individualmente, aggiorno la domanda qui.
Softtabstop con expandtab disattivato
Ho detto sopra che con expandtab disattivato, premendo il tasto Tab si inserisce il minor numero possibile di caratteri di tabulazione + spazio che corrispondono softtabstop
. Lo sostengo, ma penso di dover spiegare cosa intendevo. Cercherò di farlo attraverso alcuni esempi. Per proseguire, corri in :set list
modo da poter vedere i caratteri di tabulazione.
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
In modalità di inserimento, premendo il tasto Tab si inseriscono 2 caratteri di spazio. Premere il tasto Tab una seconda volta e invece di inserire altri due caratteri di spazio (per un totale di 4 caratteri di spazio) sostituisce i 2 spazi precedenti con un singolo carattere di tabulazione. Tabstop è impostato su 4, quindi un singolo carattere di tabulazione ha la stessa larghezza di 4 spazi.
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
In modalità di inserimento, premendo il tasto Tab si inserisce 1 carattere di tabulazione più 2 spazi. Il carattere di tabulazione ha una larghezza di 4, quindi la larghezza totale è 6 e ciò si ottiene utilizzando 3 caratteri. Premendo una seconda volta il tasto Tab vengono inseriti due caratteri di tabulazione e vengono rimossi i due spazi inseriti in precedenza. La larghezza totale è 12 e ciò si ottiene utilizzando 3 caratteri.
In entrambi questi esempi, Vim inserisce il numero minimo possibile di caratteri di tabulazione + spazio che corrispondono a softtabstop.
Se lavoro con expandtab disattivato, non riesco a immaginarmi a desiderare il controllo granulare extra che può essere ottenuto impostando softtabstop su un valore diverso da tabstop. Sarebbe comunque utile per me poter impostare tabstop
, softtabstop
e shiftwidth
allo stesso valore, con un solo comando.
Expandtab rende ridondante softtabstop?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
In modalità di inserimento, premendo il tasto Tab si inseriscono 4 spazi. Premendo il tasto Canc si elimina un singolo spazio, quindi è necessario tornare indietro 4 volte se si preme accidentalmente il tasto Tab.
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
In modalità di inserimento, premendo il tasto Tab si inseriscono 4 spazi. Premendo il tasto backspace si cancellano 4 spazi.
Se sto lavorando con expandtab
acceso, preferirei che il tasto Canc rimuovesse la stessa quantità di spazio bianco degli inserti del tasto Tab. Quindi, anche in questo caso, credo che sarebbe utile poter assegnare lo stesso valore a tabstop
, softtabstop
e shiftwidth
contemporaneamente.
Una scorciatoia sarebbe comunque utile
È fantastico che Vim offra così tanta flessibilità, ma non riesco a immaginarmi di averne bisogno. Voglio solo essere in grado di scegliere la larghezza di una scheda e se si tratta di una scheda "dura" (utilizzando un carattere di tabulazione) o una scheda "morbida" (composta da spazi). Passare :set expandtab!
da una scheda dura a una scheda morbida è abbastanza facile ( ), ma vorrei che fosse più semplice impostare la larghezza della scheda, senza dover armeggiare con 3 diversi parametri.
Quindi il mio suggerimento proposto per qualcosa di simile :set stab=4
suona ancora bene per me.