Wie kann ich Änderungen, die ich vorgenommen habe oder nicht, sicher rückgängig machen?


12

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?


1
Suchen Sie nach einer "Rückgängig" -Aktion? :e!würde das tun
Jasper

1
Ich denke, es :e!wäre schlecht, wenn Sie seit dem letzten korrekten Zustand nicht gespeichert hätten, und es ukönnte unzureichend sein, wenn Sie eine Menge Dinge eingegeben hätten. (Wenn Sie date monthzum 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ürden u.)
wchargin

1
@WChargin Ich spreche nicht von einem uTeil der Sequenz, sondern führe einige Undos in der Mitte durch.
Du

Antworten:


14

Aufrufen

:undolist

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

:earlier 10s

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 .


4

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:

" Function: View changes after the last save
function! s:DiffSinceSave()
  let filetype=&ft
  diffthis
  vnew | r # | normal! 1Gdd
  diffthis
  exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
  exe "normal! ]c"
endfunction
com! DiffSaved call s:DiffSinceSave()

Sie können es dann später aufrufen und sogar eine Tastenkombination zuweisen.

" Map key to function: View changes after the last save
nnoremap <leader>? :DiffSaved<CR>

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.


3

Es scheint mir die einfache Antwort zu sein, zu drücken, ubis Sie eine Änderung rückgängig machen, die Sie behalten wollten, und dann zu drücken Ctrl-R.


0

Wie bei @superjer drücke ich so oft, ubis die rote [+]Markierung in meiner Statuszeile verschwindet.

set statusline=%f\ %#Error#%m%##

Es kann nützlich sein, einen Schlüssel zu haben, um automatisch zum letzten unveränderten Zustand zurückzukehren. Ist :e!aber auch eine schöne Lösung; Heutzutage behält Vim sogar Ihre "verworfenen" Änderungen im Rückgängig-Verlauf bei.
Joeytwiddle

5
Dieser Befehl ist :earlier 1f. Das 1fbedeutet "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.
Jamessan
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.