1 - Se hai spazi e vuoi schede.
Innanzitutto, devi decidere quanti spazi avrà una singola scheda. Detto questo, supponiamo di avere linee con 4 spazi iniziali o 8... Allora ti rendi conto che probabilmente vuoi che una tabulazione sia composta da 4 spazi. Ora con queste informazioni, fai:
:set ts=4
:set noet
:%retab!
C'è un problema qui! Questa sequenza di comandi cercherà tutto il testo, non solo gli spazi all'inizio della riga. Ciò significa una stringa come:"Hey,␣this␣␣␣␣is␣4␣spaces"
diventerà "Hey,␣this⇥is␣4␣spaces"
, ma non lo è! è una scheda!.
Per risolvere questo piccolo problema consiglio un search
, invece di retab
.
:%s/^\(^I*\)␣␣␣␣/\1^I/g
Questa ricerca cercherà nell'intero file qualsiasi riga che inizi con qualsiasi numero di tabulazioni, seguito da 4 spazi, e la sostituirà con qualsiasi numero di tabulazioni trovate più uno.
Questo, sfortunatamente, non funzionerà subito!
All'inizio, il file avrà righe che iniziano con spazi. La ricerca convertirà quindi solo i primi 4 spazi in una tabulazione e consentirà quanto segue...
Devi ripetere il comando. Quante volte? Finché non ottieni un pattern not found
. Non riesco ancora a pensare a un modo per automatizzare il processo. Ma se lo fai:
`[email protected]:`
Probabilmente hai finito. Questo comando ripete l'ultima ricerca/sostituzione per 10 volte. Non è probabile che il tuo programma abbia così tanti rientri. In caso affermativo, ripeti di nuovo @@
.
Ora, solo per completare la risposta. So che hai chiesto il contrario, ma non sai mai quando devi annullare le cose.
2 - Hai schede e vuoi spazi.
Per prima cosa, decidi in quanti spazi vuoi convertire le tue schede. Diciamo che vuoi che ogni scheda sia composta da 2 spazi. Quindi fai:
:set ts=2
:set et
:%retab!
Questo avrebbe lo stesso problema con le stringhe. Ma poiché il suo stile di programmazione migliore è non utilizzare schede rigide all'interno delle stringhe, in realtà stai facendo una buona cosa qui. Se hai davvero bisogno di una tabulazione all'interno di una stringa, usa \t
.
Utilizzo di Vim per espandere tutti i inizi spazi (più larghi di 'tabstop'
), hai fatto bene a usare retab
ma prima assicurati 'expandtab'
viene reimpostato (:verbose set ts? et?
È tuo amico). retab
accetta un intervallo , quindi di solito specifico %
significa "l'intero file".
:set tabstop=2 " To match the sample file
:set noexpandtab " Use tabs, not spaces
:%retab! " Retabulate the whole file
Prima di fare qualcosa di simile (in particolare con i file Python!), di solito imposto 'list'
, in modo che io possa vedere lo spazio bianco e il cambiamento.
Ho la seguente mappatura nel mio .vimrc
per questo:
nnoremap <F2> :<C-U>setlocal lcs=tab:>-,trail:-,eol:$ list! list? <CR>