1 - Wenn Sie Leerzeichen haben und Tabulatoren möchten.
Zunächst müssen Sie entscheiden, wie viele Leerzeichen eine einzelne Registerkarte haben soll. Angenommen, Sie haben Zeilen mit führenden 4 Leerzeichen oder 8 ... Dann stellen Sie fest, dass ein Tab wahrscheinlich 4 Leerzeichen enthalten soll. Mit diesen Informationen tun Sie Folgendes:
:set ts=4
:set noet
:%retab!
Hier gibt es ein Problem! Diese Befehlsfolge sucht nach Ihrem gesamten Text, nicht nur nach Leerzeichen am Zeilenanfang. Das bedeutet, dass eine Zeichenfolge wie: "Hey,␣this␣␣␣␣is␣4␣spaces"
wird "Hey,␣this⇥is␣4␣spaces"
, aber es ist nicht! Es ist ein Tab!.
Um dieses kleine Problem zu lösen, empfehle ich search
stattdessen a retab
.
:%s/^\(^I*\)␣␣␣␣/\1^I/g
Bei dieser Suche wird in der gesamten Datei nach Zeilen gesucht, die mit einer beliebigen Anzahl von Tabulatoren beginnen, gefolgt von 4 Leerzeichen, und durch die Anzahl der gefundenen Tabulatoren plus einer ersetzt.
Dies wird leider nicht sofort ausgeführt!
Die Datei enthält zunächst Zeilen, die mit Leerzeichen beginnen. Die Suche konvertiert dann nur die ersten 4 Leerzeichen in eine Registerkarte und lässt die folgenden ...
Sie müssen den Befehl wiederholen. Wie oft? Bis du eine bekommst pattern not found
. Ich kann mir noch keine Möglichkeit vorstellen, den Prozess zu automatisieren. Aber wenn Sie dies tun:
`10@:`
Sie sind wahrscheinlich fertig. Dieser Befehl wiederholt das letzte Suchen / Ersetzen zehnmal. Es ist unwahrscheinlich, dass Ihr Programm so viele Einrückungen hat. Wenn ja, wiederholen Sie einfach noch einmal @@
.
Nun, nur um die Antwort zu vervollständigen. Ich weiß, dass Sie nach dem Gegenteil gefragt haben, aber Sie wissen nie, wann Sie Dinge rückgängig machen müssen.
2 - Sie haben Tabulatoren und möchten Leerzeichen.
Entscheiden Sie zunächst, in wie viele Leerzeichen Ihre Registerkarten konvertiert werden sollen. Nehmen wir an, Sie möchten, dass jede Registerkarte 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 in Strings zu verwenden, tun Sie hier tatsächlich etwas Gutes. Wenn Sie wirklich eine Registerkarte in einer Zeichenfolge benötigen, verwenden Sie \t
.
sed "s/ +/`echo -e '\t'`/g" < input.py > output.py
scheint das erste Beispiel ( ) alle Leerzeichen zu konvertieren, nicht nur führende Leerzeichen. Im zweiten Beispiel (sed "s/^ +/`echo -e '\t'`/g" < input.py > output.py
) wird nur das erste Leerzeichen in jeder Zeile durch eine Registerkarte ersetzt und der Rest verbleibt.