เป็นกลุ่มแขวนบนหนี


3

เมื่อฉันตี esc หรือ Ctrl-[ ในโหมดแทรกเป็นกลุ่มมันค้างประมาณครึ่งวินาทีก่อนออกจากโหมดแทรก มันไม่ได้เป็นแฮงค์ประสิทธิภาพรากเพราะฉันสามารถพิมพ์ตัวละครใด ๆ และเสียงเรียกเข้าจะออกจากโหมดแทรกทันที แต่ถ้าฉันกด esc และไม่มีอะไรอื่นเป็นกลุ่มจะรอครึ่งวินาที

ฉันเชื่อว่านี่เป็นเพราะมีกุญแจอื่น ๆ ที่มีผลผูกพันกับ esc และเป็นกลุ่มรอเพื่อดูว่าฉันตีมัน ข้อสงสัยนี้ถูกบังคับใช้อีกครั้งโดยความจริงที่ว่าเมื่อฉัน set notimeoutกลุ่มจะรอให้ฉันกดคีย์อื่นก่อนโหมดแทรกที่มีอยู่ มันค่อนข้างน่ารำคาญเพราะบางครั้งฉันก็อยากได้ notimeout ชุด

ไม่มีใครรู้วิธีการทำ esc ดำเนินการทันทีหรือไม่ มีการเชื่อมโยงคีย์อื่น ๆ ที่ขึ้นต้นด้วย esc ฉันจะปิดได้ไหม

สำหรับสิ่งที่คุ้มค่า :map <Esc> และ :imap <Esc> ผล No mapping foundและฉันสามารถทำซ้ำสิ่งนี้ได้ในการติดตั้ง vim แบบใหม่โดยไม่ต้องใช้ .vimrc หรือ .vim ปัจจุบัน.


1
อาจเป็นเพราะตัวละครการหลบหนีเป็นส่วนหนึ่งของ ผู้แนะนำลำดับคำสั่ง
RedGrittyBrick

นั่นมีโอกาส มีวิธีบอก vim ให้ละเว้นลำดับคำสั่งดังกล่าวหรือไม่?
So8res

ไม่เพราะคีย์อื่นจำนวนมากจะไม่ทำงาน
Ignacio Vazquez-Abrams

สถานะของ & lt; Esc & gt; ในลำดับคำสั่งดังกล่าวจะไม่ก่อให้เกิดปัญหานี้ Vim จัดการเวลาของ & lt; Esc & gt; ในลำดับเหล่านั้นแตกต่างจากที่จับ & lt; Esc & gt; ที่จุดเริ่มต้นของการแมป ดู ": ความช่วยเหลือ 'หมดเวลา'" ลองเรียกใช้งาน ": imap & lt; Esc & gt;" เพื่อดูว่าคุณมีการแมปโหมดแทรกเริ่มต้นด้วย & lt; Esc & gt;
garyjohn

No mappings found. ฉันค่อนข้างแน่ใจว่ามันเกี่ยวข้องกับ timeout เพราะเมื่อฉัน set notimeout ปัญหาแย่กว่านั้นมาก แต่ดูเหมือนจะไม่มีการแมป (ฉันสามารถทำซ้ำได้ด้วยการติดตั้งใหม่ / no .vimrc / no .vim ด้วย FWIW)
So8res

คำตอบ:


3

หลายแป้นรวมถึงแป้นลูกศรส่งลำดับการยกเว้น ดังนั้นเพื่อให้ปุ่มเหล่านี้ทำงาน vim ต้องตรวจสอบอักขระเพิ่มเติมตาม ESC เพื่อพิจารณาว่ามีการกดแป้นใดแป้นหนึ่งเหล่านี้หรือไม่ โดยค่าเริ่มต้นการหมดเวลาลำดับหนีและหมดเวลาลำดับแมปจะถูกควบคุมโดย timeoutlen การตั้งค่าซึ่งเริ่มต้นที่ 1,000 ms อย่างไรก็ตามเป็นกลุ่มอนุญาตให้หมดเวลาใช้งานลำดับ escape โดยอิสระ ttimeoutlen. (ตั้งค่าด้วย ttimeout หากคุณต้องการให้มันมีผลแม้ว่า timeout ปิดอยู่) หากคุณไม่ต้องการพิมพ์ escape sequences ด้วยตนเองหรือคุณใช้โมเด็ม 110 baud คุณไม่ควรมีปัญหาใด ๆ ในการลด time escape sequence ตัวอย่างการใช้งาน :set ttimeoutlen=100 เพื่อตั้งค่าไทม์เอาต์ลำดับ escape เป็น 100 ms นอกจากนี้คุณยังสามารถปิดการใช้งานการรับรู้ของลำดับหนีเมื่ออยู่ในโหมดแทรกโดยใช้ :set noesckeys.


สำหรับการกำหนดค่า vim ของฉัน (ฉันรวบรวม Vim ของฉันจากแหล่งที่มา) ttimeoutlen ได้รับการตั้งค่าเป็น -1 ซึ่งหมายความว่ามันจะใช้ 1000ms timeoutlen สำหรับทุกอย่าง. ฉันตั้งค่าเป็น (ค่อนข้างก้าวร้าว) 5ms และตอนนี้ในที่สุดมันก็ปลอดจาก "การหลบหนีที่เหนียว"
Steven Lu

1

ฉันมีปัญหาที่คล้ายกันซึ่งกลุ่มจะแขวนไปเรื่อย ๆ หลังจากกดปุ่ม ESC อันที่จริงมันกำลังรอตัวละครมากขึ้น - คำตอบของคุณทำให้ฉันอยู่ในขบวนการคิด!

มันกลับกลายเป็นว่ามันเป็นปัญหาของตัวละคร ESC แต่แตกต่างกัน ฉันเรียกใช้เป็นกลุ่มภายใน tmux ฉันตัดสินใจตรวจสอบตัวแปรสภาพแวดล้อม "TERM" และตั้งค่าเป็น 'หน้าจอ' การเปลี่ยนการตั้งค่า TERM เป็น 'xterm-color' (หรืออะไรก็ตามที่เหมาะสมกับระบบของคุณ) ทำให้ปัญหา vim ที่แขวนอยู่หายไป

ไม่แน่ใจว่าใช้ได้กับสถานการณ์ของคุณ แต่เนื่องจาก googling สำหรับปัญหานี้เปิดใช้งาน คำตอบของ mark4o ในผลการค้นหาอันดับต้น ๆ ได้ตัดสินใจเพิ่มสถานการณ์ที่เป็นไปได้เช่นกันสำหรับผู้อื่น


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