Làm cách nào tôi có thể hoàn tác hành vi trong Evil tương tự như Vim?


17

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?


Gửi một vấn đề ở đây: bitbucket.org/lyro/evil/issues?status=new&status=open (Evil thường coi sự khác biệt từ vim là lỗi).
shosti

@shosti, bạn đúng nhưng sự tồn tại của biến tùy chỉnh cho thấy họ quyết định tạo một ngoại lệ cho quy tắc đó trong trường hợp hiện tại. Dù sao tôi cũng sẽ báo lỗi. Hãy xem điều gì xảy ra.
tmalsburg

Tôi nghĩ rằng biến tùy chỉnh thực sự là để có thêm hành vi hoàn tác giống như Emacs (Emacs không thực hiện các hoạt động nguyên tử theo cách tương tự như vim).
shosti

Đây là vấn đề mới: bitbucket.org/lyro/evil/su/444/
Kẻ

Câu trả lời:


10

Vì @shosti chỉ ra rằng Evil coi sự sai lệch so với hành vi của Vim là lỗi, tôi đã gửi một lỗi và một trong những tác giả của Evil đã thêm một giá trị mới có thể cho evil-want-fine-undo:

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

Với cài đặt này, bạn nhận được các đơn vị hoàn tác mới khi di chuyển con trỏ ở chế độ chèn, nhưng các thao tác thay thế được hoàn tác trong một bước. Theo như tôi có thể nói điều này phù hợp với Vim. Xem ở đây để biết chi tiết.


2
Giải pháp này không còn được khuyến nghị nữa vì 'finecài đặt đã không được chấp nhận.
tmalsburg

1

Theo mô tả biến (xem C-h v evil-want-fine-undo) giá trị finekhông được hỗ trợ nữa do hành vi không nhất quán.

Khi tôi sử dụng hoàn tác để hoàn tác lỗi chính tả hoặc cài đặt được đề cập đã giúp phân bổ của tôi.

(setq evil-want-fine-undo t) 

Tôi có lỗi hoàn tác rắc rối trong chỉnh sửa công thức org-bàn, vì bạn không cần phải rời khỏi chế độ chèn nếu bạn muốn thay đổi để *Edit Forumlas*C-'.


Cảm ơn các cập nhật. Tôi yêu cầu vấn đề trên Bitbucket được mở lại.
tmalsburg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.