เหตุใด Ctrl-Arrow ไม่ทำงานในการทุบตีใน OS X


15

ฉันใช้Ctrl- และCtrl- กับทุกระบบ Linux ที่ฉันทำงาน แต่ชุดคีย์เหล่านี้ไม่สามารถใช้งานได้กับ Macbook Pro กำลังใช้งาน Snow Leopard และฉันใช้แอพพลิเคชั่น Terminal ในตัว

ดูเหมือนว่าชุดคีย์จะไม่ถูกจับด้วยอะไรมาก่อนหรือโดย Terminal เพราะถ้าฉัน ssh ไปยังหนึ่งในเซิร์ฟเวอร์ Linux ของฉันฉันสามารถใช้Ctrl- / เพื่อข้ามไปยังคำถัดไป / ก่อนหน้าในบรรทัดคำสั่ง อย่างไรก็ตามเมื่อฉันลองชุดคีย์นี้เป็นการทุบตีใน Macbook ของฉันฉันเพิ่งได้รับ "C" สำหรับลูกศรขวาและ "D" สำหรับลูกศรซ้าย

ความคิดเห็นใด ๆ เกี่ยวกับวิธีที่ฉันจะได้รับกุญแจเหล่านี้ให้ทำงานในดาร์วินทุบตี?


2
หากคุณใช้ช่องว่างให้กด Ctrl + ลูกศรตามค่าเริ่มต้นเพื่อสลับช่องว่าง
mark4o

คำตอบ:


13

OS X ใช้ปุ่ม emacs เชื่อมโยงค่าเริ่มต้นของฉัน นี่เป็นความจริงคือทุกแอปพลิเคชั่นบน OS X นั้นค่อนข้างดี มันหมายถึงสิ่งต่าง ๆ เช่น Ca และ Ce คือจุดเริ่มต้น / สิ้นสุดของบรรทัด คุณยังได้รับ backward-word-kill ที่ดีพร้อม M-backspace โอ้และ kill-line ด้วย Ck

นี่ควรหมายความว่าในเทอร์มินัลไปข้างหน้า / ข้างหลังคำของคุณถูกผูกไว้กับ Mf และ Mb ตามลำดับ (M = Meta = alt / ตัวเลือก) อย่างไรก็ตามนั่นไม่ใช่กรณี ใน OS X forward / backword-word ถูกผูกไว้กับ M- →และ M- ←ตามค่าเริ่มต้น

คุณสามารถแก้ไขพฤติกรรมนี้ได้โดยเปลี่ยนวิธีกำหนดค่าไลบรารี GNU Readline สำหรับบัญชีของคุณ สิ่งนี้เกิดขึ้นใน~/.inputrcไฟล์ของคุณ คุณสามารถรับรายการคำสั่ง bindable จำนวนมากพร้อมกับman readlineในเอกสารออนไลน์เช่นนี้ได้ที่นี่ .

ดังนั้นเพื่อตอบคำถามของคุณคุณต้องทำการแมปสิ่งที่ Readline ทำเมื่อเห็น C- →และ C- ←เพื่อทำสิ่งที่มันทำบนเซิร์ฟเวอร์ linux ของคุณ

ไวยากรณ์สำหรับไฟล์เป็นเรื่องง่ายสวยสำหรับสิ่งที่คุณต้องการจะทำ:~/.inputrckey-sequence: action

นี่ควรเป็นสิ่งที่คุณต้องการเพื่อให้ได้พฤติกรรมที่ต้องการ:

"\e[5C": forward-word
"\e[5D": backward-word

นี่คือหน้าอื่นที่มีการเชื่อมที่มีประโยชน์เพิ่มเติม

(คุณอาจหลีกเลี่ยงการคัดลอก / etc / inputrc จากกล่อง linux ของคุณไปยัง OS X ของคุณ /. inputput)


หมายเหตุ: หากคุณกำลังใช้ tmux กับ xterm คีย์มากคุณจะยังต้อง\e[1;5Cและ\e[1;5Dยังทริกเกอร์และforward-word backward-word
Arne

2
หมายเหตุอื่น: หากยังใช้งานไม่ได้อาจเป็นเพราะความขัดแย้งทางลัดกับ Mission Control / Spaces การตั้งค่าระบบ -> แป้นพิมพ์ -> ทางลัด -> การควบคุมภารกิจเลื่อนไปทางซ้าย / ขวาเว้นวรรค
bhh1988

ฉันไม่เข้าใจ "OS X ใช้การผูกกุญแจ emacs ตามค่าเริ่มต้น" "Ctrl-arrow" เป็นการเชื่อมโยงคีย์ emacs
เกร็ก


0

วันนี้ดูเหมือนว่าลำดับการหลีกเลี่ยงที่เอาต์พุต Ctrl-Arrows ในเทอร์มินัลจะเปลี่ยนไป นี่คือสิ่งที่ใช้ได้กับฉัน ณ วันนี้ (สิ้นปี 2018):

"\e[1;5C": forward-word "\e[1;5D": backward-word

หมายเหตุ: คุณสามารถค้นหาลำดับการหลบหนีที่แท้จริงได้เสมอโดยพิมพ์ cat -vใน Terminal และกด Ctrl-Left Arrow หรือ Ctrl-Right Arrow นี่คือตัวอย่างเอาต์พุตสำหรับลูกศร Ctrl-Left ของฉัน:

^[[1;5C ^[[1;5C

หากต้องการแปลเป็น.inputrcศัพท์แสงให้แทนที่เครื่องหมายหนี^[ด้วย\eแล้วติดผลลัพธ์ไว้ในเครื่องหมายคำพูดคู่


0

ในฐานะที่เป็น @ bhh1988 กล่าวถึงการกำหนดค่าป้องกันควบคุมภารกิจปุ่ม Ctrl bashคีย์การทำงานด้วยปุ่มลูกศรใน ฉันไม่ต้องการยุ่งกับทางลัดเหล่านั้นดังนั้นฉันจึงใช้ปุ่มตัวเลือก (เช่น Alt) แทน ปัจจุบันใช้ Mojave โดยใช้แป้นพิมพ์ภาษาเยอรมัน (ไม่ทราบว่าเกี่ยวข้องหรือไม่) ฉันใส่สิ่งต่อไปนี้.inputrcเพื่อใช้ตัวเลือกลูกศรซ้ายและตัวเลือกลูกศรขวาเพื่อเลื่อนไปมาระหว่างคำต่างๆ

"\e\e[C": forward-word
"\e\e[D": backward-word

0

อัพเดทมกราคม 2563

ในรุ่นใหม่ล่าสุดของ OSX zshเปลือกเริ่มต้นคือ ดังนั้นคาถาเวทมนต์เพื่อให้ได้ ctrl-arrowleft และ ctrl-arrowright ให้ทำงานตามที่คาดไว้มีดังต่อไปนี้:

bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word

(ใส่ไว้ในของคุณ.zshrc)

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