Hành vi hoàn tác mặc định trong Evil quá phức tạp vì nó xem xét mọi thứ diễn ra giữa khi vào chế độ chèn và để nó như một thao tác chỉnh sửa. Khi bạn nhập toàn bộ đoạn văn bản trong một lần chèn và sau đó thực hiện hoàn tác, toàn bộ đoạn văn sẽ bị xóa. Ngược lại, Vim bắt đầu một đơn vị hoàn tác mới bất cứ khi nào bạn di chuyển con trỏ ở chế độ chèn bằng phương tiện khác ngoài việc nhập văn bản.
Evil có một biến tùy chỉnh có thể được sử dụng để có được lịch sử hoàn tác chi tiết hơn:
(setq evil-want-fine-undo t)
Với cài đặt này, Evil bắt đầu một đơn vị hoàn tác mới khi con trỏ được di chuyển trong chế độ chèn, giống như Vim. Tuy nhiên, cài đặt này cũng gây rối với cách xử lý thao tác thay thế: nếu bạn thay thế một từ bằng cách sử dụng cw
, bạn phải hoàn tác hai lần để khôi phục từ gốc: một lần để xóa từ mới và một lần để xác nhận lại từ gốc. Điều này không phù hợp với Vim và không có ý nghĩa nhiều vì thay thế nên là nguyên tử.
Câu hỏi: Làm cách nào tôi có thể định cấu hình Evil và undo-tree để có được hành vi hoàn tác của Vim?