Hauptseite

Verschiedene Undo- und Redo-Möglichkeiten für Vim

31. Mai 2009 von zimon

Neben den Standardvarianten, die jeder Editor beherrscht bietet vim noch mehr Kommandos für Undo und Redo. Die beiden geläufigsten Kommandos sind wohl u für Undo und Strg+r für Redo, die beide mit Quantifizierern aufgerufen können (z.B. 3u nimmt 3 Änderungen zurück). Mit U nimmt man alle letzten Änderungen der aktuellen Zeile zurück.

Einige kennen vielleicht das Problem, wenn man etwas mit Undo Rückgängig macht und dafür etwas anderes hinschreibt und irgendwann möchte man in den Zustand vor dem Undo zurück. Doch das ist mit den beiden “Standardkommandos” nicht möglich. Daher gibt es bei Vim die Befehle g- und g+, sie gehen zeitlich gesehen je einen Zustand zurück oder vor und können ebenfalls mit Quantifizierern verwendet werden.

Ein Beispiel:
Man schreibt folgenden Satz wobei man nach jedem Wort ESC drückt, damit jedes Wort per Undo zurückgenommen werden kann:

Dies ist ein Beispiel

Nun nimmt man mit u das letzte Wort zurück und ersetzt es mit dem Wort “Test”.

Dies ist ein Test

Jetzt kann man mit u und Strg+r zwar jedes Wort zurück nehmen und wieder setzen, aber man kommt nicht zum ersten Satz mit “Beispiel” zurück. Drückt man statt dessen g-, wird zum ersten Satz mit “Beispiel wieder hergestellt (solange vorher nicht u gedrückt wurde, sonst muss man mit g+ arbeiten).

Vim speichert die Undo und Redo Schritte in einer Baumstruktur, wobei Undo nur eine Stufe höher geht und Redo in den jeweils neuesten Zweig. Dadurch kommt man im obigen Beispiel mit diesen Kommandos nicht mehr in den Zweig, wo der Text das Wort “Beispiel” enthielt. g+ und g- hingegen traversieren den gesamten Baum, wodurch jeder Zustand, der einmal existierte hat wieder hergestellt werden kann.

Ähnlich funktionieren die Kommandos :earlier und :later. Sie haben ohne Argument (oder nur mit Quantifizierer wie z.B. :earlier 3) die gleiche Funktionen wie g+ und g-. Man kann ihnen aber auch Zeitangaben in Sekunden, Minuten und Stunden mitgeben, zu denen gesprungen werden kann:

  • :earlier 30s – springt zum Zustand,der vor 30 Sekunden herrschte.
  • :earlier 5m – stellt den Zustand von vor 5 Minuten wieder her.
  • :earlier 2h – läd den Zustand von vor 2 Stunden.
  • :later 20m – Zeigt den Text, wie er 20 Minuten später aussah.

Das Kommando later kennt natürlich auch die Sekunden- und Stundenangaben.

Mit dem Befehl :undol bzw. :undolist kann man sich die Liste aller Änderungen anzeigen lassen. Dabei werden einem alle Zweige des Baumes aufgelistet und angegeben wieviele Änderungen es in dem Zweig gab sowie der Zeitpunkt, an dem die Änderung gemacht wurde.


Schlagworte: , , ,



1 Kommentar zu „Verschiedene Undo- und Redo-Möglichkeiten für Vim“

  1. JSqrt sagt:

    Immer wieder komme ich hierher, da hier die Dinge mal verständlich beschrieben sind.
    Man hat manchmal das Gefühl, es ist nicht gewollt, dass sich jemand mit bash oder vim beschäftigt…
    Siehe Schlagwörter: Konsole + Vim

Kommentieren

Kommentarlinks könnten nofollow frei sein.


Bloggeramt.de frisch gebloggt Blogverzeichnis - Blog Verzeichnis bloggerei.de