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?