Ist es möglich, Tabulatoren unter Beibehaltung der Textausrichtung in Leerzeichen umzuwandeln?
Einfach zu ersetzen funktioniert nur dann sinnvoll, wenn keine führenden Zeichen vorhanden sind.
indentation
tab-characters
ideasman42
quelle
quelle
:h vim-faq
und suchen/tab characters
. Das schwer zu merkende Tag ist:h faq-14.16
.Antworten:
Sie können den
:retab
Befehl verwenden. Von:help :retab
Beachten Sie, dass der Befehl einen Bereich akzeptiert, sodass Sie eine visuelle Auswahl treffen können und dann nur
:retab
die ausgewählten Linien.quelle
Sie können jedoch
:retab
wie angegeben alle Tabulatoren in Leerzeichen ändern und nicht nur die Tabulatoren am ZeilenanfangAlso das (wo
⇥
ist ein Tabulatorzeichen):wird geändert in (wo
␣
ist ein Leerzeichen):Dies kann in einigen Szenarien zu unerwarteten Nebenwirkungen führen, und es ist noch problematischer, wenn Leerzeichen in Tabulatoren geändert werden!
Also schrieb ich eine kleine Funktion ändern nur tabs / Leerzeichen am Anfang der Zeile:
Bei dieser Version müssen Sie
expandtab
den Funktionsaufruf manuell angeben (dh:call Retab(1)
Tabulatoren in Leerzeichen ändern), Sie können ihn jedoch auch so ändern, dass er den aktuellen Wert von&expandtab
(wie bereits bei&tabstop
) annimmt, wie dies der:retab
Fall ist. (Ich bevorzuge es, es manuell anzugeben).quelle
a
inif a:expandtab
bedeuten?set expandtab
in Ihrer .vimrc und dann habenautocmd BufWritePre * :call Retab(&expandtab)
- Einrückung wird zu Tabulatoren anstelle von Leerzeichen geändert.Vim stellt einen
!retab
Befehl zur Verfügung, der alle Sequenzen von<Tab>
durch neue Leerzeichenfolgen ersetzt, wobei der neue Tabulatorwert (z. B.:set tabstop=2
) verwendet wird. Alle Tabulatoren in Zeichenfolgen können jedoch geändert werden (z. B. in einem C-Programm sollten Sie\t
dies vermeiden).Alternativ können Sie alle Tabulatoren mit dem folgenden Befehl in Leerzeichen ändern:
oder wie von @Shahbaz vorgeschlagen :
Es werden also nur die im Einzug verwendeten Tabulatoren konvertiert.
Erläuterung:
%
repräsentiert den gesamten Puffer / die gesamte Datei (:help :%
)s
steht für substitute (:help sub-replace-special
)\t
, oder^I
steht für tab- Verwenden Sie so viele Leerzeichen, wie Sie für eine Registerkarte benötigen
g
- steht für global und konvertiert mehrere Tabulatoren in derselben ZeileDann Vertiefung der gesamten Datei zu korrigieren, können Sie versuchen: gg=G. Überprüfen Sie: Weitere Informationen zum erneuten Einrücken von schlecht eingerücktem Code .
Um standardmäßig Leerzeichen anstelle von Tabulatoren zu verwenden, müssen Sie Ihrer
.vimrc
Datei die folgenden Einstellungen hinzufügen :Alternative Lösung ist zu verwenden
tidy
Verbunden:
quelle
%s/^\t\+/ g
so vorgehen, dass nur die Tabulatoren konvertiert werden, die beim Einrücken verwendet werden. Auchgg=G
könnte mit Sprachen wie Python katastrophal sein.Versuchen Sie es mit:
expand
ist ein Befehlszeilenprogramm zum Konvertieren von Tabulatoren in Leerzeichen, die Sie aus einer Shell oder mit ausführen können:!expand
.Es ist in POSIX , sollte also auf den meisten Systemen verfügbar sein.
unexpand
wird übrigens das Gegenteil tun.quelle
expand
?:%!expand -t 4
innerhalb von vim tun . Besser noch, Sie könnten auch die aktuelle Option für die Verschiebebreite verwenden::exe '%!expand -t ' . &shiftwidth
Der Vollständigkeit
=
halber können Sie auch Einrückungen korrigieren, nachdem Sie angegeben haben, dass Tabulatoren durch Leerzeichen ersetzt werden. Im normalen Modus können Sie dies durch Eingabe tun:set expandtab
. Dann=
könnte auf zwei Arten verwendet werden:=
würde ein einzelnes Einrücken ausgewählter Codeblöcke korrigieren.gg=G
die gesamte Datei repariert, wobeigg
der Cursor an den Anfang der Datei bewegt wird , dann=
angewendet wird undG
der Cursor an das Ende der Datei bewegt wird.Verweis: Link
quelle