Wie behebe ich den Einzug einer ganzen Datei in Vi?


625

Was ist in Vim der Befehl, um die Einrückung aller Zeilen zu korrigieren?

Oft kopiere ich Code und füge ihn in ein Remote-Terminal ein und lasse das Ganze durcheinander bringen. Ich möchte das auf einen Schlag beheben.



8
Vorbeugung ist besser als Heilung. In diesem Sinne kommt dieser Kommentar. Führen Sie ein ": set paste" aus, bevor Sie in den Einfügemodus wechseln und den Code vom Remote-Terminal einfügen.
Chthonic Project

Antworten:


1215

=kann der Einrückungsbefehl Bewegungen annehmen. Also, ggum den Anfang der Datei =zu bekommen, um Gbis zum Ende der Datei einzurücken , gg=G.


39
Ich werde mein wertvolles 1G nie verlernen können =) Einer meiner Favoriten ist =%, der auf einer öffnenden Klammer steht. Es korrigiert die Einrückungen des gesamten Blocks.
PEZ

2
: 0 <return> ist nicht so schlecht, aber gg ist nett. (Ja, ich habe es zuerst gelernt)
Erik Olson

8
Kann ich die gesamte Datei einrücken, ohne die aktuelle Zeile zu verlassen?
Fábio Perez

86
@ Fábio: ''(zwei einfache Anführungszeichen) bringt dich zurück zu dem Ort, an dem du warst, gg=G''sollte also einrücken und dann zurückkehren.
Nemo157

@ArchimedesTrajano Mac OS ist sehr alt. Ich empfehle die HomeBrew-Version. es ist viel neuer. Ich hatte einige nervige Probleme mit Macs Vim. Außerdem habe ich gehört, dass Sie sich nicht mit dem integrierten Gerät anlegen sollten. Versuchen Sie also nicht, es selbst zu aktualisieren, es sei denn, Sie sind sehr vorsichtig.
AlexMA

126

Versuchen Sie es vor dem Einfügen in das Terminal :set pasteund dann, :set nopastewenn Sie fertig sind. Dadurch werden der automatische Einzug, der Zeilenumbruch und andere Funktionen deaktiviert, die Ihre Paste durcheinander bringen.

edit: Außerdem sollte ich darauf hinweisen, dass ein viel besseres Ergebnis als das =Einrücken normalerweise mit einem externen Programm erzielt werden kann. Zum Beispiel laufe ich die :%!perltidyganze Zeit. astyle, cindentEtc. können auch verwendet werden. Natürlich können Sie diese einem Tastenanschlag zuordnen und je nach Dateityp unterschiedliche Tastenanschläge zuweisen.


5
Sie können die equalprgOption in einem ftplugin so einstellen =, dass anstelle eines benutzerdefinierten Tastenbelegs ein externer Filter zum Einrücken verwendet wird.
Josh Lee

Es gibt auch eine Pastetoggle-Tastenkombination, z. : setze pt \ p um zwischen den Modi zu
wechseln

Hinweis: In der vimconfig von grml ist die Pastetoggle-Taste F11
Thomas

Ich benutze formatpgmmit ordentlich und Astyle und dann gq. Hier sind einige Beispiele aus meinem .vimrc: au FileType xml set fp=tidy\ -q\ -i\ -xmlundau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
Raffi Khatchadourian

Gerade perltidy heruntergeladen, nachdem Sie dies gelesen haben, es ist so viel besser als der Standard-Vim-Auto-Einzug
Joey Ciechanowicz

29

Wenn Sie den Block, in dem Sie sich befinden, erneut einrücken möchten, ohne Akkorde eingeben zu müssen, haben Sie folgende Möglichkeiten:

[[=]]

1
Tut mir leid, das wiederzubeleben, aber was hast du mit Akkorden gemeint? Koordinaten?
John P

7
"Akkorde" bezieht sich hier auf Befehle, die ausgegeben werden, indem eine Taste gedrückt gehalten wird, während eine andere gedrückt wird. In Analogie zu Musikakkorden erklingen mehrere Noten gleichzeitig. Also ist G Shift + G, ^] ist Strg +] und so weiter. Die Eingabe dauert länger als bei Einzelschlüsselbindungen.
Ralph Giles

Sie können auch verwenden, =aBwas den Cursor überhaupt nicht bewegt.
Amin

