การทำให้ iTerm แปล 'meta-key' ในลักษณะเดียวกับ OS อื่น ๆ


179

ใน bash shell ที่มี emacs key-binding คุณสามารถใช้คีย์ผสมเช่น Mf, Mb เพื่อเลื่อนไปข้างหน้าหนึ่งคำหรือย้อนกลับบน shell prompt ตามลำดับ โดยปกติแล้วเมตาคีย์จะถูกแมปไปยังคีย์ Alt บน Windows และ Linux อย่างไรก็ตามใน iTerm ฉันไม่สามารถหาวิธีแมปคีย์ meta นี้กับ Option หรือ Command key บน MacBook Pro ของฉันได้

ดูเหมือนว่าใน OS X คีย์เมตาจะถูกแมปกับคีย์ ESC โดยค่าเริ่มต้น ดังนั้นคุณสามารถใช้ ESC-f, ESC-b บน iTerm อย่างไรก็ตามดูเหมือนว่าปุ่ม ESC ไม่สามารถใช้งานได้จริง นอกจากนี้ iTerm ยังมีตัวเลือกที่อนุญาตให้คุณปรับเปลี่ยนการแมปสำหรับคีย์เมตา (บุ๊กมาร์ก> โปรไฟล์> โปรไฟล์คีย์บอร์ด> ทั่วโลก> คีย์ตัวเลือกเป็น ... ) การตั้งค่านี้ดูเหมือนจะไม่ทำงานเลย

ดังนั้นหากใครรู้ว่าอะไรคือทางออกของปัญหานี้โปรดแจ้งให้เราทราบ

ฉันได้อัปเกรดเป็นรุ่นล่าสุด 0.9.6.1012 และพฤติกรรมนี้ยังคงมีอยู่

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


หลังจากล้อเล่นกับปัญหานี้มาระยะหนึ่งแล้วและไม่สามารถหาทางออกได้ ฉันเลิกและเปลี่ยนไปใช้ Terminal ทันที
ejel

2
อย่าลืมว่า iterm2 อยู่แล้วและทุกอย่างดีในการมี =)
Holms

คำตอบ:


207

Cmd+., Profiles, และเลือกKeysLeft option Key acts as: +Esc

ได้ผลกับฉันใน emacs แม้ว่าฉันจะไม่แน่ใจว่ามันจะมีผลกระทบอื่น ๆ ที่ไม่พึงประสงค์


ฉันลองใช้ตัวเลือกคีย์เป็น ... พร้อมตัวเลือกทั้งหมด แต่ไม่มีตัวเลือกใดที่เหมาะกับฉันในเชลล์ bash มันแสดงเฉพาะ "?" ทุกครั้งที่ฉันกดชุดเมตาคีย์
ejel

2
ดูเหมือนว่าภาษาป้อนข้อมูลของคุณจะต้องเป็น US เพื่อให้ตัวเลือก + ESC ทำงานได้ + ESC ไม่ทำงานสำหรับฉันเมื่อฉันเลือกวิธีป้อนข้อมูลแบบญี่ปุ่น / โรมาจิ แต่มันเริ่มทำงานเมื่อฉันเปลี่ยนภาษาที่ป้อนเป็น US
Dominic Cooney

2
การตั้งค่าโปรไฟล์กุญแจและเลือกตัวเลือกซ้ายคีย์ทำหน้าที่เป็น + Esc จากนั้นคุณจะมีคีย์ตัวเลือกซ้ายและคีย์ Esc เป็นคีย์เมตา นั่นคือสิ่งที่เกิดขึ้นในกรณีของฉัน
cgl

ด้วย iTerm 2 นี่เป็นตัวเลือกที่แนะนำ
ejel

4
สำหรับแป้นพิมพ์ภายนอกของฉันฉันต้องตั้งค่าปุ่มตัวเลือกทั้งซ้ายและขวาให้ใช้Esc+แม้ว่าฉันจะใช้ปุ่มตัวเลือกซ้ายมันก็จะยังพิมพ์อักขระแปลก ๆ สิ่งนี้อาจเกิดขึ้นเพราะฉันใช้ตัวเลือกKeyboard Modifiersในการตั้งค่า Mac Keyboard เพื่อเปลี่ยนปุ่ม
grego

130

