Bagaimana saya bisa mendapatkan perilaku undo di Evil mirip dengan Vim?

17

Perilaku default undo di Evil terlalu kasar karena menganggap apa pun yang terjadi antara memasuki mode insert dan membiarkannya sebagai operasi edit. Saat Anda memasukkan seluruh paragraf teks selama satu sisipan dan kemudian menjalankan undo, seluruh paragraf dihapus. Berbeda dengan itu, Vim memulai unit undo baru setiap kali Anda memindahkan kursor dalam mode sisipan dengan cara selain memasukkan teks.

Evil memiliki variabel kustomisasi yang dapat digunakan untuk mendapatkan riwayat undo berbutir halus:

(setq evil-want-fine-undo t)

Dengan pengaturan ini, Evil memulai unit undo baru ketika kursor dipindahkan dalam mode insert, sama seperti Vim. Namun, pengaturan ini juga kacau dengan bagaimana operasi penggantian ditangani: jika Anda mengganti kata menggunakan cw, Anda harus membatalkan dua kali untuk mengembalikan kata asli: sekali untuk menghapus kata baru dan sekali lagi untuk memasukkan kembali kata aslinya. Ini tidak konsisten dengan Vim dan tidak masuk akal karena ganti harus atom.

Pertanyaannya: Bagaimana saya bisa mengkonfigurasi Evil dan undo-tree untuk mendapatkan perilaku undo Vim?

tmalsburg
sumber
Ajukan masalah di sini: bitbucket.org/lyro/evil/issues?status=new&status=open (Kejahatan umumnya menganggap penyimpangan dari vim sebagai bug).
shosti
@shosti, Anda benar tetapi keberadaan variabel penyesuaian menyarankan bahwa mereka memutuskan untuk membuat pengecualian terhadap aturan itu dalam kasus ini. Saya akan mengajukan bug. Mari lihat apa yang terjadi.
tmalsburg
Saya pikir variabel kustomisasi sebenarnya untuk mendapatkan lebih banyak perilaku undo seperti Emacs (Emacs tidak melakukan operasi atom dengan cara yang sama seperti vim).
shosti
Berikut masalah baru: bitbucket.org/lyro/evil/issue/444/...
tmalsburg

Jawaban:

10

Karena @shosti menunjukkan bahwa Evil menganggap penyimpangan dari perilaku Vim sebagai bug, saya mengajukan bug dan salah satu penulis Evil menambahkan nilai baru yang mungkin untuk evil-want-fine-undo:

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

Dengan pengaturan ini, Anda mendapatkan unit undo baru saat memindahkan kursor dalam mode insert, tetapi operasi penggantian dibatalkan dalam satu langkah. Sejauh yang saya tahu ini konsisten dengan Vim. Lihat di sini untuk detailnya.

tmalsburg
sumber
2
Solusi ini tidak lagi direkomendasikan karena 'finepengaturannya sudah usang.
tmalsburg
1

Menurut deskripsi variabel (lihat C-h v evil-want-fine-undo) nilai finetidak didukung lagi karena perilaku yang tidak konsisten.

Karena saya menggunakan undo to undo typos atau pengaturan yang disebutkan membantu membagikan saya.

(setq evil-want-fine-undo t) 

Aku punya kesalahan kehancuran kesulitan dalam org-tabel rumus editing, karena Anda tidak harus meninggalkan modus insert jika Anda ingin mengubah ke *Edit Forumlas*dengan C-'.

Jörn Reimerdes
sumber
Terima kasih atas pembaruannya. Saya meminta agar masalah di Bitbucket dibuka kembali.
tmalsburg