HOWTO · Linux
Wie man Undo- und Redo-Operationen in Vim und Vi durchführt
Erfahren Sie, wie Sie Änderungen in Vim und Vi rückgängig machen und wiederherstellen, mit `:undolist` und `:earlier` durch den Undo-Verlauf navigieren und die Gruppierung von Änderungen beim Rückgängigmachen verstehen.
Auf dieser Seite
Drücken Sie in Vim Esc, um in den Normalmodus zurückzukehren, und drücken Sie dann u, um die letzte Änderung rückgängig zu machen, oder Ctrl-R, um eine soeben rückgängig gemachte Änderung wiederherzustellen. Dies sind Tasten des Normalmodus. Ex-Befehle wie :undo und :redo werden auf der Befehlszeile von Vim nach : eingegeben.
Änderungen in Vim und Vi rückgängig machen
Drücken Sie Esc, um in den Normalmodus zu wechseln, und drücken Sie dann u. Um mehrere Änderungen rückgängig zu machen, verwenden Sie eine Anzahl wie 3u oder drücken Sie u wiederholt. Die Ex-Formen :u und :undo machen ebenfalls eine Änderung rückgängig; geben Sie den Doppelpunkt als Teil des Befehls ein.
Beginnen Sie zum Beispiel mit Hello World. Fügen Sie im Einfügemodus Beautiful zwischen den Wörtern ein und drücken Sie dann Esc; die Zeile wird zu Hello Beautiful World. Drücken Sie u im Normalmodus, um Hello World wiederherzustellen. Undo-Gruppen hängen von den Bearbeitungsregeln und dem Kontext von Vim ab, sodass eine Eingabepassage nicht in jeder Situation garantiert einen einzigen Undo-Schritt bildet.
Das kleine Shell-Beispiel unten bildet dieselben Textzustände ab: vorher, bearbeitet, rückgängig gemacht und wiederhergestellt. Es veranschaulicht die Textfolge; die oben beschriebenen Vim-Tastenanschläge werden im Editor ausgeführt.
before='Hello World'
edited='Hello Beautiful World'
current=$edited
printf 'Edited: %s\n' "$current"
current=$before
printf 'After u: %s\n' "$current"
current=$edited
printf 'After Ctrl-R: %s\n' "$current"
Edited: Hello Beautiful World
After u: Hello World
After Ctrl-R: Hello Beautiful World
Änderungen in Vim und Vi wiederherstellen
Drücken Sie nach dem Rückgängigmachen Ctrl-R im Normalmodus, um die Änderung wiederherzustellen. Eine Anzahl wie 3<C-R> stellt bis zu drei rückgängig gemachte Änderungen wieder her. Sie können auch :redo auf der Befehlszeile eingeben. Im obigen Beispiel stellt Ctrl-R Hello Beautiful World wieder her.
Redo folgt dem aktuellen Undo-Verlauf. Wenn Sie eine Änderung rückgängig machen und dann eine neue Bearbeitung vornehmen, ändert Vim diesen Verlauf; erwarten Sie nicht, dass Ctrl-R einen aufgegebenen Bearbeitungszweig wiederherstellt.
Im Vim-Undo-Verlauf navigieren
Verwenden Sie :undolist, um Informationen zu den Undo-Sequenzen anzuzeigen. Um zu einem nummerierten Zustand zu wechseln, verwenden Sie :undo {N}; {N} ist eine Undo-Sequenznummer, keine beliebige Änderungs-ID. Zum Beispiel wechselt :undo 3 zur Sequenznummer 3.
Verwenden Sie :earlier {N}, um um {N} Änderungen zurückzugehen; zum Beispiel geht :earlier 3 drei Änderungen zurück. Der Normalmodus-Befehl g- wechselt zu älteren Textzuständen, während g+ zu neueren Zuständen wechselt. Diese Befehle navigieren durch den Undo-Verlauf von Vim; sie wählen keine Einträge anhand der von :undolist ausgegebenen Nummern aus.
Undo-Blöcke und den Befehl U verstehen
Das kleine u macht eine Änderung im Undo-Verlauf rückgängig. Das große U hat ein anderes, zeilenbezogenes Verhalten: In Vim stellt es die aktuelle Zeile gemäß den Undo-Regeln von Vim in ihren früheren Zustand zurück. Es ist keine andere Schreibweise von u und bedeutet nicht in allen Bearbeitungskontexten „jede Änderung an der Zeile rückgängig machen“. Die Gruppierung von Änderungen kann je nach verwendeten Befehlen und je nachdem, wann Vim eine Änderung aufzeichnet, variieren.
Vi-Implementierungen unterscheiden sich; prüfen Sie daher die Hilfe des von Ihnen verwendeten Editors, wenn sich ein Befehl anders verhält. Der Undo-Verlauf von Vim ist normalerweise verfügbar, solange die Bearbeitungssitzung geöffnet bleibt. Über Sitzungen hinweg hängt die Persistenz von der Konfiguration der Undo-Datei von Vim ab; das Speichern mit :w schreibt den Puffer, garantiert aber für sich allein nicht, dass der Undo-Verlauf erhalten bleibt.
Häufige Fragen
Wie mache ich mehrere Änderungen rückgängig? Kehren Sie in den Normalmodus zurück und verwenden Sie eine Anzahl wie 3u oder wiederholen Sie u.
Was ist die Redo-Taste? Drücken Sie Ctrl-R im Normalmodus oder geben Sie :redo auf der Befehlszeile von Vim ein.
Wie kann ich den Undo-Verlauf ansehen oder darin navigieren? :undolist listet Sequenzinformationen auf; :undo {N} zielt auf eine Sequenznummer. :earlier 3 geht drei Änderungen zurück, während g- und g+ zwischen älteren und neueren Zuständen wechseln.
Behält Vim den Undo-Verlauf nach dem Schließen? Das ist möglich, wenn persistentes Undo konfiguriert ist und die Undo-Datei verfügbar ist. Ohne diese Einrichtung sollten Sie nicht davon ausgehen, dass der Sitzungsverlauf das Schließen von Vim überdauert. :w speichert den Dateiinhalt, ist aber kein Versprechen für einen persistenten Undo-Verlauf.