Bash CTRL เพื่อย้ายเคอร์เซอร์ไปมาระหว่างคำ / สตริง


86

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

ฉันจะทำแบบนั้นด้วยการทุบตีได้หรือไม่?

ฉันอาจจะเขียนโค้ดได้ แต่ฉันสงสัยว่ามีบางอย่างที่ง่ายกว่า / ทำได้แล้วหรือยัง

คำตอบ:


95

ด้วยการโยงคีย์แบบอ่านบรรทัดเริ่มต้นALT+ Bย้อนกลับหนึ่งคำALT+ Fไปข้างหน้าหนึ่งคำ

การตั้งค่า Ubuntu เริ่มต้นยังให้CTRL+ ลูกศรเหมือนที่คุณคุ้นเคย เหล่านี้อยู่ใน/etc/inputrcและระบุดังนี้:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

ไม่แน่ใจว่าทำไมต้องสามคน ...


20
@bryan_ruiz: แป้นพิมพ์ที่แตกต่างกัน (ตัวเลียนแบบเทอร์มินัล ฯลฯ ) ส่งออกลำดับที่แตกต่างกัน หากต้องการดูลำดับให้กด Ctrl-v แล้วกดปุ่ม สำหรับฉันใน PuTTY Ctrl-v Ctrl-RightArrow ให้ฉัน^[OCซึ่งเหมือนกับของคุณ ในxtermฉันได้รับ^[[1;5ซึ่งเหมือนกับของโทมัส
Dennis Williamson

7
มันจะดีกว่าถ้าแก้ไข~/.inputrcแทน
svassr

1
ฉันไม่อยากจะเชื่อเลยว่าฉันจะอยู่ได้นานแค่ไหนถ้าไม่มีสิ่งนี้
Ryan Shillington

4
การแก้ไข ~ / .inputrc อาจหยุดการโหลด 'system' one (/ etc / inputrc) โปรดทราบว่าการตั้งค่า "set -o" - "set -o emacs" ควรให้การผูกคีย์สไตล์ emacs ในบรรทัดคำสั่งซึ่งตรงข้ามกับเช่น "set -o vi" (หลังจากดำเนินการนี้คุณจะต้องกด ESC ก่อนพยายามใช้ w หรือ b)
David Goodwin

5
@DavidGoodwin หลังจากการค้นหาเล็กน้อยการเพิ่ม$include /etc/inputrcจะโหลดไฟล์ inputrc ของระบบด้วย
SirGuy

42

ตามที่โทมัสอธิบายคุณสามารถเพิ่มการผูกเข้าไป/etc/inputrcได้

อีกทางเลือกหนึ่งที่จะโหลดทุกครั้งที่คุณเข้าสู่ระบบโดยวางไว้ใน~/.bashrc ลักษณะนี้:

#use ctl keys to move forward and back in words
bind '"\eOC":forward-word'
bind '"\eOD":backward-word'

ฉันได้เรียนรู้ว่าคุณสามารถใช้cat > /dev/null เพื่อดูอักขระที่แป้นพิมพ์ของคุณกำลังส่งเช่น CTRL + ลูกศรขวาแสดง:

^[OC

โดยที่^[เหมือนกับ\e นั่นคือที่มาของรหัสในbindคำสั่ง

คุณยังสามารถค้นหาการเชื่อมโยงเช่นนี้:

bind -p | grep forward-word

ทั้งหมดนี้น่ากลัวมากและฉันดีใจที่ได้ค้นพบพลังแห่งการทุบตีมากขึ้น


6
ฉันคิดว่าสิ่งนี้จะส่งผลต่อ bash เท่านั้นในขณะที่inputrcวิธีแก้ปัญหาจะใช้กับโปรแกรมอื่น ๆ ที่ใช้ readline เช่นล่าม Python และเชลล์อื่น ๆ ส่วนใหญ่ โปรดทราบว่าคุณสามารถใส่คำสั่งลงไปได้~/.inputrcหากคุณไม่มีรูทหรือไม่ต้องการให้ใช้กับผู้ใช้ทั้งหมด
Thomas

ไม่ว่าด้วยเหตุผลใดสิ่งนี้ใช้ได้ผลสำหรับฉันเมื่อฉันสลับลำดับของบรรทัดด้านบน หมายเหตุเพิ่มเติม ฉันใช้ Ubuntu 14.04LTS หลังผงสำหรับอุดรูจาก Windows 8.1
Rebecca Dessonville

2
+1 โดยเฉพาะสำหรับI learned that you can use cat > /dev/null to look at the characters that your keyboard is sending. #TIL
Sungam

3
นอกจากนี้คุณยังสามารถเพียงแค่พิมพ์readและกด Enter cat > /dev/nullเพื่อให้บรรลุผลเช่นเดียวกับ ฉันขี้เกียจเลยชอบวิธีแก้ปัญหาที่พิมพ์น้อยลง :)
theglossy1

ctrl + 4 ทำให้แมวของฉันล่ม (มันส่ง ^ /)
user1040495

4

A .inputrc ในโฮมไดเร็กทอรีของคุณจะทำให้ ctrl + left หยุดทำงานบน Ubuntu (เช่น)

เพื่อให้ทุกอย่างทำงานได้เพิ่มสิ่งต่อไปนี้ใน ~ / .inputrc:

# Include system-wide inputrc, which is ignored by default when
# a user has their own .inputrc file.
$include /etc/inputrc

เครดิตf.kowal


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