iTerm 2: วิธีตั้งค่าแป้นพิมพ์ลัดเพื่อข้ามไปยังจุดเริ่มต้น / สิ้นสุดบรรทัด


395

ฉันเห็นว่าCtrl+ left/ rightข้ามไปที่จุดเริ่มต้น / สิ้นสุดของบรรทัด จะเปลี่ยนสิ่งนี้เป็นCmd+ left/ ได้right arrowอย่างไร

เพื่อให้ได้รับAlt+ left/ right arrowทำงานอย่างถูกต้องสำหรับการกระโดดคำทำตามบทความนี้


ฉันอธิบายไว้ที่นี่: github.com/nikoloza/articles/blob/master/devtools/…
nikoloza

1
หากคุณต้องการให้ทางลัดเหล่านั้นทำงานใน VIM ด้วยโปรดดูคำตอบนี้: stackoverflow.com/a/9611698/991068
Razvan Grigore

คำตอบ:


735

เพิ่ม iTerm2 ในปุ่มทางลัดโปรไฟล์ต่อไปนี้

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

นี่คือภาพสำหรับผู้ที่ต้องการมัน

iTerm เพิ่มภาพที่สำคัญ


3
คุณรู้หรือไม่ว่าโค้ด / ลำดับสำหรับ Command + Delete คืออะไร (ล้างคำแนะนำ)
Steven Lu

10
ฉันตอบความคิดเห็นแรกของฉันที่อื่นโดยทั่วไปรหัสฐานสิบหก 0x15 ให้ Ctrl + U ซึ่งล้างบรรทัด อย่างไรก็ตามฉันกำลังค้นหา 0x01 Ctrl + A เพื่อรบกวนการใช้งาน Tmux ดังนั้นฉันตั้งใจจะแมปมันกับปุ่มโฮม (ฟังก์ชั่นเดียวกับ Fn + Left บนแป้นพิมพ์ Mac)
Steven Lu