7
Für die nordische Tastatur [[=]]sind 5 Akkorde erforderlich :(
k4kuz0

29

Der Meister aller Befehle ist

gg=G

Dies rückt die gesamte Datei ein!

Im Folgenden finden Sie einige einfache und elegante Befehle zum schnellen Einrücken von Zeilen in Vim oder gVim.

Zum Einrücken aller Zeilen unterhalb der aktuellen Zeile

=G

Einrücken der aktuellen Zeile

==

nZeilen unterhalb der aktuellen Zeile einrücken

n==

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

4==

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

=%

17

Sie können ordentliche Anwendungen / Dienstprogramme verwenden, um HTML- und XML-Dateien einzurücken, und es funktioniert ziemlich gut beim Einrücken dieser Dateien.

Verschönern Sie eine XML-Datei

:!tidy -mi -xml %

Verschönern Sie eine HTML-Datei

:!tidy -mi -html %

16

Drücken Sie die Esc-Taste und geben Sie die folgenden Kombinationen schnell ein:

gg=G

28
Ich habe langsam getippt, du wirst nicht glauben, was als nächstes passiert ist.
k0pernikus

Ich habe nur die Antwort und den Kommentar positiv bewertet, weil das von unschätzbarem Wert war! lol @ k0pernikus
gglasses

12

1G=G. Das sollte alle Zeilen in der Datei einrücken. 1GNimmt Sie die erste Zeile, =startet den automatischen Einzug und Gdie letzte Zeile führt Sie zur letzten Zeile in der Datei.


Oder sogar1gg=G
Biggybi

1G = G hat es für mich behoben. Genial!
Natus Drew

8

:set pasteist dein Freund Ich benutze Kitt und kopiere am Ende Code zwischen Windows. Bevor ich auf :set paste(und :set nopaste) Kopieren / Einfügen eingestellt wurde, gab es mir genau aus diesem Grund Passungen.


1
Ja, ich benutze auch Kitt. : Paste setzen ist fantastisch
mmcdole

7

Verwenden Sie in Vim :insert. Dadurch bleibt Ihre gesamte Formatierung erhalten und es wird keine automatische Einrückung durchgeführt. Weitere Informationen help :insert.


7

Wenn Sie nicht mit der :set pastemittleren Maustaste klicken möchten , set nopastekönnen Sie auch den Inhalt der Zwischenablage einfügen:

"*p
"+p

Auf diese Weise müssen Sie den normalen Modus nicht verlassen. Wenn Sie den Text einfügen müssen +oder *davon abhängen, wie Sie ihn ausgewählt haben, lesen Sie :help quoteplus.


4

vim-autoformat formatiert Ihre Quelldateien mit externen Programmen, die für Ihre Sprache spezifisch sind, z. B. das Juwel "rbeautify" für Ruby-Dateien, das Paket "js-beautify" npm für JavaScript.


3

Bei komplexen C ++ - Dateien erhält vim nicht immer die richtige Formatierung, wenn der =Filterbefehl von vim verwendet wird . In solchen Situationen ist es daher 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 richtig ist). Sie können ihn jedoch auch mithilfe eines externen Formatierers wie astyle einstellen, indem Sie ihn wie in dieser Frage beschrieben entsprechend einrichten .



1

Sie können ein Mapping erstellen, um dies für Sie zu tun.

Dieser wird die gesamte Datei automatisch einrücken und den Cursor weiterhin an der Position halten, an der Sie sich befinden:

nmap <leader>ai mzgg=G`z

0

Verwenden Sie für vi Editor: Einfügen. Dadurch bleibt Ihre gesamte Formatierung erhalten und es wird kein automatisches Einrücken eingefügt. Drücken Sie anschließend die Esc-Taste, um die tatsächlich formatierte Datei anzuzeigen. Andernfalls werden einige Müllzeichen angezeigt. wie ^ ich zB:

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

0

Wechseln Sie in vim einfach in den visuellen Modus und wählen Sie nach der Auswahl von nach oben und unten aus. Drücken Sie einfach =. Alle ausgewählten Zeilen werden eingerückt.


Ich würde das vermeiden. Der visuelle Modus ist für den Fall gedacht, dass Sie sich über Ihre Bewegungen nicht sicher sind und wissen, wie man eine Reihe von Zeichen erfasst. Der zusätzliche Schritt, in den visuellen Modus zu wechseln, macht keinen Sinn. Warum, ggvG=wenn du kannst gg=G. Was war der Sinn, um die Bewegung sichtbar zu machen? Das gilt für alle Aktionen, die Bewegungen ausführen.
Alextes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.