Zu oft mache ich den Fehler, mit fokussiertem falschem Fenster zu tippen (und habe dies einige Male mit einem USB-Authentifikator getan). In Programmen mit vielen aktivierten Hotkeys (Gmail, VLC, Vim) hat dies häufig die unbeabsichtigte Folge, dass unerwünschte Änderungen vorgenommen werden.
Manchmal kann ich meine Schritte verfolgen und mich daran erinnern, was ich eingegeben habe, um Änderungen zu reparieren oder Einstellungen, die ich geändert habe, zurückzusetzen, wenn ich mich früh fange. Das ist leider nicht immer der Fall.
In Vim könnte ich etwas so harmloses und offensichtliches haben wie das Ändern einer Textzeile, die leicht rückgängig gemacht werden kann. Oder ich hätte unwissentlich etwas modifizieren können, das nicht so leicht zu identifizieren ist. Wie kann ich überprüfen, ob Änderungen oder Änderungen an den Einstellungen vorgenommen wurden, wenn ich versehentlich eine Folge unerwünschter Befehle in Vim eingebe?
:e!
würde das tun:e!
wäre schlecht, wenn Sie seit dem letzten korrekten Zustand nicht gespeichert hätten, und esu
könnte unzureichend sein, wenn Sie eine Menge Dinge eingegeben hätten. (Wenn Siedate month
zum Beispiel getippt hätten, hätten Sie ein Tag gelöscht, eine Markierung gesetzt und eine Suche durchgeführt, was sehr verwirrend wäre, wenn Sie das via rückgängig machen würdenu
.)u
Teil der Sequenz, sondern führe einige Undos in der Mitte durch.Antworten:
Aufrufen
um zu sehen, wann Sie die letzten Änderungen vorgenommen haben. Wenn es heißt, dass einige Änderungen vorgenommen wurden, z. B. "vor 3 Sekunden", und Sie wissen, dass Sie es nur absichtlich geändert haben, z. B. vor einer Minute, dann führen Sie es aus
um in den gewünschten Zustand zurückzukehren. Andernfalls müssen Sie nichts unternehmen, wenn es keine aktuellen Änderungen gibt.
Weitere Referenz:
:help undo-tree
.quelle
Um die Frage neu zu formulieren, suchen Sie nach einer Möglichkeit, die an einer Datei vorgenommenen Änderungen anzuzeigen oder auf andere Weise benachrichtigt zu werden, und verwenden dann eine Funktion zum Rückgängigmachen. Es gibt vielleicht andere Wege oder sogar Plugins, die dies unterstützen. Aber ich werde erklären, was ich für den gleichen Zweck verwendet habe.
Sie kombinieren vorhandene vim-Funktionen, um dies zu erreichen. Zum Beispiel könnten Sie eine Funktion definieren wie:
Sie können es dann später aufrufen und sogar eine Tastenkombination zuweisen.
Dadurch wird eine auf einem geteilten Fenster basierende Diff-Ansicht geöffnet, in der die seit dem letzten Speichern vorgenommenen Änderungen angezeigt werden. Nachdem Sie die vorgenommenen Änderungen identifiziert haben, können Sie diese Ansicht beenden und andere vim-Funktionen wie das Rückgängigmachen und Rückgängigmachen des Baums usw. oder sogar Plugins verwenden, um zu vorherigen Zuständen zurückzukehren.
Mir ist klar, dass dies nicht ideal ist, weil man eine bestimmte Art von Workflow haben muss, damit dies nützlich ist. Das funktioniert aber ganz gut. Und auf der positiven Seite ändern wir nichts an der Funktionsweise von Vim und verlassen uns nicht auf irgendetwas außerhalb.
Ich hoffe, Sie finden das nützlich. Ich habe diese Lösung vor einiger Zeit an Schnipsel angepasst, die im Internet gefunden wurden, einschließlich vim Wikia. Hier ist also eine Gutschrift fällig.
quelle
Es scheint mir die einfache Antwort zu sein, zu drücken,
u
bis Sie eine Änderung rückgängig machen, die Sie behalten wollten, und dann zu drückenCtrl-R
.quelle
Wie bei @superjer drücke ich so oft, ubis die rote
[+]
Markierung in meiner Statuszeile verschwindet.quelle
:e!
aber auch eine schöne Lösung; Heutzutage behält Vim sogar Ihre "verworfenen" Änderungen im Rückgängig-Verlauf bei.:earlier 1f
. Das1f
bedeutet "1 vorheriger gespeicherter Status", so dass zum vorherigen Zeitpunkt, zu dem Sie die Datei gespeichert haben, zurückgekehrt wird. Wenn der Puffer geändert wird, werden alle Änderungen rückgängig gemacht. Wenn der Puffer nicht geändert wird (dh sich derzeit in einem gespeicherten Zustand befindet), wird zum vorherigen Zeitpunkt gewechselt, zu dem Sie die Datei gespeichert haben.