ปุ่ม ESC ทำให้เกิดความล่าช้าเล็กน้อยในเทอร์มินัลเนื่องจากการทำงานของ Alt +


67

การตั้งค่าเทอร์มินัลของฉันคือ gnome-terminal + tmux + zsh ที่มีการเชื่อม vi

ในแอปพลิเคชันเช่นเสียงเรียกเข้าหรือแม้กระทั่งในโหมดแก้ไขบรรทัดคำสั่ง vi ของ zsh ฉันต้องกดปุ่มบ่อยครั้งESCแต่มีความล่าช้าเล็กน้อยก่อนที่ลักษณะพิเศษของคีย์นี้จะเกิดขึ้น ดูที่หน้าจอ GNU ทำให้ปุ่ม Vim ESC ทำงานช้า

หลังจากการทดลองบางอย่างผมพบว่าการกดปุ่มESCที่สำคัญและทันทีที่สำคัญอีก (พูดb) Alt+bมีผลเช่นเดียวกับการกดปุ่ม ฉันไม่รู้ว่าทำไมในกรณีนี้ (อาจเป็นเพราะเหตุผลดั้งเดิมเมื่อไม่มีAltหรือไม่ฉันไม่รู้) ไม่ว่าจะด้วยวิธีใดฉันมีสองAltปุ่มและฉันไม่ต้องการพฤติกรรมนี้ด้วยESCรหัสของฉัน ฉันได้ลองด้วยC+[และมันก็เป็นปัญหาเดียวกันกับที่เกินไป

ฉันไม่แน่ใจว่าใครเป็นผู้รับผิดชอบในเรื่องนี้ gnome-terminal หรือ tmux หรือระบบปฏิบัติการของฉันเอง (Ubuntu Natty) ความคิดใด ๆ เกี่ยวกับวิธีการแก้ไขปัญหานี้จะดีมาก

อัปเดต : ฉันตรวจสอบโดยไม่มี tmux บนเทอร์มินัลอื่น (LXTerminal) และมีการหน่วงเวลาที่นั่นด้วย


1
ฉันไม่สามารถเข้าใจได้ว่าทำไมกลุ่มของฉันถึงทำตัวแปลก ๆ คำถามนี้ทำให้ฉันจำได้ว่าฉันเพิ่งเริ่มใช้ภายในหน้าจอ คุณช่วยรักษาสติของฉัน
pabo

คำตอบ:


111

นี่คือการแก้ไขจริง เพิ่มรายการต่อไปนี้ใน.tmux.conf:

set -s escape-time 0

4
ยอดเยี่ยมขอบคุณ! มีความล่าช้าในการออกจากโหมดแทรกเป็นกลุ่มและไม่คิดว่ามันจะเป็นการรบกวน tmux นี่เป็นกลอุบาย
actionshrimp

7
ตามที่ระบุไว้ในsuperuser.com/questions/252214/…ฉันต้องทำเพื่อให้สิ่งtmux kill-serverนี้มีผล
PhilT

สำหรับทุกคนที่มาที่หน้านี้พยายามเข้าใจว่าเหตุใดจึงเกิดความล่าช้าเมื่อเปลี่ยนจากโหมดแทรกเป็นโหมดคำสั่งขณะใช้โหมด vi ใน bash ดูsuperuser.com/a/1161871/236677
Kvass

3
คุณสามารถโหลดไฟล์การกำหนดค่าโดยการเปิดพร้อมรับคำสั่งภายใน tmux กับtmux-prefix(ค่าเริ่มต้นCtrl+b) ตามด้วยป้อน: source-file $HOME/.tmux.conf
Folfy

7

ความล่าช้าเกิดจากรูทีนอินพุตที่อาจต้องตัดสินใจว่ากดปุ่มฟังก์ชันหรือไม่ สำหรับขั้นตอนการป้อนข้อมูลนี้จะเริ่มจับเวลาเมื่อใดก็ตามที่อ่านด้วยอักขระ ESC อักขระที่อ่านจากอินพุตก่อนที่ตัวจับเวลาจะหมด (สมมติว่าหนึ่งในสิบของสองวินาที) จะถูกแปลเป็น ESC ลำดับของฟังก์ชั่นคีย์และลำดับ ESC นี้จะถูกนำมาเปรียบเทียบกับสตริงที่รู้จักกันดีของ ESC secuences จาก terminfo หรือ termcap data base (ขึ้นอยู่กับกิจวัตรระดับต่ำที่ใช้)

แหล่งข้อมูลนี้น่ารำคาญสำหรับแอปพลิเคชันที่ใช้ ESC ด้วยตัวเอง แต่ฉันไม่ทราบวิธีแก้ปัญหาใด ๆ สำหรับสิ่งนี้

เกี่ยวกับคำถามของคุณเกี่ยวกับพฤติกรรมของESC a= Meta a:

แป้น Meta ไม่สามารถใช้ได้กับแป้นพิมพ์ทั้งหมด เพื่อแก้ไขปัญหามันมักจะได้รับอนุญาตให้ใช้ปุ่ม ESC เพื่อกดก่อนปุ่มอื่น


ขอบคุณสำหรับคำอธิบาย ktf ความล่าช้าไม่ได้อยู่ใน gvim เฉพาะใน terminal (ฉันตรวจสอบโดยไม่ต้อง tmux และความล่าช้ายังคงอยู่ที่นั่น)
Shrikant Sharat

gvim ไม่ประสบปัญหานี้เนื่องจากได้รับข้อมูลที่กดคีย์จากเซิร์ฟเวอร์ X11 (ดังนั้นจึงไม่ต้องแยกวิเคราะห์ลำดับของ ESC)
ktf

ตกลงดังนั้นฉันต้องทำให้ gnome-terminal ของฉันทำงานในลักษณะเดียวกันแล้ว
Shrikant Sharat

gnome-terminal ไม่ใช่ปัญหา - ปัญหาที่อธิบายมีผลกับโปรแกรมที่เรียกใช้บนเทอร์มินัลเท่านั้น (หรือในการจำลองเทอร์มินัล) และต้องแยกคีย์ฟังก์ชัน คุณจะได้สัมผัสกับพฤติกรรมเดียวกันหากลองใช้xtermหรือ KDE-Terminal
ktf

2
"คีย์ Meta ไม่สามารถใช้ได้กับแป้นพิมพ์ทั้งหมดเนื่องจากวิธีแก้ปัญหามักจะได้รับอนุญาตให้ใช้แป้น ESC เพื่อกดก่อนปุ่มอื่น ๆ " บางทีแม้กระทั่งการคาดการณ์ล่วงหน้า ttys มักจะมีอินเตอร์เฟสข้อมูลเจ็ดบิตเท่านั้น ไม่มีเมตาดาต้าที่แปดดังนั้นคุณต้องส่ง ESC สำหรับ Meta และทุกวันนี้ UTF-8 แพร่หลายดังนั้นแม้จะมีการเชื่อมต่อแบบแปดบิตคุณก็ไม่สามารถใช้เมตาบิตสูงสำหรับ Meta ได้
Chris Page

3

แม้ว่าสิ่งนี้อาจไม่สามารถแก้ไขปัญหาของคุณได้โดยตรง แต่ฉันพบว่าฉันสามารถใช้<Ctrl> cเพื่อออกจากโหมดแทรกได้ สิ่งนี้ยังสามารถใช้เพื่อออกจากการเลื่อนหน้าจอของ tmux (ซึ่งสามารถเรียกใช้โดยใช้<leader> PgUP)


3
ฉันจะไม่แนะนำให้ใช้<C-c>เพื่อออกจากโหมดแทรกในการใช้งานปกติเพราะมันไม่ได้เรียกใช้การเติมข้อความอัตโนมัติและInsertLeaveปลั๊กอินบางตัวอาจจะดู :h i_CTRL-Cดู
Shrikant Sharat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.