El comportamiento de deshacer predeterminado en Evil es demasiado complejo porque considera que ocurre algo entre ingresar al modo de inserción y dejarlo como una operación de edición. Cuando ingresa un párrafo completo de texto durante una inserción y luego ejecuta deshacer, se elimina todo el párrafo. En contraste con eso, Vim inicia una nueva unidad de deshacer cada vez que mueve el cursor en modo de inserción por otro medio que no sea ingresar texto.
Evil tiene una variable de personalización que se puede usar para obtener un historial de deshacer más detallado:
(setq evil-want-fine-undo t)
Con esta configuración, Evil inicia una nueva unidad de deshacer cuando el cursor se mueve en modo de inserción, al igual que Vim. Sin embargo, esta configuración también interfiere con la forma en que se maneja la operación de reemplazo: si reemplaza una palabra usando cw
, debe deshacer dos veces para restaurar la palabra original: una para eliminar la nueva palabra y otra para volver a insertar la palabra original. Esto es inconsistente con Vim y no tiene mucho sentido porque el reemplazo debe ser atómico.
La pregunta: ¿Cómo puedo configurar Evil y undo-tree para obtener el comportamiento de deshacer de Vim?