การใช้ ctrl + c แทนที่จะเป็น esc เพื่อออกจากโหมดแทรกจะทำลายทุกอย่างใน vi หรือไม่?


15

เมื่อใช้ vi คุณสามารถออกจากโหมดที่มีแทรกCtrl+ แทนแบบดั้งเดิมมากขึ้นC Escมีสถานการณ์ใดบ้างที่ไม่พึงปรารถนาที่จะใช้สำหรับอดีตแทนสถานการณ์หลัง? มันทำลายสิ่งอื่นใดนอกจากแนวปฏิบัติที่ดีที่สุดหรือไม่?


มันไม่เป็นที่พึงปรารถนาที่จะตีอดีตโดยไม่ได้ตั้งใจซึ่งทำให้คุณได้รับข้อผิดพลาดType :quit<Enter> to exit Vimและทำให้ฉัน Google เป็นวิธีการกลับมา การกดปุ่มiทำให้คุณกลับไปสู่โหมดแทรกได้ทันที
Noumenon

คำตอบ:


9

Ctrl-CและEscไม่เหมือนกันในvi/ vimในโหมดส่วนใหญ่รวมถึงโหมดแทรก ความแตกต่างคือEscต้นเหตุของการย่อในขณะที่Ctrl-cไม่ เรื่องนี้ขึ้นอยู่กับคุณว่าคุณหรือปลั๊กอินใด ๆ ที่คุณใช้ใช้ประโยชน์จากตัวย่อ


หมายเหตุว่ามันจะปลอดภัยกว่าที่จะคิดEscและCtrl-Cทำไม่ได้vimหมายถึงสิ่งเดียวกันใน อีกตัวอย่างจากไซต์เดียวกันนี้คือเมื่อออกจากโหมดแทรกบล็อก (ไม่ใช่ในvi)


เป็นการดีที่จะรู้ แต่คำถามของฉันเกี่ยวกับการออกจากโหมดแทรก
MDMarra

@MDMarra Doh อ่านคำถามของคุณผิด โหมดแทรกยังคงแตกต่าง: ดูคำตอบที่อัพเดต
jw013

1
นี่คือความแตกต่างที่สำคัญที่สุดที่ฉันต้องจัดการ: multiline insert ด้วยโหมด visual block ทำงานร่วมกับ Esc และไม่ใช่กับ Cc
enfascination

4

ฉันคิดว่าคุณหมายถึงไม่ได้vimvi

มันใช้งานได้จริงvimแม้ว่าฉันจะไม่ใช้มันเว้นแต่ฉันจะแน่ใจ 100% ว่าฉันจะไม่แตะต้องระบบปฏิบัติการที่ไม่ใช่ Linux เลย เหตุผลก็คือระบบปฏิบัติการอื่นอาจมีการใช้งานของตัวเองviซึ่งไม่ได้ใช้สิ่งนี้และคุณอาจพบว่าเมื่อทำงานviบนแพลตฟอร์มเหล่านั้น Ctrl-C มีพฤติกรรมแบบดั้งเดิมของตัวเอง: ขัดจังหวะกระบวนการและทำให้เครื่องอยู่ในสถานะแปลก .


3
คุณสามารถชี้ไปที่ใด ๆviการดำเนินงานที่ยังคงมีอยู่ในวันนี้ว่าไม่ได้จัดการCtrl-C? ดูคำตอบของฉันสำหรับความแตกต่างที่แท้จริง
jw013

2

หากคุณอ้างถึงvimมีความแตกต่างเล็กน้อย CTRL-Cไม่ตรวจสอบตัวย่อและจะไม่ทำให้เกิดInsertLeaveเหตุการณ์ ดังนั้นคุณหรือปลั๊กอินจึงได้กำหนดautocmdคำสั่งใด ๆที่ขึ้นอยู่กับInsertLeaveพวกเขาจะไม่ถูกเรียก

จากเอกสารอย่างเป็นทางการhttp://vimhelp.appspot.com/insert.txt.html :

<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode.  Finish
                abbreviation.

CTRL-C          Quit insert mode, go back to Normal mode.  Do not check for
                abbreviations.  Does not trigger the InsertLeave autocommand
                event.

คุณสามารถกำหนดทำแผนที่สำหรับCTRL-Cไปแล้วมันจะเรียก<esc>InsertLeave

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