ALT + ลูกศรเลื่อนไปมาระหว่างคำใน zsh และ iTerm2


19

ฉันลงชื่อเข้าใช้เซิร์ฟเวอร์ผู้ให้บริการโฮสต์แห่งหนึ่งและสังเกตเห็น ALT + ซ้ายและ ALT + ย้ายไปทางขวาระหว่างคำในเชลล์พรอมต์ในหน้าจอ GNU

การโยงคีย์ชนิดใดที่ฉันต้องกำหนดค่าและตำแหน่งที่จะรับพฤติกรรมนี้กับ OS X zsh ในพื้นที่ของฉันที่ทำงานใน iTerm2


ผู้ที่สนใจในคำถามนี้อาจสนใจที่จะรู้ว่าคำ zsh ไม่ใช่คำทุบตี FOO=BARเป็นหนึ่งคำสำหรับ zsh และ 2 คำที่จะทุบตี ในทำนองเดียวกันถ้าคุณตั้งค่าเคอร์เซอร์ไปยังจุดสิ้นสุดของการfoo --barทำ Alt + Backspace ในทุบตีคุณจะมีfoo --และใน zsh foo คุณจะมี Zsh เพิ่มคุณสมบัติมากมายในการทุบตี แต่ก็มีค่าเริ่มต้นบ้าจำนวนมากเพื่อแทนที่
weberc2

คำตอบ:


28

ผมพบว่าวิธีการแก้ปัญหาที่นี่: https://coderwall.com/p/h6yfda จะคัดลอกส่วนที่สำคัญที่สุดของมันในกรณีที่ลิงค์ตก

  1. ไปที่การตั้งค่าโปรไฟล์กุญแจ
  2. ตั้งค่าปุ่มซ้ายของคุณเพื่อทำหน้าที่เป็นตัวหนี
  3. ค้นหาทางลัดปัจจุบันสำหรับ⌥←หรือสร้างขึ้นมาใหม่ด้วยการตั้งค่าต่อไปนี้:
    • แป้นพิมพ์ลัด: ⌥←
    • การดำเนินการ: ส่งลำดับของ Escape
    • Esc +: b
  4. ทำซ้ำสำหรับแป้นพิมพ์ลัด⌥→ด้วยการตั้งค่าต่อไปนี้:
    • แป้นพิมพ์ลัด: ⌥→
    • การดำเนินการ: ส่งลำดับของ Escape
    • Esc +: f

1
เป็นมูลค่าการกล่าวขวัญว่ามันเป็นเรื่องเฉพาะสำหรับเทอร์มินัลอีมูเลเตอร์หนึ่งตัว - ไม่ใช่ zsh โดยทั่วไป
Hi-Angel

7

คุณกำลังมองหาคำหลักและbackward-word forward-wordดังนั้นหากคุณอยู่บนเชลล์ที่การโยงคีย์ไม่ทำงานลองbindkey -L | grep backward-wordเพื่อตรวจสอบว่ามีการกำหนดค่าไว้หรือไม่ มีข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ในการเป็นzshzle (1)

คุณสามารถตั้งค่าการผูกกุญแจด้วยตนเองโดยการพิมพ์ดังนี้:

bindkey ' Ctrl+ v Alt+ Right' คำต่อไป

bindkey ' Ctrl+ v Alt+ Left' ย้อนหลังคำ

ฉันเคยมีปัญหากับการโยงคีย์ด้วยเช่นกันและปัญหาก็เกือบทุกครั้งที่ปุ่มตัวเลือก / Alt ส่งสิ่งที่แตกต่างจาก Meta / Escape ที่คาดไว้


นอกจากนี้คุณยังสามารถใช้และemacs-forward-word emacs-backward-wordความแตกต่างคือคุณกระโดดไปข้างหน้าไปยังจุดสิ้นสุดของคำและย้อนกลับไปที่จุดเริ่มต้นของคำแทนการกระโดดเสมอที่จุดเริ่มต้นของคำ
Aalex Gabi

