Wenn wir eine Datei bearbeiten, machen wir normalerweise viele UNDO hintereinander, beispielsweise 20 Mal. In VIM wird dies normalerweise durch u20-maliges Drücken ausgeführt , wodurch VIM in den 20 Positionen des Verlaufsstapels "nach oben" geht. Wenn Sie dann eine bestimmte Option festlegen change, gehen alle letzten 20 Verlaufsbefehle verloren und werden durch ersetzt change. Ich würde das gerne machen, changeohne diese 20 Positionen zu verlieren. Ich möchte VIM also anweisen, die Aufzeichnung des Verlaufs zu beenden, bevor ich dies tue change, und den Verlauf danach fortzusetzen (nicht changein den Verlauf aufnehmen wollen ).
BEARBEITEN
Um klarer zu sein: Ich habe eine Funktion FF, die die letzten Zeilen einer Datei aktualisiert, wenn der Puffer geschrieben wird. Wenn ich also spiele 20 undos + write, writeöffnet der letzte einen neuen Rückgängig-Zweig. Ich habe versucht, undojoininnen hinzuzufügen FF( ich habe versucht , einem Vorschlag von jlmg unten zu folgen), aber eine Sequenz Schreiben-Rückgängig-Schreiben gibt einen Fehler: Rückgängig machen nach Rückgängig nicht erlaubt . Ich könnte stattdessen einige tun, sed ....nachdem ich gegangen vimbin, aber da ich dies durch verwende, SSHbevorzuge ich eine Nur-Vim-Lösung (einen Befehl ausführen, nachdem der Puffer entladen wurde, wird nicht in die Datei geschrieben).
BEARBEITEN 2 Versuchen Sie dies in VIM: Öffnen Sie eine leere Datei und gehen Sie wie folgt vor:
i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
Wenn Sie jetzt eine machen <CTRL>R, schreibt VIM die '3' zurück, je weiter <CTRL>RSie die bekommen 4. Dies geschieht AUCH, wenn Sie :wnach jedem eine machen <CTRL>R. Wenn Sie jedoch jedes Mal, wenn Sie eine Funktion :wausführen, eine Funktion ausführen BufWritePre, <CTRL>Rwird die Funktion nicht 3zurückgeschrieben. Und das ist, was ich tun möchte, deshalb habe ich geschrieben, um "Hisotry auszusetzen", aber vielleicht ist das, was ich frage, nicht möglich, außer mit der vollen Arbeit zu arbeiten undotree().
vim.se, das hätte ich versucht. Wie auch immer, Sato scheint zu helfen.
sederzielen, aber sed kann Ihre Rückgängigmachungen nicht ausführen. Wie wird das funktionieren? Wenn Sie in der Lage wären, den Verlauf auszusetzen, welches Verhalten würden Sie von vim erwarten, wenn Sie anschließend ein Rückgängigmachen durchführen? Das einzige Verhalten, das ich mir vorstellen konnte, war, diese Änderungen (zusammen mit den Rückgängigmachungen) in einem Rückgängig-Block zu gruppieren, daher meine Antwort. Aber wenn das nicht so ist, was ist es dann?
vi, aber für michviist Undo Befehl rückgängig macht einmal, und dann , wenn Sie die Tasteuwieder rückgängig macht es den Rückgängig ( ‚Redo‘). Das ist echt vi. Daher kennen ich und andere Benutzer dieser Website möglicherweise die Antwort auf Ihre Frage nicht.