Wie kann ich in Evil ein ähnliches Verhalten wie in Vim rückgängig machen?

17

Das Standardverhalten zum Rückgängigmachen in Evil ist zu grobkörnig, da es alles berücksichtigt, was zwischen dem Aufrufen des Einfügemodus und dem Verlassen des Einfügemodus als eine Bearbeitungsoperation stattfindet. Wenn Sie während eines Einfügens einen ganzen Textabschnitt eingeben und dann rückgängig machen, wird der gesamte Absatz entfernt. Im Gegensatz dazu startet Vim eine neue Rückgängig-Einheit, wenn Sie den Cursor im Einfügemodus auf eine andere Weise als durch Eingabe von Text bewegen.

Evil verfügt über eine Anpassungsvariable, mit der Sie einen detaillierteren Rückgängig-Verlauf erhalten können:

(setq evil-want-fine-undo t)

Mit dieser Einstellung startet Evil eine neue Undo-Einheit, wenn der Cursor im Einfügemodus bewegt wird, genau wie Vim. Diese Einstellung wirkt sich jedoch auch auf die Handhabung des Ersetzungsvorgangs aus: Wenn Sie ein Wort mit ersetzen cw, müssen Sie den Vorgang zweimal rückgängig machen, um das ursprüngliche Wort wiederherzustellen: einmal, um das neue Wort zu entfernen, und einmal, um das ursprüngliche Wort erneut einzufügen. Dies ist mit Vim nicht vereinbar und macht wenig Sinn, da replace atomar sein sollte.

Die Frage: Wie kann ich Evil und Undo-Tree konfigurieren, um das Undo-Verhalten von Vim zu erhalten?

Tmalsburg
quelle
Hier können Sie ein Problem melden : bitbucket.org/lyro/evil/issues?status=new&status=open (Abweichungen von vim werden von Evil im Allgemeinen als Fehler angesehen.)
Shosti
@shosti, Sie haben Recht, aber das Vorhandensein der Anpassungsvariablen legt nahe, dass sie beschlossen haben, im vorliegenden Fall eine Ausnahme von dieser Regel zu machen. Ich werde trotzdem einen Fehler melden. Mal sehen was passiert.
Tmalsburg
Ich denke, die Anpassungsvariable soll tatsächlich mehr Emacs-ähnliches Rückgängigmachen bewirken (Emacs führt Atomoperationen nicht auf die gleiche Weise aus wie vim).
Shosti
Hier ist die neue Ausgabe: bitbucket.org/lyro/evil/issue/444/…
tmalsburg

Antworten:

10

Da @shosti darauf hinwies, dass Evil die Abweichung vom Vim-Verhalten als Fehler ansieht, habe ich einen Fehler gemeldet und einer der Autoren von Evil hat einen neuen möglichen Wert hinzugefügt für evil-want-fine-undo:

(setq evil-want-fine-undo 'fine)

Mit dieser Einstellung erhalten Sie neue Rückgängig-Einheiten, wenn Sie den Cursor im Einfügemodus bewegen. Ersetzungsvorgänge werden jedoch in einem Schritt rückgängig gemacht. Soweit ich das beurteilen kann, stimmt das mit Vim überein. Einzelheiten finden Sie hier .

Tmalsburg
quelle
2
Diese Lösung wird nicht mehr empfohlen, da die 'fineEinstellung veraltet ist.
Tmalsburg
1

Laut Variablenbeschreibung (siehe C-h v evil-want-fine-undo) wird der Wert fineaufgrund inkonsistenten Verhaltens nicht mehr unterstützt.

Da ich Undo verwende, um Tippfehler rückgängig zu machen, hat die erwähnte Einstellung meiner Zuteilung geholfen.

(setq evil-want-fine-undo t) 

Ich hatte Probleme Verhängnis Fehler in org-Tabelle Formelbearbeitung, da Sie nicht über die Insert - Modus verlassen müssen , wenn Sie ändern möchten *Edit Forumlas*mit C-'.

Jörn Reimerdes
quelle
Danke für das Update. Ich habe darum gebeten, dass das Problem bei Bitbucket wieder geöffnet wird.
Tmalsburg