ไปที่คั่นหน้า> จัดการโปรไฟล์ จากนั้นเลือกแป้นพิมพ์รูปแบบ> ทั่วโลกและเลือกปุ่ม Option เป็น Meta สิ่งนี้ใช้ได้กับฉันในเวอร์ชัน 0.9.6.1201


2
ฉันต้องเปลี่ยนรายการ xterm (OS X) มากกว่าทั่วโลก แต่ตอนนี้มันใช้งานได้แล้ว
Jason Axelson

ฉันไม่รู้ว่าเพราะเหตุใดบนเครื่องของฉันการตั้งค่าจึงไม่ทำงานใน 0.9.6.1201 และงานสร้างอื่น ๆ ที่ฉันได้ลอง อย่างไรก็ตามมันใช้งานได้กับรุ่น 0.9.6 ล่าสุดและ 0.10 ดังนั้นจึงไม่ควรมีปัญหาตอนนี้
ejel

11
ใน iTerm2 สิ่งนี้ใช้ได้เฉพาะหลังจากที่ฉันกำหนดคีย์ช็อตคัตโปรไฟล์อีกครั้งสำหรับalt+ ->และalt+ <-เพื่อส่งลำดับหนี + f/ bตามลำดับ
amirnissim

ฉันต้องเปิดเซสชัน iterm ใหม่เพื่อให้มันเข้า
Skurpi

@SridharRatnakumar ทำงานให้กับ iTerm ด้วย
Krzysztof Wende

31

ในแถบเมนู Iterm2 => การตั้งค่า => โปรไฟล์เลือกแท็บปุ่มและเลือก

ปุ่มตัวเลือกด้านซ้ายทำหน้าที่เป็น + Esc

ป้อนคำอธิบายรูปภาพที่นี่

ทำงานให้ฉันเช่นกันใน irssi


สุดยอดนี้ยังใช้งานร่วมกับ iTerm2 + tmux
TheJavaGuy-Ivan Milosavljević

8

ฉันไม่สามารถใช้ปุ่ม Alt ทำงานได้ แต่ก็มีวิธีแก้ไขที่ทำให้ฟังก์ชั่นการสืบค้นคำอย่างน้อยผ่านเคอร์เซอร์คีย์:

ข้ามไปที่คำถัดไปหรือก่อนหน้าใน iTerm โดยใช้ปุ่ม Alt / Option + ปุ่มลูกศรซ้ายหรือขวา


2
สำหรับbackward-delete-word(⎇-DEL) ส่งรหัสฐานสิบหก0x17สำหรับการกระโดดไปยังจุดเริ่มต้นของการป้อนข้อมูล (⌘-←) ส่ง0x01และกระโดดไปยังจุดสิ้นสุด (⌘-→) 0x05ส่ง
Lenar Hoyt

5

ฉันใช้iTerm2และสำหรับฉันคำตอบนี้แก้ปัญหาของฉันได้เพียงบางส่วน:

Cmd+ ,=> โปรไฟล์ => คีย์และเลือกตัวเลือกคีย์ซ้ายทำหน้าที่เป็น: + Esc

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนั้นฉันต้องไปที่Cmd+ ,=> โปรไฟล์ => คีย์และในรายการการแมปคีย์ค้นหาทั้งคีย์ผสม s: ป้อนคำอธิบายรูปภาพที่นี่และป้อนคำอธิบายรูปภาพที่นี่ดับเบิลคลิกที่พวกเขาและเปลี่ยนทางลัดของพวกเขาต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

* ตรวจสอบให้แน่ใจว่าได้เลือกการกระทำSend Escape Sequence


สิ่งนี้มีประโยชน์จริงๆ ขอบคุณมากครับ!
LeOn - Han Li

4

จะฟื้นคืนชีพผีดิบทั้งหมดที่นี่ แต่เพื่อลูกหลานของ -

โพสต์นี้ทำให้มันทำงานได้ตามที่คุณต้องการสำหรับฉันสำหรับ Mb และ Mf ในขณะที่รักษา 'ตัวเลือกคีย์เป็น Meta' เพื่อให้คุณไม่ต้องเสียสละปรับปรุง (ฉันมีการแมปกลุ่มโดยใช้เมตาส่วนตัว)

