Ich benutze die Undofile-Funktion in Vim jetzt schon eine Weile. Es ist eine sehr schöne Funktion.
Ein Ärger ist jedoch, dass es sehr leicht ist, versehentlich Änderungen rückgängig zu machen, die ich beim letzten Öffnen der Datei vorgenommen habe. Das kann vor 2 Minuten, vor einer Stunde, vor einer Woche oder vor einem Monat sein.
Nehmen wir zum Beispiel an, ich öffne eine Datei, nehme einige Änderungen vor, ändere einige andere Dateien und stelle fest, dass meine Änderungen nicht erforderlich waren oder es sich nur um einige temporäre Debug-Anweisungen handelte.
Zuvor konnte ich nur die uTaste gedrückt halten, bis Vim sagte "Bereits bei der ältesten Änderung" :wq
, und fertig. Aber jetzt muss ich sehr vorsichtig sein, um die Änderungen, die ich beim letzten Öffnen der Datei vorgenommen habe, nicht rückgängig zu machen. Es gibt keine offensichtliche Möglichkeit zu sehen, wann Sie dies tun.
Gibt es eine Möglichkeit, dies expliziter zu machen? Zum Beispiel, indem man es irgendwo anzeigt, eine Warnung ausgibt oder sogar um eine Bestätigung bittet.
quelle
Antworten:
Ich hatte genau dieses Problem. Folgendes habe ich zu meinem vimrc hinzugefügt, um es für mich zu reparieren:
Beachten Sie, dass Sie die Option nicht festlegen
undofile
. Sie müssen von Ihrem vimrc entfernen, wenn Sie es haben.Rückgängig machen funktioniert jetzt wie "normal". Wir schreiben aber manuell in die Undo-Datei mit dem
wundo
Befehl inBufWritePost
.Die
ReadUndo()
Funktion liest die Undo-Datei manuell mitrundo
und setzt dieundofile
Option. Jetzt können wir uweiter in die Geschichte eingehen. Ich habe das hier abgebildet<Leader>u
.Das könnte wahrscheinlich besser sein. Die vorherigen Rückgängig-Informationen werden überschrieben, sodass Sie nicht zum vorherigen Zeitpunkt zurückkehren können, zu dem Sie die Datei bearbeitet haben. Aber das habe ich selbst nicht gebraucht.
quelle
Oooh, ooh, endlich eine Chance, diesen raffinierten Befehl vorzuführen!
Vim kann "in der Zeit zurückgehen". Es hat einen
:earlier
Befehl ...... wodurch die Datei auf einen früheren Zustand zurückgesetzt werden kann. Dies kann auf verschiedene Arten verwendet werden.
Wenn Sie einen Schätzwert für die Dauer dieser Änderungen erstellen können, können Sie eine Zeit in diesen Befehl eingeben. Wenn Sie beispielsweise wissen, dass Sie die Datei (mit Ausnahme der Änderungen, die Sie rückgängig machen möchten) am vergangenen Tag nicht geändert haben, können Sie verwenden
Wenn Sie die Datei seit den Änderungen, die Sie rückgängig machen möchten, nur einmal geschrieben (gespeichert) haben oder die Datei überhaupt nicht gespeichert haben, können Sie sie verwenden
Wie im
:help
Text beschrieben, wird die zuvor geschriebene Version wiederhergestellt, wenn Sie die Datei gerade geschrieben haben, oder die zuletzt gespeicherte Version, wenn Sie keine Änderungen gespeichert haben.Dies beantwortet Ihre Frage nicht genau, aber es klingt wie ein XY-Problem.
quelle
u
und gehe versehentlich an den Änderungen vorbei, die ich gerade vorgenommen habe ... Ich bin nicht sicher, was das ursprüngliche "X-Problem" hier sein könnte?:earlier
übrigens ungefähr , aber ich muss noch raten ; so wie ich muß erraten , wenn die Verwendung vonu
... In den Fällen , ist es wahrscheinlich ein bisschen besser, aber ich würde etwas deutlicher (wenn möglich) bevorzugen.:ea 5d
. Sie könnten auch den:ea 1f
Ansatz verwenden. In jedem Fall ist es viel weniger körnig.Update 28.06.2015 : Ich habe einen kleinen Fehler behoben und als Plugin veröffentlicht . Der Plugin-Code ist insofern etwas besser, als er nach dem Bewegen des Cursors erneut warnt. Ich empfehle dir das Plugin zu benutzen.
Die Antwort von superjer funktioniert prima, hat aber den unglücklichen Nebeneffekt, dass Sie nur Änderungen von der letzten Vim-Sitzung rückgängig machen können und nicht von allen vorherigen Vim-Sitzungen.
Dies liegt daran, dass
wundo
die Undo-Datei überschrieben wird. Es wird nicht zusammengeführt. Soweit ich weiß, gibt es keine Möglichkeit, dies zu beheben.Hier ist meine alternative Lösung. Sie zeigt eine große rote Warnmeldung an, wenn Sie Änderungen an der Rückgängig-Datei rückgängig machen.
Dies ähnelt der Antwort von Ingo Karkat , erfordert jedoch kein externes Plugin und weist einige geringfügige Unterschiede auf (es wird eine Warnung anstelle eines Pieptons angezeigt , Sie müssen nicht
u
zweimal drücken ).Notieren Sie sich diese nur ändert das
u
und<C-r>
bindet, und nicht dieU
,:undo
und:redo
Befehle.quelle
Ich habe die folgenden, die stoppt und piept, wenn Rückgängig den dauerhaften Pufferinhalt erreicht.
Dies ist in das repeat.vim-Plugin integriert. es benötigt mein ingo-library plugin .
quelle
Ich mochte die zitierte Idee wirklich, also gab ich
:Revert
Befehl. Ich hoffe, Sie werden es für Ihre Frage relevant finden.Hilfsfunktionen
Get_seq
undReal_seq
, basierend auf undotree , sind notwendig , weilundotree()['seq_cur']
manchmal nicht genügend aktuelle Position im Rückgängig - Baum zu lokalisieren. Sie können mehr darüber lesen Sie hier .quelle
au
. der vimrc da drin ist der täter . Lass es einfach weg