ฉันจะเลิกพฤติกรรมใน Evil ได้อย่างไรเหมือนกับ Vim


17

พฤติกรรมการเลิกทำที่เป็นค่าเริ่มต้นใน Evil นั้นหยาบเกินไปเพราะจะพิจารณาสิ่งใด ๆ ที่เกิดขึ้นระหว่างการเข้าสู่โหมดแทรกและปล่อยให้มันเป็นการดำเนินการแก้ไขเดียว เมื่อคุณป้อนทั้งย่อหน้าของข้อความในระหว่างการแทรกหนึ่งครั้งจากนั้นดำเนินการเลิกทำทั้งย่อหน้าจะถูกลบออก ในทางตรงกันข้าม Vim จะเริ่มการเลิกทำหน่วยใหม่เมื่อใดก็ตามที่คุณเลื่อนเคอร์เซอร์ในโหมดแทรกโดยใช้วิธีอื่นนอกเหนือจากการป้อนข้อความ

Evil มีตัวแปรการปรับแต่งที่สามารถใช้เพื่อรับประวัติเลิกทำที่ละเอียดยิ่งขึ้น:

(setq evil-want-fine-undo t)

ด้วยการตั้งค่านี้ Evil จะเริ่มการเลิกทำหน่วยใหม่เมื่อเคอร์เซอร์ถูกย้ายในโหมดแทรกเช่นเดียวกับ Vim อย่างไรก็ตามการตั้งค่านี้ยังยุ่งกับวิธีการจัดการการแทนที่: หากคุณแทนที่คำที่ใช้cwคุณต้องเลิกทำสองครั้งเพื่อคืนค่าคำเดิม: หนึ่งครั้งสำหรับการลบคำใหม่และอีกครั้งสำหรับการแทรกคำเดิม สิ่งนี้ไม่สอดคล้องกับ Vim และไม่สมเหตุสมผลเนื่องจากการแทนที่ควรเป็นแบบอะตอมมิก

คำถาม: ฉันจะกำหนดค่า Evil และ undo-tree ได้อย่างไรเพื่อรับพฤติกรรมการยกเลิกของ Vim


ยื่นปัญหาที่นี่: bitbucket.org/lyro/evil/issues?status=new&status=open (ความชั่วร้ายโดยทั่วไปพิจารณาการเบี่ยงเบนจากกลุ่มเป็นกลุ่ม)
shosti

@shosti คุณพูดถูก แต่การมีอยู่ของตัวแปรการกำหนดเองแนะนำว่าพวกเขาตัดสินใจที่จะยกเว้นกฎนั้นในกรณีปัจจุบัน ฉันจะยื่นข้อบกพร่องต่อไป มาดูกันว่าเกิดอะไรขึ้น
tmalsburg

ฉันคิดว่าตัวแปรการปรับแต่งนั้นจริง ๆ แล้วจะได้รับพฤติกรรมการเลิกทำเหมือน Emacs มากขึ้น (Emacs ไม่ได้ดำเนินการปรมาณูในลักษณะเดียวกับ vim)
shosti

นี่คือปัญหาใหม่: bitbucket.org/lyro/evil/issue/444/…
tmalsburg

คำตอบ:


10

ตั้งแต่ @shosti ชี้ให้เห็นว่า Evil พิจารณาการเบี่ยงเบนจากพฤติกรรม Vim เป็นข้อบกพร่องฉันจึงยื่นข้อบกพร่องและหนึ่งในผู้เขียนของ Evil ได้เพิ่มคุณค่าที่เป็นไปได้ใหม่สำหรับevil-want-fine-undo:

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

ด้วยการตั้งค่านี้คุณจะได้รับหน่วยเลิกทำใหม่เมื่อเลื่อนเคอร์เซอร์ในโหมดแทรก แต่การแทนที่การดำเนินการจะถูกยกเลิกในขั้นตอนเดียว เท่าที่ฉันสามารถบอกได้ว่าสิ่งนี้สอดคล้องกับเสียงเรียกเข้า ดูรายละเอียดที่นี่


2
ไม่แนะนำให้ใช้โซลูชันนี้อีกต่อไปเนื่องจากการ'fineตั้งค่าถูกเลิกใช้แล้ว
tmalsburg

1

ตามคำอธิบายตัวแปร (ดูC-h v evil-want-fine-undo) ค่าfineไม่ได้รับการสนับสนุนอีกต่อไปเนื่องจากพฤติกรรมที่ไม่สอดคล้องกัน

เนื่องจากฉันใช้เลิกทำเพื่อเลิกพิมพ์ผิดหรือการตั้งค่าดังกล่าวช่วยให้ฉันแจก

(setq evil-want-fine-undo t) 

ผมมีข้อผิดพลาดหายนะปัญหาในการแก้ไขสูตร org ตารางเนื่องจากคุณจะได้ไม่ต้องออกจากโหมดแทรกถ้าคุณต้องการที่จะเปลี่ยนไปด้วย*Edit Forumlas*C-'


ขอบคุณสำหรับการอัพเดท. ฉันขอให้เปิดปัญหาของ Bitbucket อีกครั้ง
tmalsburg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.