web-dev-qa-db-de.com

Wie kann ich den Einzug einer gesamten Datei in Vi korrigieren?

Wie lautet in Vim der Befehl, die Einrückung aller Zeilen zu korrigieren?

Oft kopiere und füge ich Code in ein entferntes Terminal ein und habe das Ganze durcheinander gebracht. Ich möchte das auf einen Schlag beheben.

589
mmcdole

=, der Einzugsbefehl kann Bewegungen ausführen. Also, gg, um den Anfang der Datei zu erhalten, = zum Einrücken, G bis zum Ende der Datei gg=G.

1124
Logan Capaldo

Bevor Sie in das Terminal einfügen, versuchen Sie :set paste (und dann :set nopaste, nachdem Sie fertig sind). Dadurch werden die Funktionen zum automatischen Einrücken, Zeilenumbruch usw. deaktiviert, die das Einfügen beeinträchtigen.

edit: Ich sollte auch darauf hinweisen, dass ein viel besseres Ergebnis als = Einrücken normalerweise durch Verwendung eines externen Programms erzielt werden kann. Zum Beispiel führe ich ständig :%!perltidy aus. Astyle, Cindent usw. können ebenfalls verwendet werden. Natürlich können Sie diese auch mit einem Tastenanschlag verknüpfen - und je nach Dateityp verschiedene Tasten mit demselben Tastenanschlag

119
derobert

Wenn Sie den Block, in dem Sie sich befinden, erneut anzeigen möchten, ohne Akkorde eingeben zu müssen, können Sie Folgendes tun:

[[=]]
28
Andrew Wagner

Der Meister aller Befehle ist

gg=G

Dadurch wird die gesamte Datei eingerückt!

Nachfolgend sind einige der einfachen und eleganten Befehle zum schnellen Einrücken von Zeilen in Vim oder gVim aufgeführt.

Alle Zeilen unterhalb der aktuellen Zeile einrücken

=G

Die aktuelle Zeile wird eingerückt

==

Einrückung von n Zeilen unter der aktuellen Zeile

n==

Zum Beispiel, um 4 Zeilen unter der aktuellen Zeile einzurücken

4==

Um einen Codeblock einzurücken, gehen Sie zu einer der geschweiften Klammern und verwenden Sie den Befehl

=%
20
Sagar Jain

Sie können die aufgeräumte Anwendung/das Dienstprogramm verwenden, um HTML- und XML-Dateien einzuziehen.

Eine XML-Datei verifizieren

:!tidy -mi -xml %

Eine HTML-Datei verifizieren

:!tidy -mi -html %
17
Naga Kiran

drücken Sie die Escape-Taste und geben dann die folgenden Kombinationen ein:

gg=G
14
tokhi

1G=G. Das sollte alle Zeilen in der Datei einrücken. 1G bringt Sie in die erste Zeile, = startet den automatischen Einzug und die letzte G bringt Sie in die letzte Zeile der Datei.

11
Amjith

Verwenden Sie in Vim :insert. Dadurch bleiben alle Formatierungen erhalten und es erfolgt keine automatische Erkennung. Für weitere Informationen help :insert

7
Eric Johnson

:set paste ist dein Freund, ich verwende PuTTY und kopiere Code zwischen Fenstern. Vor dem Einschalten von :set paste (und :set nopaste) gab mir copy/paste aus genau diesem Grund Anfälle.

7
Elsporko

wenn Sie :set paste nicht verwenden möchten, klicken Sie nicht mit der mittleren Maustaste, set nopaste, können Sie auch den Inhalt der Zwischenablage einfügen:

"*p
"+p

Auf diese Weise müssen Sie den Normalmodus nicht verlassen. Wenn Sie + oder * einfügen müssen, hängt es von der Auswahl des Texts ab, siehe :help quoteplus.

6
0x89

vim-autoformat formatiert Ihre Quelldateien mit externen Programmen, die für Ihre Sprache spezifisch sind, z. Verschönern Sie "gem für Ruby-Dateien", "js-beautify" das npm-Paket für JavaScript.

4

Bei komplexen C++ - Dateien erhält vim bei Verwendung des Filterbefehls = Von vim nicht immer die richtige Formatierung. In solchen Situationen ist es besser, einen externen C++ - Formatierer wie astyle (oder uncrustify ) zu verwenden, z.

:%!astyle

Die '='-Funktion von Vim verwendet standardmäßig den internen Formatierer (was nicht immer funktioniert), aber Sie können auch einen externen Formatierer wie astyle verwenden, indem Sie ihn wie in diese Frage beschrieben entsprechend einrichten .

3
Pierz

Für XML-Dateien verwende ich diesen Befehl

:1,$!xmllint --format --recover - 2>/dev/null

Xmllint muss installiert sein (Paket libxml2-utils)

(Quelle: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html )

2
alphayax

vi sollte Tabulatoren und Leerzeichen berücksichtigen, jedoch sollten Sie berücksichtigen, dass vi andere Tabulatoren als der andere Editor verwendet. Können Sie etwas genauer sein als "ganze Sache durcheinander"?

2

Sie können ein Mapping erstellen, um dies für Sie durchzuführen.

Hiermit wird die gesamte Datei automatisch eingerückt und der Cursor bleibt in der Position, in der Sie sind:

nmap <leader>ai mzgg=G`z
1

Für den vi-Editor verwenden Sie: Einfügen. Dadurch bleiben alle Formatierungen erhalten, und es wird keine automatische Einrückung eingefügt. Wenn Sie fertig sind, drücken Sie die Escape-Taste, um die tatsächlich formatierte Datei anzuzeigen. Andernfalls werden einige Zeichen angezeigt. wie ^ I z.

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}
0
Priya Sharma

Wechseln Sie einfach in den visuellen Modus in vim und wählen Sie nach dem Auswählen aus bis zu den unteren Zeilen, drücken Sie einfach =. Alle ausgewählten Zeilen werden eingerückt.

0
Ramanand Yadav