กำลังมองหาโซลูชัน ALT + LeftArrowKey ใน zsh


131

ฉันเพิ่งเปลี่ยนจากการทุบตีเพื่อ zsh แต่ฉันพลาดของฉันAlt+ LeftArrowKeyและAlt+ RightArrowKeyเพื่อกลับไปมาคำในเวลา

ตอนนี้ถ้าฉันกดAlt+ LeftArrowKeyฉันย้อนกลับไปสองสามตัวอักษรแล้วฉันติดอยู่ ฉันจะไม่ถอยหลังอีกต่อไปและมันจะไม่กลับไปที่จุดสิ้นสุดของบรรทัดด้วยAlt+ RightArrowKeyอย่างที่ฉันคาดหวัง ฉันใช้ปุ่มลูกศรเพื่อไปที่ท้ายบรรทัดไม่ได้ด้วยซ้ำไปที่ปุ่มที่สองถึงสุดท้าย ไม่สามารถป้อนตัวอักษรใหม่ในบรรทัดหรือลบออก

ฉันจะได้รับทางลัดที่รักกลับมาได้อย่างไร?

ฉันใช้ Mac OS X โดยใช้ Terminal ถ้ามันสำคัญ

คำตอบ:


244

เรียกใช้catจากนั้นกดปุ่มเพื่อดูรหัสทางลัดที่คุณส่ง
(กดCtrl+ Cเพื่อฆ่าcatเมื่อคุณทำเสร็จแล้ว)
สำหรับฉัน (ubuntu, konsole, xterm) กดAlt+ ส่ง^[[1;3Dดังนั้นฉันจะใส่. zshrcของฉัน

bindkey "^[[1;3C" forward-word
bindkey "^[[1;3D" backward-word

(อันที่จริงฉันชอบใช้Ctrlลูกศร + เพื่อย้ายทีละคำเช่นในกล่องข้อความปกติใต้หน้าต่างหรือ linux gui)

คำถามที่เกี่ยวข้อง: แก้ไขการตั้งค่าคีย์ (Home / End / Insert / Delete) ใน. zshrc เมื่อเรียกใช้ Zsh ใน Terminator Terminal Emulator


16
คุณคือผู้ช่วยชีวิตของฉัน! บน Mac ของฉัน "Alt + <-" ให้ "^ [b" และ -> ให้ "^ [f" ฉันจึงเพิ่มสิ่งเหล่านี้ ใช้งานได้เหมือนมีเสน่ห์ Ctrl + ลูกศรสงวนไว้สำหรับการสลับไปมาระหว่างเดสก์ท็อปบน Mac
Mads Ohm Larsen

1
หนึ่งทราบเป็นที่สำหรับ Ctrl + <- แมวได้รับการรายงาน^[[Dสำหรับฉันในขณะที่ CTRL + V ^[ODได้รับรายงาน คำแนะนำของ Ctrl + v ใช้งานได้ แต่ cat ไม่ได้ผล นอกจากนี้ ctrl + v ยังรายงานสิ่งเดียวกันสำหรับทั้ง alt + <- และ alt + -> ฉันสามารถเพิ่มสองสิ่งนี้ได้โดยดูที่เอาต์พุตของ cat และแทนที่ "[[" ด้วย "O"
Mike S

10
ผลลัพธ์ของฉันภายใต้ cat มี^[^[[Cไว้สำหรับคำไปข้างหน้าและ^[^[[Dสำหรับคำย้อนกลับ แต่การอัปเดตสำหรับสิ่งเหล่านี้ใน. zshrc ไม่ทำงานด้วยเหตุผลบางประการ
Yunti

2
@Yunti - การใส่bindkey "^[^[[D" backward-wordและbindkey "^[^[[C" forward-wordใน~ / .zprofileได้ผลสำหรับฉัน!
Fernando Espinosa

ชาย! ช่วยชีวิตฉันไว้! ขอบคุณสำหรับการแบ่งปัน!
Joao Henrique

187

สำหรับใครที่ใช้ iTerm ไม่ว่าเชลล์

วิธีแก้ปัญหาทั้งหมดที่นำเสนอที่นี่ใช้แนวทางย้อนกลับในความคิดของฉัน คุณกำลังบอกให้เชลล์ของคุณฟังลำดับ esc หรือการผูกคีย์อื่น ๆ ที่คุณตั้งไว้ในเทอร์มินัลของคุณสร้างปัญหาความเข้ากันได้เมื่อคุณเปลี่ยนเชลล์ (ถ้าคุณ SSH เป็นเชลล์อื่นให้เปลี่ยนจาก BASH เป็น ZSH ฯลฯ และคุณจะเสีย บางส่วนหากไม่ใช่การเชื่อมโยงคีย์ทั้งหมดของคุณ)

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

ฉันเขียนโซลูชันการบีบอัดเพื่อให้เทอร์มินัลของคุณตอบสนองใกล้เคียงกับการเชื่อมโยงคีย์ของ Mac ที่นี่

เปิดการตั้งค่า iTerm + ,และไปที่Profilesแท็บ ( Keysสามารถใช้แท็บได้ แต่การเพิ่มการเชื่อมโยงคีย์ลงในโปรไฟล์ของคุณจะช่วยให้คุณสามารถบันทึกโปรไฟล์ของคุณและซิงค์กับคอมพิวเตอร์หลายเครื่อง) และkeysแท็บย่อยและป้อนข้อมูลต่อไปนี้:

เลื่อนเคอร์เซอร์ไปทางซ้ายหนึ่งคำ

+ ส่งรหัส Hex:0x1b 0x62

เลื่อนเคอร์เซอร์ไปทางขวาหนึ่งคำ

+ ส่งรหัส Hex:0x1b 0x66

และนั่นควรให้พฤติกรรมที่คุณต้องการไม่ใช่แค่ใน ZSH แต่ยังรวมถึงถ้าคุณ SSH เข้าสู่เซิร์ฟเวอร์ที่ใช้ BASH, irb / pry, node เป็นต้น


1
ฉันมีปัญหากับโซลูชันที่ยอมรับเพราะฉันใช้ zsh ได้ดี แต่ไม่ใช่ irb และคอนโซลอื่น ๆ การลบการตั้งค่าก่อนหน้านี้ (ในโปรไฟล์ iTerm ตามที่แนะนำ) ทำงานได้อย่างมีเสน่ห์!
llekn

1
โซลูชัน bindkey จะทำให้เกิดข้อผิดพลาดที่น่ารำคาญบน Mac นี่น่าจะเป็นวิธีที่ถูกต้อง
Weishi Zeng

@Lev อาจเป็นเพราะเชลล์ของคุณไม่ได้แมปกับการกำหนดค่าเริ่มต้น เรียกใช้bindkey | grep forward-wordคุณจะเห็น"^[f" forward-wordส่งคืน แต่ถ้าคุณไม่ทำคุณมี 2 ตัวเลือก แมปกับคนอื่นที่ส่งคืนหรือเพิ่ม"^[f" forward-wordใน.zshrcไฟล์.
Travis

ฉันจะสังเกตว่านั่น"^[f"ดูเหมือนจะเป็นการผูกที่ใช้กันมากที่สุดสำหรับการforward-wordใช้ข้ามเชลล์และเป็นเพียงชุดเดียวที่กำหนดโดยค่าเริ่มต้นในเวอร์ชัน bash ของฉัน
Travis

มันใช้งานได้กับปุ่มคำสั่งแทนตัวเลือก ขอบคุณคน :)
Vaibhav Jain

72

การเพิ่มสิ่งต่อไปนี้ใน ~ / .zshrc ใช้ได้ผลกับฉันบน OSX Mountain Lion

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word

4
โซลูชันนี้จะเรียก "กระดิ่ง" ใน iTerm 2 ทุกครั้งที่ใช้ดังนั้นการกระโดดไปมาระหว่างคำจึงน่ารำคาญมาก
Matthew Morek

1
ใครรู้วิธีปิดการใช้งานไม่ให้เกิดขึ้น ^ @MatthewMorek
Daniel Kobe

18
'\ e \ e' ป้องกันระฆัง การกำหนดค่าของฉันใน El Capitan กับ iTerm 2 ในโหมดความเข้ากันได้ของ Terminal คือ bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum

ขอบคุณสิ่งนี้ช่วยแก้ปัญหาใน macOs Sierra ฉันไม่ได้ยินเสียงกระดิ่งใด ๆ ทั้งใน Terminal หรือ iTerm2
Raspo

คุณจะตั้งค่าให้ย้ายจากท้ายคำไม่ใช่จุดเริ่มต้นหรือไม่ได้อย่างไร
Mafro34

23

บน MacOS High Siera 10.13.6 หรือ Mojave 10.14.2 และใช้ iTerm2 กับ ZSH ในการย้ายจากคำที่ฉันต้องใส่เช่นนี้:

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

โซลูชันอื่นไม่ได้ผลสำหรับ rme


1
นี่เป็นทางออกเดียวที่ใช้ได้ผลสำหรับฉันเช่นกัน ขอบคุณ! Mac OS Mojave
jamescampbell

ทำงานบน OS Catalina เช่นกัน!
Reed Richards

7

แม้ว่าจะไม่ได้ตอบคำถามของคุณอย่างเคร่งครัด แต่การผูกมัดเริ่มต้นสำหรับforward-wordและbackward-wordเป็นการตอบalt-fสนอง alt-b.

งานนี้ทุกที่ไม่ต้องการให้คุณที่จะออกจากแถวบ้านและมีดีคุณสมบัติช่วยในการจำ (f = ไปข้างหน้า, B = ด้านหลัง) ขณะที่ยังเป็นที่สอดคล้องกับctrl-fและctrl-bเป็นและforward-characterbackward-character

ฉีกปุ่มลูกศรของคุณ!


4
ไม่ทำงานสำหรับฉันใน zsh / iterm2 พิมพ์ƒและ∫ (cb cf ใช้งานได้)
Davorin

2

เพื่อให้ได้ผลสำหรับฉันฉันใช้คำตอบนี้แต่ฉันต้องสลับรหัส (ซ้าย <-> ขวา)

⌥ + ←ส่งรหัส Hex: 0x1b 0x66
⌥ + →ส่งรหัส Hex: 0x1b 0x62

และเพิ่มสิ่งต่อไปนี้ในไฟล์ ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word

มันเนื้อหาจะน้อยสับสนถ้าคุณมีการเปลี่ยนแปลงของคุณbindkeys แทนเพื่อผูก^[fไปและไม่ให้forward-word backward-word
Nickolay

1

ใน Mavericks (10.9.4) รหัสคือ 1; 5 ... ดังนั้นสำหรับการผูก alt กับลูกศรฉันมี. zshrc ของฉันโดยใช้สิ่งนี้:

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

คุณสามารถใช้ CTRL + V ตามด้วยคำสั่งที่คุณต้องการใช้

ในโยเซมิตีใช้วิธีแก้ปัญหาของ Rob


1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie

1

ใน zsh คุณสามารถใช้bindkeyคำสั่งเพื่อดูแป้นพิมพ์ลัด

ใช้bindkeyเพื่อสำรวจตัวเลือกที่พร้อมใช้งานโดยไม่มีการเชื่อมโยงคีย์แบบกำหนดเอง

กล่าวคือ^[b เลื่อนไปข้างหลังคำและ^[fก้าวไปข้างหน้าคำ

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