Rückgängig ist schön in Vim zu haben. Aber manchmal möchte ich an einem bekannten guten Punkt meinen Rückgängig-Verlauf löschen u
, um einzelne Änderungen rückgängig machen zu können, aber nur bis zu einem bestimmten Punkt. (Zum Beispiel könnte dies der Zeitpunkt sein, an dem ich das letzte Mal einen Commit ausgeführt habe.)
Eine Möglichkeit, dies zu erreichen, besteht darin, die Datei zu schließen und erneut zu öffnen - der Rückgängig-Verlauf beginnt an diesem Punkt sauber. Aber das ist ein Ärger.
In der Vergangenheit habe ich dies mit erreicht :edit!
. In Vim 7.3 wird der Rückgängig-Verlauf jedoch nicht verworfen.
Gibt es eine andere Möglichkeit, dies zu tun, als die Datei zu schließen?
git checkout -f file
oder neu zuordnenhg rollback file
?u
einzelne Änderungen rückgängig zu machen, aber nicht über den Punkt hinaus, an dem ich das letzte Mal einen Commit ausgeführt habe. Genau so, als hätte ich jedes Mal, wenn ich ein Commit ausgeführt habe, die Datei geschlossen und erneut geöffnet. Das war:edit!
früher so, als würde man die Datei schließen und wieder öffnen. Dies MUSS nicht an einen Festschreibungspunkt gebunden sein, dies ist nur der Zeitpunkt, an dem ich es am häufigsten möchte.Antworten:
sollte tun, wonach du fragst.
quelle
Das alte: redigieren Sie! Verhalten in einem Einzeiler:
quelle
:h :exe
,:h :bar
,:h :set-args
,:h 'ul'
und:h :edit!
.Benoits Funktion hat bei mir nicht funktioniert, aber ich habe im vim-Handbuch etwas Ähnliches gefunden:
http://www.polarhome.com/vim/manual/v73/undo.html#undo-remarks
Ich habe es einer Funktion hinzugefügt, die meinem vimrc hinzugefügt wurde, und es scheint auf vim 7.3 einwandfrei zu funktionieren:
Dies kann mit verwendet werden
:ClearUndo
.quelle
Wahrscheinlich:
(
'ul'
ist alias für'undolevels'
).quelle
:edit!
. Zu Beginn habe ich mit den von Ihnen aufgelisteten Befehlen eine Funktion namens ClearUndos () erstellt, aber der Aufruf scheint nichts zu bewirken, wohingegen das individuelle Ausführen der Befehle ...:command -nargs=0 Reset let old_ul=&ul | set ul=-1 | e! | let &ul = old_ul | unlet old_ul
|
einen Befehlsinhalt nicht roh einfügen. Erstellen Sie dann eine Funktion, die das tut, was ich in meiner Antwort angegeben habe, und setzen Sie den Befehl aufcall thefunction()
."Verlauf rückgängig machen löschen (: w um die Datei rückgängig zu machen, falls vorhanden)
command! -bar UndoClear exe "set ul=-1 | m-1 | let &ul=" . &ul
m-1
bei der Änderung Ihres Textes.'undofile'
eingeschaltet ist,:w
löschen Sie die Undo - Datei oder eine Kette wieUndoClear|w
.quelle
In einem Skript:
Dann benutze
:Reset
um es zu nennen.quelle
set ul=
wirkt sich der Befehl nur auf eine lokale Variable aus, bis das Skript beendet wird, und da wir ihn vor dem Beenden des Skripts wieder ändern, wirkt er sich nie auf die Umgebung aus? Haben Sie diese Funktion getestet und haben sie funktioniert - was bedeutet, dass mein Setup seltsam ist?