เมื่อใช้u
หรือCTL-R
เลิกทำการแก้ไขหรือทำซ้ำเป็นกลุ่มฉันดูเหมือนจะเปลี่ยนข้อความเป็นข้อความไม่ใช่แค่การกดแป้นพิมพ์ครั้งล่าสุด
อะไรเป็นตัวกำหนดขนาดของก้อนที่ถือว่าเป็นการแก้ไขครั้งเดียว?
เมื่อใช้u
หรือCTL-R
เลิกทำการแก้ไขหรือทำซ้ำเป็นกลุ่มฉันดูเหมือนจะเปลี่ยนข้อความเป็นข้อความไม่ใช่แค่การกดแป้นพิมพ์ครั้งล่าสุด
อะไรเป็นตัวกำหนดขนาดของก้อนที่ถือว่าเป็นการแก้ไขครั้งเดียว?
คำตอบ:
undo-blocks
คุณกำลังมองหาคำจำกัดความของ
จาก:h undo-blocks
:
หนึ่งคำสั่งเลิกทำปกติเลิกทำคำสั่งที่พิมพ์ไม่ว่าจะมีการเปลี่ยนแปลงคำสั่งกี่ครั้งก็ตาม ลำดับการเปลี่ยนแปลงที่เลิกทำการได้นี้จะสร้างบล็อกเลิกทำ ดังนั้นหากคีย์ที่พิมพ์เรียกฟังก์ชันคำสั่งทั้งหมดในฟังก์ชันจะถูกเลิกทำร่วมกัน
redo
บล็อกเดียวกันจะใช้สำหรับการ จาก:h redo
:
การเปลี่ยนแปลงครั้งสุดท้ายจะถูกจดจำ คุณสามารถใช้คำสั่งเลิกทำและทำซ้ำด้านบนเพื่อเปลี่ยนข้อความกลับเป็นแบบเดิมก่อนการเปลี่ยนแปลงแต่ละครั้ง นอกจากนี้คุณยังสามารถใช้การเปลี่ยนแปลงอีกครั้งได้รับข้อความก่อนเลิกทำ
การแก้ไขคำกริยาที่เป็นกลุ่มมักจะมองว่าเป็นผู้ประกอบการ (เช่น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 ในเรื่องนี้:
คุณสามารถคิดได้ด้วยวิธีนี้เช่นกันทุกครั้งที่คุณเข้าสู่โหมดแทรกเพื่อแก้ไขข้อความและกดปุ่มEscซึ่งจะกลายเป็นบล็อก หากคุณพยายามยกเลิกการบล็อกนั้นคุณจะไปที่ตำแหน่งเดิมก่อนที่คุณจะเข้าสู่โหมดแทรก
ดังนั้นคุณสามารถ "บันทึก" การเปลี่ยนแปลงของคุณเพียงแค่ออกจากโหมดแทรกเป็นครั้งคราว: สมมติว่าคุณไปที่โหมดแทรกและเขียนฟังก์ชั่น คุณสามารถเขียนโค้ดต่อไปและไปยังฟังก์ชั่นถัดไปได้ แต่บางครั้งก็ควรกลับไปใช้โหมดปกติแล้วเปลี่ยนเป็นโหมดแทรกอีกครั้ง ด้วยวิธีนี้คุณสามารถจัดโครงสร้างโค้ดของคุณได้อย่างง่ายดายและหากคุณต้องการย้อนกลับไปคุณสามารถรู้ได้ว่าตำแหน่งใดที่คุณจะต้องจบลง
หมายเหตุ: หากคุณใช้ลูกศรสำหรับเคลื่อนย้ายก็เหมือนกับว่าคุณกดEsc+ [ hjkl]
CTRL-G u
ในโหมดแทรกซึ่งมีประโยชน์หากคุณมีมาโครโหมดแทรกบางอัน