Bash: ฉันจะเลื่อนเคอร์เซอร์ไปทางซ้ายทีละคำได้อย่างไร


14

ใน OSX ฉันสามารถoptionกดปุ่มค้างไว้และกดปุ่มเคอร์เซอร์ซ้ายจนกว่าฉันจะไปถึงคำที่ฉันต้องการแก้ไข (หรือใน Vi ฉันสามารถกดbได้ แต่ฉันไม่สามารถหาวิธีการทำสิ่งนี้ได้ใน Terminal ยัง ...


คุณสามารถดูรายการการรวม readline ทั้งหมดในหน้านี้รวมถึงคำแนะนำวิธีการปรับแต่งการผูกของคุณเอง
jasonwryan

คำตอบ:


26

ในการตั้งค่าการเชื่อมโยงคีย์: ก่อนอื่นคุณต้องค้นหารหัสคีย์ที่ลำดับCtrl+ Leftคีย์สร้างขึ้น เพียงใช้คำสั่งcatเพื่อปิดการรบกวนใด ๆ กับการผูกคีย์ที่มีอยู่แล้วพิมพ์ลำดับของคีย์ ในระบบของฉัน (Linux) ดูเหมือนว่า:

$ cat
^[[1;5D

กดCtrl+ dเพื่อออกจากแมว ตอนนี้คุณได้ค้นพบแล้วว่า Ctrl-Left ใช้รหัส 6 คีย์

  • หลบหนี (^ [)
  • [
  • 1
  • ;
  • 5
  • D

ตอนนี้คุณสามารถออกคำสั่ง bind ได้:

bind '"\e[1;5D": backward-word'

6
คุณสามารถเพิ่ม `` "\ e [1; 5D": ย้อนกลับคำว่า '' ลงใน $ HOME / .inputrc เพื่อให้ได้ผลถาวรหากคุณต้องการ
llhuii

@llhuii +1, ฉันลืมพูดถึงสิ่งนั้น!
daniel kullmann

2
+1 สำหรับวิธีที่ยืดหยุ่นที่สุดในการเชื่อมโยงคีย์ผสมเองทุกที่!
Irfy

14

backward-wordฟังก์ชั่นทุบตีที่คุณต้องการคือ คุณสามารถเรียกใช้bind -q backward-wordเพื่อรับรายการคีย์ที่ผูกไว้กับฟังก์ชันนั้น การรวมทั่วไปอย่างหนึ่งคือEsc+b

นอกจากนี้เทอร์มินัลจำนวนมากสนับสนุนCtrl+ Left(ปุ่มลัดเดียวกับที่คุณสามารถใช้ใน X เพื่อข้ามไปข้างหลังด้วยคำ)


1
ตกลงมันจะส่งคืนbackward-word can be invoked via "\eb".แต่ฉันจะผูกส่วนควบคุม + ซ้ายแทน Esc + b ได้อย่างไร นอกจากนี้ข้อเสียเปรียบอย่างหนึ่งของ Esc + b ที่ฉันเห็นอยู่แล้วคือฉันต้องละทิ้งคีย์ Esc ทุกครั้งที่ฉันสามารถย้อนกลับคำได้ไม่มีวิธีที่ดีกว่านี้หรือไม่
ชาวนิปปอน

1
มีวิธีที่ดีกว่า? โดยธรรมชาติ: set editing-mode vi:)
jasonwryan

3
@nipponese "esc b" สามารถใช้บนแป้นพิมพ์เป็น ALT-b สิ่งนี้อาจจำเป็นต้องใช้เฉพาะ alt ซ้ายหรือขวาขึ้นอยู่กับการกำหนดค่าของคุณดังนั้นให้ลองทั้งสองอย่าง
Random832

8

ทางลัดเริ่มต้นที่สำคัญในการทุบตีสำหรับbackword-wordเป็น+Alt bผลเดียวกันสามารถ achived กับ+Esc bคุณควรลองก่อนที่จะแก้ไขการโยงคีย์ของคุณ

ใช้bindคำสั่งเพื่อแก้ไขหรือbind -q [name]เพื่อรับ keybind ปัจจุบันของการกระทำที่เฉพาะเจาะจง


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