การจับคู่ Gnome-terminal + Vim และ Ctrl-Shift


11

เป็นไปได้ไหมที่จะจับคู่ลำดับCtrl- ด้วยShiftใน Gnome Terminal

ฉันกำลังพยายามเพิ่มการแมป

  • map <C-S-[> gT
  • map <C-S-]> gt

และมันไม่ทำงาน ทำอย่างไร

อย่างใดฉันก็แมป<C-S-]>แต่มันกลับกลายเป็นว่ามันไม่ได้<C-S-]>แต่<C-]>ดังนั้นดูเหมือนว่าไม่รู้จัก Shift ในลำดับนี้ มันตั้งค่าผิดพลาดหรือเป็นความผิดพลาดของ gnome-terminal

นอกเหนือจาก การแมป<C-[>หลังจากกดดูเหมือนว่ากลุ่มกำลังรอ ฉันคิดว่ามันหมดเวลาการทำแผนที่ แต่จะกำจัดการหมดเวลานี้ได้อย่างไรเมื่อฉันกดอย่างแม่นยำ<C-[>และฉันไม่ต้องการกดอะไรอีก

ฉันเพิ่งเริ่มเรียนรู้เป็นกลุ่มดังนั้นขออภัยหากมีสิ่งผิดปกติอย่างเห็นได้ชัดในการแมปนั้น

คำตอบ:


8

ฉันคิดว่าปัญหาที่นี่คือคุณกำลังพยายามที่จะรับเป็นกลุ่มซึ่งคาดว่าจะทำงานในสถานีเพื่อรับรู้ลำดับ CTRL-SHIFT ในขณะที่ X สามารถรับรู้ถึงการรวมกันของแอปพลิเคชันที่ทำงานในเทอร์มินัล (หรือวันนี้ตัวจำลองเทอร์มินัล) ไม่สามารถทำได้ เนื่องจากในอดีตเทอร์มินัลสามารถส่งและรับลำดับ ASCII เจ็ดหรือแปดบิตของข้อมูล ASCII ผ่านการเชื่อมต่อแบบอนุกรม (แม้ว่าอาจรวมถึง "escape sequences" ที่วางเคอร์เซอร์เลื่อนหรือลบบรรทัดเปลี่ยนสีและอื่น ๆ ที่เป็นประโยชน์ ผลกระทบ)

มี 32 "รหัสควบคุม" ในชุดอักขระ ASCII รวมถึง CTRL-A ที่คุ้นเคยผ่าน CTRL-Z แต่ไม่มีรหัส ASCII ที่สอดคล้องกันสำหรับ "CTRL-SHIFT" A ถึง Z ตอนนี้ gnome-terminal เองสามารถจดจำรหัสเหล่านี้ได้ (เช่น CTRL-SHIFT-V จะวางข้อความจากคลิปบอร์ด) แต่ vim จะไม่เป็นเช่นนั้น สามารถเข้าถึงได้โดยตรง

แน่นอนมันอาจเป็นไปได้ (ฉันไม่รู้) สำหรับเทอร์มินัลอีมูเลเตอร์เพื่อตั้งค่าการแปลงการกดแป้น CTRL-SHIFT เป็นลำดับการหลบหนีซึ่งสามารถจดจำได้โดยการแมปกลุ่ม

=======

UPDATE

คุณอาจสนใจ gvim ซึ่งเป็นเวอร์ชันกราฟิกของ vim ที่รันเป็นโปรแกรม X แทนที่จะเป็นโปรแกรมเทอร์มินัล บางที gvim จะสามารถเข้าใจรหัส CTRL-SHIFT ได้หรือไม่


4

ดูเหมือนว่าจะมีปัญหากับเทอร์มินัล GNOME ที่ไม่อนุญาตให้ใช้Ctrlคีย์บางตัวร่วมกัน การค้นหาออนไลน์แสดงกรณีจำนวนมาก

ในกรณีที่คุณไม่ทราบCtrl+ page up/ page downรอบผ่านแท็บ


3

ดังที่ Bartleby ชี้ให้เห็นว่านี่เป็นข้อ จำกัด ของเทอร์มินัลเนื่องจาก vi เห็นว่ารหัสคีย์เหมือนกัน

สำหรับอาคารเช่นxtermคุณสามารถเปลี่ยนที่ การgnome-terminal ละเว้นการตั้งค่าแหล่งข้อมูล Xฉันไม่รู้วิธีการดังต่อไปนี้:

คำถาม SOนี้ครอบคลุมหัวข้อเดียวกันและตัวอย่างนี้แสดงสิ่งนี้ที่ใช้สำหรับการแมปหลายคีย์ใน.Xresourcesไฟล์ เช่น:

XTerm*vt100.translations: #override \
  Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n\
  Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n\ 
  Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")  

ตอนนี้เรามีคีย์ลำดับที่แตกต่างกันเข้ามาใน vi สำหรับCtrlaเทียบกับCtrlShifta, CtrlbกับCtrlShiftb, เทียบกับCtrlfCtrlShiftf

ตอนนี้เราสามารถแมปพวกเขาต่างกันใน~/.vimrc:

map <ESC>[66;5u   :echo "ctrl-shift-b received"<CR>
map <ESC>[70;5u   :echo "ctrl-shift-f received"<CR>
map <C-b>         :echo "ctrl-b received"<CR>
map <C-f>         :echo "ctrl-f received"<CR>

คำถามเดิมคือประมาณในขณะที่การตอบสนองของคุณหมายถึงgnome-terminal xterm
egmont

@egmont: จุดดีและการกำกับดูแลด้านข้างของฉัน ตามคำตอบนี้จะถูกละเลยโดย.Xresources gnome-terminalนั่นคือโชคร้าย อัปเดตคำตอบ
cfi

reworded / crossposted คำตอบนี้เป็นคู่ถาม & ตอบกับ SuperUserเล็กน้อยเพราะฉันน่าจะลบได้ที่นี่เพราะมันใช้ไม่ได้กับเทอร์มินัลของผู้ถาม
cfi

1

ดูเหมือนว่าคุณเพียงแค่ต้องปิดใช้งานแป้นพิมพ์ลัดทั้งหมดใน gnome-terminal


2
เหตุใดการปิดใช้งานแป้นพิมพ์ลัดจึงช่วยได้
Eliah Kagan

ดูเหมือนจะไม่ช่วยเลยจากประสบการณ์ของฉัน
Elliot Foster

1

ในgnome-terminalลำดับการหลีกเลี่ยงที่สร้างขึ้นโดยกุญแจไม่สามารถกำหนดค่าได้ สำหรับหลาย ๆ คีย์Ctrl+ keyและShift+ Ctrl+ keyสร้างลำดับที่แตกต่างกัน น่าเสียดายสำหรับพวกเขา[และ]พวกเขาทำไม่ได้ดังนั้นคุณไม่สามารถแยกพวกเขา

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