Gibt es eine Möglichkeit, alle Registerkarten in Ihrer Quelldatei mithilfe eines Befehls automatisch zu deaktivieren? [geschlossen]

11

Und danach automatisch neu einrücken? Ich habe versucht, Code von einem Terminalbildschirm auf den anderen zu kopieren, aber die Tabelle ist völlig durcheinander.

Ich wusste nicht, wie ich diese Funktionalität nennen sollte, daher war es für mich schwierig, sie auf Google zu finden (was im Allgemeinen Dinge im Zusammenhang mit der Einstellung der Tab-Größe zurückgab, nach denen ich leider nicht gesucht hatte).

Dunkler Templer
quelle
Verwandte: Wie Tabulatoren durch Leerzeichen ersetzen? bei Vim SE
Kenorb
1
Ich stimme dafür, diese Frage als nicht zum Thema gehörend zu schließen, da es sich um ein Programmierwerkzeug handelt. Fragen über Werkzeuge sind besser geeignet Stackoverflow , oder in diesem Fall Vi.SE . Diese Frage ist jedoch zu alt für eine Migration.
1
Ich stimme dafür, diese Frage als nicht zum Thema gehörend zu schließen, da es sich um die Verwendung eines bestimmten Tools handelt und bei Stack Overflow oder (falls jetzt gestellt) vi.se gestellt werden sollte .

Antworten:

9

Vim verfügt über einen retabBefehl, mit dem Sie Ihr Dokument tabellieren oder aufheben können. Es werden Einstellungen wie tabstopund verwendet expandtab. Wenn Sie also Tabulatoren durch Leerzeichen ersetzen möchten, können Sie Folgendes tun:

:%retab

Siehe die retabAusführliche Informationen finden Dokumentation.

Vorbehalt Emptor : Ersetzt auch Registerkarten, die NICHT am Anfang einer Zeile stehen. Wenn Sie also harte Tabulatoren in der Mitte von Zeichenfolgen verwenden, werden diese ebenfalls ersetzt.

Kaleb Pederson
quelle
3
Im Allgemeinen wird es als schlechte Idee angesehen, einen echten Tab trotzdem in eine Zeichenfolge aufzunehmen. Es kann immer noch passieren, wird aber \tbevorzugt, nur um solche Probleme zu vermeiden.
Spencer Rathbun
6

Um die Antwort von @ Kaleb zu erweitern (ich habe noch keinen Repräsentanten zum Kommentieren), müssen Sie vor dem Ausführen des Befehls retab Folgendes ausführen :set expandtab (set et) . Andernfalls ersetzt das Retab keine Tabulatoren durch Leerzeichen.

Zusätzlich möchten Sie möglicherweise die Tabstops angeben. In Quellcode, der von anderen erstellt wurde, wird der Code häufig mit Tabstops auf 4 oder sogar 2 :%retabgeschrieben. Experimentieren Sie vor dem Ausführen des Befehls mit verschiedenen Tabstops. Versuchen

:set ts=8 (the default)
:set ts=4 
:set ts=2  

um zu sehen, welche Einstellung am sinnvollsten ist.

Um rückwärts zu gehen (Leerzeichen durch entsprechende TAB-Zeichen ersetzen), verwenden Sie

:set noet
:%retab!
Firstrock
quelle
1

Wollen Sie mit "Tab deaktivieren" Tabulatoren in Leerzeichen ändern? Wenn ja, ersetzen Sie Tabulatoren im gesamten Puffer wie folgt durch Leerzeichen:

:%s/^I/    /g

Das sind vier Leerzeichen auf der rechten Seite der Ersetzung, aber Sie können jede gewünschte Zahl eingeben. Um das wörtliche ^ITabulatorzeichen zu erhalten, können Sie ^Vdrücken, gefolgt von der Tabulatortaste.

Sie können mit dem =Befehl erneut einrücken . Verwenden Sie die folgenden Befehle, um den gesamten Inhalt des Puffers erneut einzurücken:

gg
=G

Dadurch gelangen Sie nach oben und rücken alles wieder nach unten ein.

Boshvark
quelle
-1: Das Ersetzen einer Registerkarte durch eine feste Anzahl von Leerzeichen ist fast nie sinnvoll. Dadurch wird das Erscheinungsbild einer Zeile geändert, die eine Registerkarte enthält, der eine Nicht-Registerkarte vorangestellt ist.
Kevin Cline