เสียงเรียกเข้าเป็นตัวกำหนดขนาดของ“ การแก้ไข” เดี่ยวเมื่อใช้“ u” และ“ CTL-R”


17

เมื่อใช้uหรือCTL-Rเลิกทำการแก้ไขหรือทำซ้ำเป็นกลุ่มฉันดูเหมือนจะเปลี่ยนข้อความเป็นข้อความไม่ใช่แค่การกดแป้นพิมพ์ครั้งล่าสุด

อะไรเป็นตัวกำหนดขนาดของก้อนที่ถือว่าเป็นการแก้ไขครั้งเดียว?

คำตอบ:


19

undo-blocksคุณกำลังมองหาคำจำกัดความของ

จาก:h undo-blocks:

หนึ่งคำสั่งเลิกทำปกติเลิกทำคำสั่งที่พิมพ์ไม่ว่าจะมีการเปลี่ยนแปลงคำสั่งกี่ครั้งก็ตาม ลำดับการเปลี่ยนแปลงที่เลิกทำการได้นี้จะสร้างบล็อกเลิกทำ ดังนั้นหากคีย์ที่พิมพ์เรียกฟังก์ชันคำสั่งทั้งหมดในฟังก์ชันจะถูกเลิกทำร่วมกัน

redoบล็อกเดียวกันจะใช้สำหรับการ จาก:h redo:

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


4
คุณยังสามารถแยกการเลิกบล็อกเดี่ยวด้วยตนเองด้วยคำสั่งCTRL-G uในโหมดแทรกซึ่งมีประโยชน์หากคุณมีมาโครโหมดแทรกบางอัน
fruglemonkey

8

การแก้ไขคำกริยาที่เป็นกลุ่มมักจะมองว่าเป็นผู้ประกอบการ (เช่นc, d, ... ) นำไปใช้ในช่วงการเคลื่อนไหว (เช่นiw, w, }, ... ) ในฐานะที่เป็นผลิตภัณฑ์ที่ยอดเยี่ยมเป็นกลุ่มได้รับการยกเลิกการเป็นก้อน ในกรณีที่ผู้แก้ไขรายอื่นต้องคาดเดาว่าจะทำให้การเลิกทำเล็ก ๆ น้อย ๆ กลายเป็นการเลิกบล็อกได้ Vim ทำสิ่งนี้ตามธรรมชาติ ผลข้างเคียงอีกอย่างหนึ่งคือสิ่งนี้จะให้ตัวดำเนินการซ้ำ.(aka คำสั่ง dot)

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

บางครั้งจำเป็นต้องแบ่งบล็อกเลิกทำขณะอยู่ในโหมดแทรก สามารถทำได้ผ่าน<c-g>uในขณะที่อยู่ในโหมดแทรก ดู:h :undojและ:h undo-blocksสำหรับข้อมูลเพิ่มเติม

สำหรับความช่วยเหลือเพิ่มเติมฉันขอแนะนำสิ่งต่อไปนี้:

:h undo-blocks
:h :undoj
:h undo-tree
:h persistent-undo
:h undo.txt

นอกจากนี้ยังมี screencasts ในเรื่องนี้:


"Chunky undo" - คำอธิบายที่ดีที่สุดที่ฉันเคยเห็น
Matt Parker

6

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

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

หมายเหตุ: หากคุณใช้ลูกศรสำหรับเคลื่อนย้ายก็เหมือนกับว่าคุณกดEsc+ [ hjkl]

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