อันนี้เป็นทางออกที่แข็งแกร่งและสะอาดที่สุด มันสามารถปรับให้เข้ากับการแมปคีย์ชนิดต่าง ๆ และ / หรือชุดของ ssh-tmux-zsh ทุกชนิด วิธีแก้ปัญหาอื่น ๆ ที่เกี่ยวข้องกับลำดับการเข้ารหัสแบบ hard-coded จะแก้ปัญหาบางกรณีในระบบบางระบบเท่านั้น
HKTonyLee

3

ฉันไม่สามารถพูดกับ iTerm ได้ แต่สิ่งเหล่านี้เป็นกุญแจสำคัญที่ฉันใช้เพื่อแก้ไขปัญหานี้ใน GNOME Terminal บน Fedora 19 โดยใช้ ZSH 5.0.7 ด้วย Oh-my-zsh:

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

โดยที่\e== escape-key-sequence (ตามที่ระบุไว้ในส่วน 4.1.1 )

และ[== O(ตัวพิมพ์ใหญ่ O; ตามที่ระบุไว้ในส่วน4.2.1 ) ในบางกรณี สำหรับเช่นภายใต้tmuxการทดแทนนี้เป็นสิ่งจำเป็นสำหรับฉัน แต่ไม่tmuxจำเป็นต้องมีที่จะไม่มีการทดแทนและ[==[

คุณสามารถรับรหัสคีย์สำหรับลำดับได้โดยใช้catและกดลำดับที่ต้องการ ตัวอย่างเช่นผลลัพธ์ของการกด<Alt+Right>ควรตีความเช่น:

$ cat
^[[1;3C

^[== \e== escape-key-sequence

[== [ไม่มีtmuxOR [== O(ตัวพิมพ์ใหญ่ o) ด้วยtmux

1;3 == ฉันไม่แน่ใจเกี่ยวกับอันนี้ แต่มันควรหมายถึงเหตุผล <Alt>

C == ปุ่มลูกศรขวา

จากนั้นลำดับนี้จะถูกกำหนดbindkeyใน~/.zshrcไฟล์สำหรับการคงอยู่เป็นอาร์กิวเมนต์แรกและถูกผูกไว้ซึ่งหมายความว่าการกดแป้นในอาร์กิวเมนต์ที่หนึ่งจะดำเนินการคำสั่งแก้ไขเฉพาะ (หรือวิดเจ็ตในเงื่อนไข zsh) ให้กับเครื่องมือซึ่งในครั้งแรก forward-wordสายของตัวอย่างข้างต้นคือ

สิ่งที่~/.zshrcควรมาใหม่หลังจากคำสั่งสองคำสั่งต่อท้ายด้วย:

$ source ~/.zshrc

ตอนนี้สิ่งหนึ่งที่สร้างความรำคาญให้กับระบบของฉันคือชุดค่าผสมนี้ทำให้เครื่องจำลองเทอร์มินัลส่งเสียงบี๊บทุกครั้งที่มีการออกคำสั่ง

'Edit'->'Profile Preferences'->'Terminal Bell' ช่องทำเครื่องหมาย


2

สิ่งที่ดีที่สุดสำหรับฉันเกี่ยวกับการทำให้การนำทางบรรทัดคำสั่งของ iTerm2 ใช้งานง่ายขึ้นสำหรับฉัน (ฉันเป็นเด็กที่ไม่ได้เติบโตในบรรทัดคำสั่ง แต่ฉันใช้เวลามากในการแก้ไขข้อความและ IDE) ถึง:

  • ไปที่การตั้งค่า -> โปรไฟล์ -> คีย์
  • ใต้รายการของการจับคู่คีย์จะมีกล่องสำหรับเพิ่ม / ลบหรือโหลดค่าที่ตั้งไว้ (กล่องคำสั่งผสม)
  • เลือกNatural Text Editingตัวเลือกในเมนูแบบเลื่อนลง Presets

ค่าเริ่มต้นนี้เป็นกุญแจของตัวแก้ไขไปสู่การจัดเรียงมาตรฐานที่มากขึ้นโดยที่ฉันไม่ต้องแก้ไขตัวเลือกทุกตัว


0

ฉันขอแนะนำให้คุณใช้zkbdกำหนดค่าการโยงคีย์ ฉันใช้มันและAlt+ Left/ Alt+ Rightทำงานได้ดีบน iTerm2 ดูzshcontrib(1)รายละเอียดเกี่ยวกับ zkbd

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