เลิกทำในโหมดแทรก


23

มีคำสั่งให้เลิกทำการดำเนินการครั้งล่าสุดเมื่ออยู่ในโหมดแทรกหรือไม่?

ฉันเพิ่งวางข้อความจากการลงทะเบียนผิดโดยใช้<C-r>และฉันมีสองตัวเลือก:

  1. ลบด้วยมือสิ่งที่ฉันเพิ่งวางและเริ่มต้นใหม่
  2. สลับไปที่โหมดปกติตีและสูญเสียข้อความที่ผมพิมพ์ก่อนกดปุ่มu<C-r>

มีวิธีที่ดีกว่า?

คำตอบ:


16

Vim มีความสามารถที่ จำกัด ในการระบุขอบเขตของการเปลี่ยนแปลงCtrl-G uที่ยกเลิกได้ด้วยคำสั่งซึ่งแบ่งลำดับการเลิกทำ ดู

:help i_CTRL-G_u

ในกรณีของคุณโซลูชันจะทำการแมปใหม่<C-R>ดังนี้:

:inoremap <C-R> <C-G>u<C-R>

จากนั้นพิมพ์จะยกเลิกเพียงการเปลี่ยนแปลงที่ทำตั้งแต่คุณพิมพ์<C-O>u <C-R>ดู

:help i_CTRL-O

1
มันเยี่ยมมากฉันไม่รู้เกี่ยวกับคำสั่งนี้ มีการหน่วงเวลาค่อนข้างนานระหว่างการพิมพ์<C-O>uและการดูผลลัพธ์บนหน้าจอ (ประมาณ 4 วินาที) ความคิดใด ๆ ที่ฉันจะกำจัดออกได้อย่างไร
สวนสัตว์

ฉันสังเกตเห็นเช่นกัน ฉันไม่รู้ ฉันจะพยายามหาคำตอบ
garyjohn

เฮ้มันเป็นไปได้ไหมที่คุณหมายถึง <CR> (การคืนรถ) แทนที่จะเป็น <CR> (ctrl-r)?
Derwent

ไม่ได้คำถามดั้งเดิมเกี่ยวข้องกับพฤติกรรมของ <CR> นั่นคือสิ่งที่ใช้ในการทำแผนที่ อย่างไรก็ตามคุณสามารถแทนที่ <CR> ด้วย <CR> ในการจับคู่นั้นเพื่อให้ลำดับการเลิกทำการขัดจังหวะด้วย <CR> แทน ตัวอย่างอื่น ๆ :help i_CTRL-G_uอาจจะพบว่า
garyjohn

6

จากโหมดแทรก:

  1. หากข้อความที่วางของคุณมีขนาดเล็กกว่าหนึ่งบรรทัด (ซึ่งเป็นจุดที่ 2 ของคุณหมายถึง) เพียงกด<C-u>เพื่อลบอักขระทั้งหมดก่อนเคอร์เซอร์ในบรรทัดปัจจุบัน

  2. หากข้อความที่วางเป็นมากกว่าหนึ่งบรรทัดวิธีการแก้ปัญหาที่ 2 <C-o>uของคุณจะทำงานได้ดีเหมาะดังนี้

จุดทั้งสองข้างต้นจะเริ่มต้นและอยู่ - หรือจบ - ในโหมดแทรก; พวกเขาเหมือนกันกับโซลูชันที่คุณเสนอให้สั้นลง :)


6

คุณสามารถลอง<C-w>(ลบคำทางซ้าย) หรือ<C-u>(ล้างตัวอักษรก่อนเคอร์เซอร์เมื่อกดหนึ่งครั้งลบ linebreak เมื่อกดครั้งที่สอง) ดูและ:help i_CTRL-W:help i_CTRL-U

หากคุณวางจำนวนมากจากการลงทะเบียนแน่นอนว่าเร็วกว่าเพื่อยกเลิกการเปลี่ยนแปลงของคุณคุณสามารถใช้โหมดแทรกปกติได้ด้วย<C-o>(เรียกใช้งานคำสั่งโหมดปกติหนึ่งโหมดจากนั้นกลับไปที่โหมดแทรก)

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

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