1 - Wenn Sie Leerzeichen haben und Tabulatoren wollen.
Zuerst müssen Sie entscheiden, wie viele Leerzeichen ein einzelner Tabulator haben soll. Angenommen, Sie haben Zeilen mit führenden 4 Leerzeichen oder 8 ... Dann stellen Sie fest, dass Sie wahrscheinlich möchten, dass ein Tabulator 4 Leerzeichen enthält. Mit diesen Informationen machen Sie jetzt Folgendes:
:set ts=4
:set noet
:%retab!
Hier liegt ein Problem vor! Diese Befehlsfolge sucht nach Ihrem gesamten Text, nicht nur nach Leerzeichen am Anfang der Zeile. Das bedeutet eine Zeichenfolge wie:"Hey,␣this␣␣␣␣is␣4␣spaces"
wird zu "Hey,␣this⇥is␣4␣spaces"
, aber es ist nicht! Es ist ein Tab!.
Um dieses kleine Problem zu lösen, empfehle ich eine search
, statt retab
.
:%s/^\(^I*\)␣␣␣␣/\1^I/g
Diese Suche durchsucht die gesamte Datei nach Zeilen, die mit einer beliebigen Anzahl von Tabulatoren beginnen, gefolgt von 4 Leerzeichen, und ersetzt sie durch eine beliebige Anzahl von gefundenen Tabulatoren plus eins.
Das wird leider nicht sofort laufen!
Zunächst enthält die Datei Zeilen, die mit Leerzeichen beginnen. Die Suche wandelt dann nur die ersten 4 Leerzeichen in einen Tabulator um und lässt Folgendes...
Sie müssen den Befehl wiederholen. Wie oft? Bis Sie einen pattern not found
erhalten . Ich kann mir noch keine Möglichkeit vorstellen, den Prozess zu automatisieren. Aber wenn doch:
`[email protected]:`
Sie sind wahrscheinlich fertig. Dieser Befehl wiederholt das letzte Suchen/Ersetzen 10 Mal. Es ist unwahrscheinlich, dass Ihr Programm so viele Einzüge hat. Wenn ja, wiederholen Sie einfach noch einmal @@
.
Nun, nur um die Antwort zu vervollständigen. Ich weiß, dass Sie das Gegenteil verlangt haben, aber Sie wissen nie, wann Sie etwas rückgängig machen müssen.
2 - Sie haben Tabulatoren und wollen Leerzeichen.
Entscheiden Sie zunächst, in wie viele Leerzeichen Ihre Tabulatoren umgewandelt werden sollen. Angenommen, Sie möchten, dass jeder Tab 2 Leerzeichen enthält. Sie tun dann:
:set ts=2
:set et
:%retab!
Dies hätte das gleiche Problem mit Zeichenfolgen. Aber da es ein besserer Programmierstil ist, keine harten Tabulatoren innerhalb von Zeichenfolgen zu verwenden, tun Sie hier tatsächlich etwas Gutes. Wenn Sie wirklich einen Tabulator innerhalb einer Zeichenfolge benötigen, verwenden Sie \t
.
Verwenden von Vim zum Erweitern aller führenden Leerzeichen (breiter als 'tabstop'
), war es richtig, retab
zu verwenden aber stellen Sie zuerst 'expandtab'
sicher zurückgesetzt wird (:verbose set ts? et?
ist dein Freund). retab
nimmt einen Bereich an , also gebe ich normalerweise %
an bedeutet "die ganze Datei".
:set tabstop=2 " To match the sample file
:set noexpandtab " Use tabs, not spaces
:%retab! " Retabulate the whole file
Bevor ich so etwas tue (insbesondere mit Python-Dateien!), setze ich normalerweise 'list'
, damit ich sehen kann die Leerzeichen und ändern.
Ich habe die folgende Zuordnung in meinem .vimrc
dazu:
nnoremap <F2> :<C-U>setlocal lcs=tab:>-,trail:-,eol:$ list! list? <CR>