7
ลำดับการหลบหนีสำหรับบ้านคือ [1 ~ และลำดับการหลบหนีสำหรับจุดสิ้นสุดคือ [4 ~
Steven Lu

3
ทำงานเหมือนมีเสน่ห์ยอดเยี่ยม!
Juto

25
การเชื่อมโยงที่ถูกต้องนั้นมี⌘← "SEND ESC SEQ" OHไว้สำหรับที่บ้านและที่⌘→ "SEND ESC SEQ" OFสิ้นสุด (ที่ไม่ใช่ตัวพิมพ์ใหญ่) จำลองนี้ที่จริงการกดปุ่ม Home และ End และการทำงานดังกล่าวจะอยู่ในทุบตีเป็นกลุ่ม ฯลฯ
ทิโมธี Zorn

433

หากต้องการข้ามไปมาระหว่างคำและจุดเริ่มต้น / สิ้นสุดของบรรทัดใน iTerm2 ให้เลือกหนึ่งในสองวิธีด้านล่าง

1. วิธีแก้ปัญหาง่ายๆ (แนะนำ)

  1. เปิดการตั้งค่า
  2. คลิกที่แท็บ "โปรไฟล์"
  3. เลือกโปรไฟล์ในรายการทางด้านซ้าย (เช่น "ค่าเริ่มต้น") และคลิกแท็บ "คีย์"
  4. คลิกเมนูแบบเลื่อนลง "ที่ตั้งไว้ล่วงหน้า" และเลือก "การแก้ไขข้อความตามธรรมชาติ"

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


2. การแม็ปคีย์ด้วยตนเอง (ขั้นสูง)

หากคุณไม่ต้องการใช้การตั้งค่าล่วงหน้า "การแก้ไขข้อความตามธรรมชาติ" ที่กล่าวถึงข้างต้นคุณสามารถแมปคีย์ที่คุณต้องการได้ด้วยตนเอง:

  1. เปิดการตั้งค่า
  2. คลิกแท็บ "คีย์"
  3. คลิกที่[+]ไอคอน

ตอนนี้คุณสามารถเพิ่มแป้นพิมพ์ลัดต่อไปนี้:

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

  • แป้นพิมพ์ลัด: +
  • การดำเนินการ: ส่ง Hex Code
  • รหัส: 0x1b 0x62

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

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

  • การรวมแป้นพิมพ์: +
  • การดำเนินการ: ส่ง Hex Code
  • รหัส: 0x1b 0x66

เลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัด

  • การรวมแป้นพิมพ์: +
  • การดำเนินการ: ส่ง Hex Code
  • รหัส: 0x01

เลื่อนเคอร์เซอร์ไปที่ท้ายบรรทัด

  • การรวมแป้นพิมพ์: +
  • การดำเนินการ: ส่ง Hex Code
  • รหัส: 0x05

ลบคำ

  • การรวมแป้นพิมพ์: +←Delete
  • การดำเนินการ: ส่ง Hex Code
  • รหัส: 0x1b 0x08

ลบบรรทัด

  • การรวมแป้นพิมพ์: +←Delete
  • การดำเนินการ: ส่ง Hex Code
  • รหัส: 0x15

เลิกทำ

  • การรวมแป้นพิมพ์: +z
  • การดำเนินการ: ส่ง Hex Code
  • รหัส: 0x1f

อย่าลืมลบการผูกก่อนหน้านี้ :

  • เปิดแท็บ“ โปรไฟล์”
  • คลิกที่แท็บย่อย” กุญแจ”
  • ลบการแมปสำหรับชุดคีย์+ และ+

2
มันใช้งานได้ดีสำหรับฉันใน iTerm2 และทำตามได้ง่ายมากขอบคุณ!
Natetronn

3
เพียงแค่ทำให้ชัดเจนว่าการผูกต้นฉบับสำหรับ⌥←ทำอย่างไร Says send Hex Codes: 0x1b 0x1b 0x5b 0x44ฉันเห็นมัน คงจะดีที่รู้ในกรณีที่คนไม่ต้องการลบสิ่งนี้
สิงหาคม

5
ข้ามไปที่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัดไม่ทำงานสำหรับฉันที่ใช้ zsh การใช้ "Hex Code" "0x01" / "0x05" ตามที่แนะนำโดยคำตอบยอดนิยมใช้งานได้สำหรับฉัน
พลิก

2
ข้ามไปยังจุดเริ่มต้นและจุดสิ้นสุดของบรรทัดไม่ทำงานสำหรับฉันเช่นกัน คำตอบยอดนิยมใช้งานได้
hisabimbola

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

259

ฉันเห็นว่ามีคำตอบที่ดีอยู่แล้ว แต่สิ่งนี้ควรให้ฟังก์ชั่น OSX ดั้งเดิมที่ใกล้เคียงที่สุดเท่าที่จะเป็นไปได้ในมากกว่าเชลล์ของคุณ ฉันตรวจสอบว่ามันใช้งานได้ใน ZSH, Bash, node, python -i, iex และ irb / pry เซสชัน (ใช้ rb-readline gem สำหรับ readline แต่ควรใช้ได้กับทุกคน)

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

ลบอักขระทั้งหมดทางซ้ายของเคอร์เซอร์

+←Deleteส่งรหัส Hex:

0x15ใช้งานร่วมกันได้มากกว่า แต่บางครั้งการทำงานคือการลบทั้งบรรทัดแทนที่จะเป็นเพียงตัวอักษรทางด้านซ้ายของเคอร์เซอร์ ฉันใช้สิ่งนี้เป็นการส่วนตัวแล้วเขียนทับ bshkey ของฉันสำหรับ^Uเพื่อลบเฉพาะสิ่งที่ด้านซ้ายของเคอร์เซอร์ (ดูด้านล่าง)

หรือ

0x18 0x7fใช้งานร่วมกันได้น้อยกว่าไม่ทำงานในโหนดและจะไม่ทำงานใน zsh ตามค่าเริ่มต้นดูด้านล่างเพื่อแก้ไข zsh (bash / irb / pry ควรใช้ได้) ทำงานตามที่ต้องการเมื่อใช้งานได้

ลบอักขระทั้งหมดทางด้านขวาของเคอร์เซอร์

+ fn+ ←Deleteหรือ+ Delete→ส่งรหัส Hex:0x0b

ลบหนึ่งคำทางซ้ายของเคอร์เซอร์

+ ←Deleteส่งรหัส Hex:

0x1b 0x08 หยุดพักใน IEX ของ Elixir ดูเหมือนว่าจะทำงานได้ดีในทุก ๆ ที่

หรือ

0x17 ทำงานได้ทุกที่ แต่ไม่หยุดที่คำปกติใน IRB และจะลบแทนจนกว่าจะเห็นพื้นที่ที่แท้จริง

ลบหนึ่งคำทางด้านขวาของเคอร์เซอร์

+ fn←Deleteหรือ+ Delete→ส่งรหัส Hex:0x1b 0x64

เลื่อนเคอร์เซอร์ไปที่ด้านหน้าของบรรทัด

+ ส่งรหัส Hex:0x01

เลื่อนเคอร์เซอร์ไปที่ท้ายบรรทัด

+ ส่งรหัส Hex:0x05

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

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

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

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

เลิกทำ

+ zส่งรหัส Hex:0x1f

การทำซ้ำโดยทั่วไปจะไม่ถูกผูกไว้ใน bash, zsh หรือ readline ดังนั้นเราสามารถตั้งค่าเป็น hexcode ที่ไม่ได้ใช้ซึ่งเราสามารถแก้ไขใน zsh

+ + Zหรือ+ yส่งรหัส Hex:0x18 0x1f

ตอนนี้วิธีการแก้ไขใด ๆ ที่ไม่ทำงาน

สำหรับ zsh คุณสามารถตั้งค่าที่มีผลผูกพันสำหรับการทำงานยังไม่ได้ + ←Deleteและ+ + Z/ + yโดยการทำงาน:

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

ฉันไม่สามารถหาวิธีแก้ปัญหาสำหรับการเพิ่มการทำซ้ำใน bash หรือ readline ดังนั้นหากใครรู้วิธีแก้ปัญหาของทั้งสองโปรดแสดงความคิดเห็นด้านล่างและฉันจะพยายามที่จะเพิ่มพวกเขามา

สำหรับทุกคนที่กำลังมองหาตารางการค้นหาเกี่ยวกับวิธีการแปลงลำดับคีย์เป็นฐานสิบหกฉันพบว่าตารางนี้มีประโยชน์มาก


2
มันมีประโยชน์จริงๆสร้างความแตกต่างอย่างมาก! ฉันอยากจะชี้ให้เห็นว่าบางคนอาจสับสนกับ$ข้างหน้าecho(แค่ลบออก?) นอกจากนั้นมันสมบูรณ์แบบ ขอบคุณ.
edmundo

1
@Christophe ดังนั้นดูเหมือนว่าการผูกกุญแจอยู่ที่นั่นอย่างที่ควรจะเป็น คุณอาจทำผิดพลาดในการเพิ่มค่าฐานสิบหกในหรือการผูกกุญแจสำหรับคำย้อนหลังจะถูกเขียนทับ เรียกใช้bindkey | grep "\^\[b"และจะแจ้งให้คุณทราบหากมีสิ่งอื่นเขียนทับทับหลังจากตั้งค่าแล้ว มันควร#=> "^[b" backward-wordเท่านั้นกลับ หากมีการเขียนทับคุณจะต้องค้นหาตำแหน่งที่ถูกเขียนทับและนำออก หากไม่สามารถทำได้คุณสามารถรันecho 'bindkey "^[b" backward-word' >> ~/.zshrcได้โดยจะเพิ่มลงในบรรทัดสุดท้ายของคุณ.zshrcจากนั้นรีสตาร์ท iTerm และควรใช้งานได้
Travis

2
@Christophe ตรวจสอบkeysแท็บในการตั้งค่า iTerm เพื่อดูว่ามันเป็นแผนที่+ กับบางสิ่งบางอย่าง ถ้าเป็นเช่นนั้นลบออก คุณสามารถทดสอบว่าคุณbทำงานอย่างถูกต้องได้อย่างรวดเร็วโดยการกดปล่อยแล้วกดesc bที่ควรข้ามคำไปทางซ้าย หรือคุณสามารถ map + แม่มดหรือ0x1b 0x42 0x1b 0x5b 0x31 0x3b 0x35 0x44ฉันตรวจสอบแล้วว่าสิ่งเหล่านี้ทำงานได้ทั้งสองอย่างสำหรับฉัน ฉันคิดว่าคุณมี+ ถูกเขียนทับใน iTerm ทั้งในprofile keysแท็บหรือkeysแท็บของคุณ
เทรวิส

3
! ที่น่าตื่นตาตื่นใจ เพิ่งเรียนรู้เกี่ยวกับเลิกทำและทำซ้ำการผูกจากที่นี่
ecbrodie

3
ฉันทำสิ่งนี้ด้วยตนเองและฉันคิดว่าเหตุใดฉันจึงไม่สามารถนำเข้าโปรไฟล์เพื่อทำสิ่งนี้ได้ จากนั้นฉันสร้างGabLeRoux / iterm2-macos-dynamic-profileตามคำแนะนำเหล่านี้ มันใช้งานได้อย่างไร้ที่ติขอบคุณ🍻
GabLeRoux

48

ทำตามกวดวิชาที่คุณระบุไว้ข้างต้นสำหรับการตั้งค่าการตั้งค่าที่สำคัญของคุณในiterm2

  1. สร้างคีย์ shorcut ใหม่
  2. เลือก "ส่งลำดับหนี" เป็นการกระทำ
  3. จากนั้นให้ตั้งค่าcmd-leftในข้อความด้านล่าง:
    • ป้อน[Hการเริ่มบรรทัด
      หรือ
    • ป้อน[Fสำหรับการสิ้นสุดบรรทัด

1
F กระโดดเพียงหนึ่งคำภายใน iterm2 ของฉัน
แมทเธียสช

1
ITerm => ค่ากำหนด => Keys
pfrank

รักสิ่งนี้! โซลูชันอื่นไม่ทำงานสำหรับฉัน ฉันใช้เวลาหลายชั่วโมงกับความผิดหวังที่ฉันไม่สามารถใช้ ctrl + a และ ctrl + e ใน iterm2 แต่ฉันไม่ต้องการยอมแพ้ปลาสำหรับมัน มันใช้งานได้ดีขอบคุณ!
FLY

โซลูชันอื่นไม่ได้ผลสำหรับฉันเช่นกัน แต่วิธีนี้ไม่ได้ผล
Braham Snyder

42

ใน iTerm 3.0.12 คุณสามารถเปลี่ยนเป็นการNatural Text Editingตั้งค่าล่วงหน้า:

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

iTerm →การตั้งค่า→โปรไฟล์→กุญแจ

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


2
คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับคำตอบของคุณได้ไหม? เช่นเดียวกับที่ตั้งไว้ล่วงหน้าสิ่งที่รวมถึงและอาจเขียนทับ?
Carles Alcolea

ขอบคุณสำหรับคำตอบ. การใช้วิธีนี้กับการปรับแต่งโปรไฟล์ของคุณเองนั้นเป็นวิธีที่ดีที่สุดในการที่คุณจะไม่คลาดเคลื่อนกับค่าเริ่มต้นและสามารถสลับโปรไฟล์เป็นโหมด "การแก้ไขข้อความแบบธรรมชาติ"
27418

29

สำหรับการอ้างอิงอย่างรวดเร็วของทุกคนที่ต้องการไปที่จุดสิ้นสุดของบรรทัดหรือจุดเริ่มต้นของบรรทัดใน iTerm2 ลิงค์ด้านบน http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html บันทึกไว้ใน iTerm2:

  • Ctrl+ A, ข้ามไปยังจุดเริ่มต้นของบรรทัดขณะที่
  • Ctrl+ E, กระโดดไปยังจุดสิ้นสุดของบรรทัด

ทำไมคำตอบนี้ไม่ได้อยู่ด้านบน?
Gangadhar JANNU

1
@GangadharJannu: เห็นด้วยทั้งหมด มันตรงไปยังคำตอบ ควรอยู่ด้านบน
Catbuilts

10

ฉันใช้คำตอบของเทรวิสและฉันสร้างโปรไฟล์แบบไดนามิกที่คุณสามารถนำเข้าได้ตามคำแนะนำ

GabLeRoux / iterm2-MacOS ไดนามิกรายละเอียด

คำแนะนำอยู่ใน readme และเร็วกว่าที่จะนำเข้าสิ่งนี้มากกว่าที่จะเพิ่มด้วยตนเองทั้งหมด ฉันทำสิ่งนี้เป็นคำตอบตามคำขอ @ gooli เพราะสิ่งนี้ซ่อนอยู่ในความคิดเห็น หวังว่าคุณจะสนุกกับเรื่องนี้ 🍻


2
กลับมาที่นี่อีกหนึ่งปีต่อมาและดีใจที่ได้พบสิ่งนี้!
elifiner

9

เพียงเพื่อช่วยเหลือผู้ที่มีปัญหาเดียวกัน แต่ใช้เชลล์ Zsh กับ iTerm 2 โดยเฉพาะปรากฎว่า Zsh อ่านไม่/etc/inputrcถูกต้องและไม่เข้าใจการเชื่อมโยงคีย์ใด ๆ ที่คุณตั้งค่าผ่านการตั้งค่า!

ในการแก้ไขปัญหานี้คุณต้องเพิ่มการเชื่อมโยงคีย์ใน.zshrcไฟล์ของคุณเช่น:

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

สังเกตเครื่องหมายแบ็กสแลชในตัวอย่างด้านบนก่อน "e" บทความที่ลิงก์ไม่แสดงดังนั้นให้เพิ่มลงใน.zshrcไฟล์ของคุณเมื่อเพิ่มการเชื่อม


4

การผูก emacs แบบเก่ายังคงสามารถทำงานได้ในเทอร์มินัล iterm2 และ os x:

การตั้งค่า -> โปรไฟล์ -> คีย์ (แท็บย่อยในโปรไฟล์)

  • ตั้งค่าLeft/Right option <kbd>⌥</kbd> key acts as +Esc(คล้ายกันใน os x terminal)

สิ่งนี้ควรเปิดใช้งานalt- fและalt- bสำหรับการย้ายคำด้วยคำพูด (ยังctrl- aและctrl- eทำงานตามปกติเสมอ)

หากตั้งค่าเป็นการmetaเชื่อมโยงเก่าเหล่านั้นจะทำงานในขณะที่การเชื่อมโยง iterm2 บางรายการไม่พร้อมใช้งาน


2

ตามที่อธิบายไว้ที่นี่คุณสามารถทำได้ด้วยขั้นตอนง่าย ๆ :

ตามค่าเริ่มต้นการข้ามคำ (ตัวเลือก + →หรือ←) และการลบคำ (ตัวเลือก + แบ็กสเปซ) ไม่ทำงาน หากต้องการเปิดใช้งานเหล่านี้ให้ไปที่ "iTerm →การตั้งค่า→โปรไฟล์→คีย์→โหลดที่ตั้งไว้ล่วงหน้า ... →การแก้ไขข้อความตามธรรมชาติ→บูม! หัวระเบิด"


2

สิ่งเดียวที่ทำงานเพื่อย้ายไปยังจุดเริ่มต้นและจุดสิ้นสุดคือ

⌘← "SEND ESC SEQ" OH- เพื่อเลื่อนไปยังจุดเริ่มต้นของบรรทัด
⌘→ "SEND ESC SEQ" OF- เพื่อเลื่อนไปยังจุดสิ้นสุดของบรรทัด


1

bind -p จะแสดงรายการของคีย์ Escape ที่ถูกผูกไว้ในเชลล์ของคุณซึ่งอาจช่วยให้คุณมีแนวคิด / คำค้นหาเพิ่มเติม


5
bind -pจะทำงานเฉพาะในบอร์นหอย (ทุบตีดวลจุดโทษ) สำหรับ zsh, tcsh csh bindkeyใช้
เทรวิส


0

สำหรับฉันชุดค่าผสมต่อไปนี้ใช้ได้:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

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