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.
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.
Antworten:
=
kann der Einrückungsbefehl Bewegungen annehmen. Also, gg
um den Anfang der Datei =
zu bekommen, um G
bis zum Ende der Datei einzurücken , gg=G
.
''
(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.
Versuchen Sie es vor dem Einfügen in das Terminal :set paste
und dann, :set nopaste
wenn 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 :%!perltidy
ganze Zeit. astyle
, cindent
Etc. können auch verwendet werden. Natürlich können Sie diese einem Tastenanschlag zuordnen und je nach Dateityp unterschiedliche Tastenanschläge zuweisen.
equalprg
Option in einem ftplugin so einstellen =
, dass anstelle eines benutzerdefinierten Tastenbelegs ein externer Filter zum Einrücken verwendet wird.
formatpgm
mit ordentlich und Astyle und dann gq
. Hier sind einige Beispiele aus meinem .vimrc
: au FileType xml set fp=tidy\ -q\ -i\ -xml
undau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
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:
[[=]]
=aB
was den Cursor überhaupt nicht bewegt.
[[=]]
sind 5 Akkorde erforderlich :(
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
==
n
Zeilen 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
=%
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 %
Drücken Sie die Esc-Taste und geben Sie die folgenden Kombinationen schnell ein:
gg=G
1G=G
. Das sollte alle Zeilen in der Datei einrücken. 1G
Nimmt Sie die erste Zeile, =
startet den automatischen Einzug und G
die letzte Zeile führt Sie zur letzten Zeile in der Datei.
1gg=G
:set paste
ist 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.
Verwenden Sie in Vim :insert
. Dadurch bleibt Ihre gesamte Formatierung erhalten und es wird keine automatische Einrückung durchgeführt. Weitere Informationen help :insert
.
Wenn Sie nicht mit der :set paste
mittleren Maustaste klicken möchten , set nopaste
kö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
.
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.
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 .
Für XML-Dateien verwende ich diesen Befehl
:1,$!xmllint --format --recover - 2>/dev/null
Sie müssen xmllint installiert haben (Paket libxml2-utils)
(Quelle: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html )
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
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");
}
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.
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.