โดยสรุปในโปรไฟล์ Global Keyboard ของคุณเพิ่มการแมปใหม่สองรายการด้วยการตั้งค่า:

  1. สำคัญเป็นรหัสฐานสิบหกค่า 62 สำหรับ b, 66 สำหรับ f ( man ascii)
  2. ปรับปรุงเป็นตัวเลือก
  3. ดำเนินการตามลำดับส่ง escape ค่า b หรือ f

สิ่งเดียวที่ฉันยังคิดถึงจาก Terminal.app คือOpt-Backspaceการลบด้วยคำ มีวิธีการแก้ปัญหาอื่น ๆ ที่มี Ctrl-wแต่ฉันแค่พยายามที่จะฝึกตัวเองให้ใช้


อาจเป็นคุณสมบัติใหม่ตั้งแต่คำตอบนี้ แต่คุณสามารถแมปคีย์ลัดทั่วโลกเพื่อส่งCtrl-wเมื่อOpt-Backspaceกด
Steve Buzonas

4

ง่ายกว่าใน iTerm2 ไปที่ preferences-> bookmark-> keyboard และเลือก Option ส่ง + ESC ใน iTerm2 คุณสามารถกำหนดค่าปุ่มตัวเลือกซ้ายและขวาแยกกันดังนั้นอย่าลืมเปลี่ยนทั้งสองอย่างถ้านั่นคือสิ่งที่คุณต้องการ ลิงก์สำหรับ iTerm2: http://sites.google.com/site/iterm2home/


2

ไปที่บุ๊คมาร์ค> จัดการโปรไฟล์ จากนั้นเลือกรูปแบบแป้นพิมพ์> ทั่วโลกและเลือกตัวเลือกคีย์เป็น + ESC

ทำงานใน iTerm Build 0.9.5.0611 & Build 0.9.6.20090415


อืมมม ดูเหมือนว่าการตั้งค่าจะแตกบนเครื่องของฉันด้วยสองเวอร์ชั่นนี้เช่นกัน อย่างไรก็ตามล่าสุด 0.9.6.20090928 และ 0.10 ทำงานตามที่คาดไว้
ejel

2

ฉันได้พบวิธีแก้ปัญหาบางอย่างใน stackoverflow เพียงไปที่โปรไฟล์ของแป้นพิมพ์และในปุ่มตัวเลือก "เปลี่ยน" ทั่วโลก "เป็น" + ESC

ที่เหมาะกับฉันอย่างสมบูรณ์ =) btw แพทช์ iterm บางตัวก็มีอยู่ที่นี่: http://www.emacswiki.org/emacs/EmacsForMacOS


0

ลอง "export LANG = C" ฉันไม่ใช่ผู้เชี่ยวชาญ emacs แต่ฉันพบว่านี่ทำให้ emacs ใน OS X สามารถรับรู้ว่าปุ่มตัวเลือกเป็นคีย์ Meta ใน iTerm


0

ฉันไม่รู้เกี่ยวกับ iTerm แต่คุณสามารถทำได้ใน Terminal คำแนะนำสามารถพบได้ที่นี่:

Emacs บนการเชื่อมโยงคีย์ Mac OS X Leopard


ขอบคุณ. ฉันรู้ว่าฉันสามารถทำได้ในเทอร์มินัล ฉันแค่ต้องการบรรลุผลลัพธ์เดียวกันใน iTerm โดยวิธีการสิ่งที่ฉันกำลังมองหาคือการผูกกุญแจในเปลือกทุบตีไม่ได้อยู่ใน emacs มันเพิ่งเกิดขึ้นที่เปลือกทุบตีใช้การผูกกุญแจ emacs
ejel

0

นี่คือสิ่งที่ใช้ได้กับฉัน: ที่คั่นหน้า> จัดการส่วนกำหนดค่า> รูปแบบแป้นพิมพ์> ทั่วโลก / xterm> คีย์ตัวเลือกเป็น + Esc ด้วยสิ่งนี้ฉันสามารถใช้ตัวเลือก + Enter ใน Midnight Commander และชื่อไฟล์ / ไดเรกทอรีที่เลือกในปัจจุบันจะปรากฏขึ้นในสตริงคำสั่งตามที่ควร รหัสตัวเลือกเป็น Meta ไม่ทำงานสำหรับฉัน งานสร้าง iTerm ของฉันคือ 0.10

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