การแมปปุ่ม Alt ซ้ายในกลุ่ม?


12

ฉันสามารถที่จะ map คีย์ผสมRight Alt+ Left Arrowด้วยหรือ<a-left> <m-left>แต่ฉันไม่สามารถแมปLeft Altกุญแจได้

มีวิธีทำเช่นนั้นหรือไม่?

แก้ไข:
เพียงเพื่อความชัดเจน<a-left>วิธี+Alt คำถามสำคัญที่นี่คือความแตกต่างระหว่างและจากมุมมองของ keymappings ใน Vim คืออะไร?Left Arrow
Left AltRight Alt

คำตอบ:


14

หากคุณใช้:help key-notationvim คุณจะเห็นว่าโมดิฟายเออร์เท่านั้นที่ Vim รู้จักคือ shift, control, alt / meta (ถือว่าเป็นคำพ้องความหมาย) และคีย์คำสั่ง Mac คุณสามารถใช้ xmodmap เพื่อแม็ปปุ่ม alt ขวาของคุณกับโมดิฟายเออร์ใหม่ที่ Vim รู้จัก แต่บางทีคุณอาจไม่ได้ใช้โมดิฟายเออร์เหล่านี้ (ฉันไม่รู้ว่าเป็นไปได้หรือไม่ที่จะให้ระบบ Linux แสดงถึงตัวแก้ไขคีย์คำสั่ง Mac ตามที่ Vim เห็น) มีตัวดัดแปลงอื่นที่ X รู้จัก: Mod4, Hyper และอื่น ๆ แต่ดูเหมือนว่า Vim เพิ่งชนะ ' ไม่เห็นพวกเขาหรืออย่างน้อยก็ไม่สามารถผูกพวกเขาได้

อีกทางเลือกหนึ่งคือการจัดเรียงลูกศรขวา - ซ้าย - ซ้ายเพื่อสร้างลำดับคีย์เฉพาะตัวอย่างเช่น Esc- [MyUniqueGarbageHere เป็นไปได้อย่างแน่นอนและจากนั้นคุณสามารถบอกให้ Vim ผูกมัดกับการกระทำใด ๆ ที่คุณชอบซึ่งแตกต่างจากปุ่ม alt ซ้ายของคุณ ข้อเสียของสิ่งนี้คือคุณต้องทำการรวมกันสำหรับ RightAlt + Key แต่ละชุด แต่ถ้าคุณต้องการทำสิ่งนี้เพื่อรับกุญแจบางปุ่มมันเป็นไปได้มาก

วิธีที่คุณใช้งานจะขึ้นอยู่กับว่าคุณกำลังพูดถึงการใช้ Vim ใน X หรือในคอนโซล Linux หรือในสภาพแวดล้อมอื่น ๆ ฉันจะสมมติว่าคุณกำลังพูดถึงการใช้งานใน X

  1. ใช้ xmodmap เพื่อผูก RightAlt กับสมมุติว่า Mod3 จัดการให้สิ่งนี้ทำงานครั้งเดียวเมื่อเซสชัน X ของคุณเริ่มต้น บางดิสทริบิวชันมีไฟล์ / etc / X11 / xinit / xinitrc ที่จะโหลดไฟล์ที่ตำแหน่งเฉพาะที่มีคำสั่ง xmodmap

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
    
  2. ฉันใช้ terminal urxvt จะอนุญาตให้หนึ่งเพื่อกำหนด keybindings ในไฟล์ Xresources-type คุณสามารถทำได้ใน ~ / .config / Xresources ฉันทำใน ~ / .config / app-defaults / URxvt ฉันจะใส่บรรทัดเช่นนี้ในไฟล์นั้น (ไวยากรณ์ที่แน่นอนมีความไวต่อไฟล์ที่คุณใส่ไว้):

    URxvt.keysym.Mod3-Left:    \033<RAlt-Left>
    

    ตอนนี้เริ่มเทอร์มินัลใหม่พิมพ์ ctrl-V จากนั้นพิมพ์ RightAlt + Left คุณควรเห็นตัวอักษร ^ [[<RAlt-Left> ที่บรรทัดคำสั่ง) มันใช้งานได้หรือไม่ ดี.

  3. ใน ~ / .vimrc ของคุณให้ใส่สิ่งนี้:

    set t_Ff=^[<RAlt-Left>
    

'^ [' ที่นี่เป็นตัวละครตัวเดียว อักขระอื่น ๆ แต่ละตัว ('<', 'R', 'A' ฯลฯ ) เป็นตัวของพวกเขาเอง ใช้ส่วนนำหน้าคีย์ "literal" ของ vim ตามด้วย escape เพื่อป้อน '^ [' (ฉันลืมว่าคีย์ "literal" เป็นค่าเริ่มต้น --- ยัง ctrl-V หรืออาจ?) t_Ff เป็นเพียงรายการเทอร์มินัลที่ไม่ได้ใช้ . อีกอย่างคือ t_Fg คุณสามารถใช้:set termcapในกลุ่มเพื่อดูรายการเทอร์มินัลที่ได้รับมอบหมายและใช้ t_XX สำหรับ XX บางรายการที่ไม่ได้ใช้งาน ทำตามบรรทัด. vimrc ที่นำเสนอด้านบนด้วยรายการถัดไปเหล่านี้:

    map <t_Ff> whatever-vim-keys-you-want-it-mapped-to
    map! <t_Ff> whatever-vim-keys-you-want-it-mapped-to

เป็นไปได้ที่จะทำโดยตรง:

    map ^[<RAlt-Left> whatever-vim-keys-you-want-it-mapped-to

อย่างไรก็ตามฉันพบเทคนิคที่ใช้รายการเทอร์มินัลที่ไม่ทำงานเพื่อทำงานได้อย่างน่าเชื่อถือมากขึ้น

ฉันตั้งสมมติฐานมากมายที่นี่: คุณใช้ Linux, X และอื่น ๆ หากคุณกำลังใช้โปรแกรมเทอร์มินัลต่างจาก urxvt อาจเป็นหรืออาจไม่ได้ให้เทคนิคการเชื่อมปุ่มกดที่ทรงพลังพอที่จะทำสิ่งที่ฉันได้อธิบายไว้ หากคุณเลือกกุญแจที่แปลกใหม่น้อยกว่าคุณอาจยังสามารถทำสิ่งที่ฉันอธิบายไว้ที่นี่ ตัวอย่างเช่นคุณอาจจัดให้ RAlt-Left ถูกผูกไว้กับ F21 แล้วไปจากที่นั่น แจ้งให้เราทราบว่าคุณต้องการอะไร


สิ่งนี้ใช้กับ gvim ได้หรือไม่?
Glyph

ฉันพบว่าสิ่งนี้มีประโยชน์เป็นพิเศษ ฉันใช้ lxterminal และต้องการแมปปุ่ม alt ของฉันเป็นกลุ่ม ในเทอร์มินัลเมื่อฉันพิมพ์ Ctrl-V จากนั้นกดคีย์ผสมที่ต้องการ (Alt-T เป็นต้น) มันจะพ่นออกมา ^ [t ฉันใช้สิ่งนี้ใน. vimrc ของฉันแทน <At> เพื่อทำแผนที่ (^ [แน่นอนว่าเป็นตัวละครตัวเดียว) และมันทำงานได้อย่างไม่มีที่ติ (^ [^ T ผูกอย่างถูกต้องด้วย Ctrl + Alt + T)
elynnaie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.