วิธีนำทางคำสั่งยาว ๆ ให้เร็วขึ้น?


136

มีวิธีเร่งความเร็วการนำทาง Linux CLI หรือไม่เมื่อฉันต้องป้อนคำสั่งยาว ๆ ? ฉันเพียงแค่ใช้ลูกศรตอนนี้และ - ถ้าฉันมีคำสั่งยาวมันต้องใช้เวลาพอสมควรตั้งแต่เริ่มต้นของคำสั่งจนถึงตรงกลาง

มีวิธีการเช่นข้ามไปที่ตรงกลางของคำสั่งโดยไม่ใช้ลูกศรหรือไม่

คำตอบ:


174

การโยงคีย์การแก้ไขบรรทัดที่มีประโยชน์บางอย่างที่จัดเตรียมโดยไลบรารีReadline :

  • Ctrl-A: ไปที่จุดเริ่มต้นของบรรทัด
  • Ctrl-E: ไปที่ท้ายบรรทัด
  • Alt-B: ข้ามไปข้างหลังหนึ่งคำ
  • Alt-F: ข้ามไปข้างหน้าหนึ่งคำ
  • Ctrl-U: ลบที่จุดเริ่มต้นของบรรทัด
  • Ctrl-K: ลบไปที่ท้ายบรรทัด
  • Alt-D: ลบต่อท้ายคำ

7
+1 เนื่องจากใช้งานได้แม้ในบางกรณี ctrl-arrows ไม่ทำงาน ควรทราบสำหรับscreenผู้ใช้ Ctrl-A กลายเป็น Ctrl-A A.
enzotib

3
หากต้องการยกเลิกการลบ (หรือย้ายข้อความโดยการลบ) ให้ใช้ Ctrl + Y.
Lekensteyn

7
Ctrl + ลูกศรขวา, Ctrl + ลูกศรซ้ายที่ควรพูดถึง
แม็ค

3
ใน Ubuntu ที่ใช้ Gnome และ GnomeTerminal จะAlt-Aเปิดเมนูแทนการเลื่อนเคอร์เซอร์ คุณใช้Alt-Aกับ Gnome อย่างไร ฉันหมายถึง Gnome เป็นค่าเริ่มต้นดังนั้นจึงเป็นไปได้ว่าใครก็ตามที่อ่านข้อความนี้จะเรียกใช้เทอร์มินัลใน Gnome
เจสัน

1
หากคุณกำลังเชื่อมต่อกับ Ubuntu จาก OS X ผ่าน SSH คุณอาจต้องใช้ "Esc" แทน Ctrl เช่น Esc-A, Esc-E และอื่น ๆ นี่เป็นเรื่องจริงสำหรับ iTerm และ Terminal
Fred Clausen

77

ทางลัดเพิ่มเติมจากที่นี่

Ctrl + a  go to the start of the command line
Ctrl + e  go to the end of the command line
Ctrl + k  delete from cursor to the end of the command line
Ctrl + u  delete from cursor to the start of the command line
Ctrl + w  delete from cursor to start of word (i.e. delete backwards one word)
Ctrl + y  paste word or text that was cut using one of the deletion shortcuts (such as the one above) after the cursor
Ctrl + xx  move between start of command line and current cursor position (and back again)
Alt + b  move backward one word (or go to start of word the cursor is currently on)
Alt + f  move forward one word (or go to end of word the cursor is currently on)
Alt + d  delete to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + c  capitalize to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + u  make uppercase from cursor to end of word
Alt + l  make lowercase from cursor to end of word
Alt + t  swap current word with previous
Ctrl + f  move forward one character
Ctrl + b  move backward one character
Ctrl + d  delete character under the cursor
Ctrl + h  delete character before the cursor
Ctrl + t  swap character under cursor with the previous one

ขอบคุณสำหรับรายการที่ตรงไปตรงมา chit-chat-less นี้
neverMind9

14

หากคุณเป็นผู้ใช้ vi [m] และผู้ใช้ bash คุณอาจพบว่ามีประโยชน์ในการสร้าง readline (ใช้โดย bash) ใช้การแก้ไขแบบ vi โดยการเพิ่มset editing-mode viลงในไฟล์~/.inputrcหรือของคุณ /etc/inputrcหรือคุณก็อาจจะทำให้การแก้ไขการใช้ทุบตี vi set -o viสไตล์โดยใช้คำสั่งทุบตี เพิ่มคำสั่งลงใน~/.bashrcไฟล์ของคุณเพื่อให้พฤติกรรมคงอยู่

หากคุณเป็นผู้ใช้ zsh ให้เพิ่มไฟล์bindkey -vของคุณ.zshrcเพื่อการแก้ไขแบบ vi


8

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


1

ส่งข้อมูลโค้ดด้านล่างใน. bashrc ของคุณ Ctrl-a ข้ามไปยังจุดเริ่มต้นและกด Ctrl-a อีกครั้งข้ามไปที่กลาง

jump_mid() {
    if [ "$READLINE_POINT" -eq "0" ]; then
        LEN=${#READLINE_LINE}
        POS=$(($LEN / 2))
        READLINE_POINT=$POS
    else
        READLINE_POINT=0
    fi
}
bind -x '"\C-a" : jump_mid'

หรือหากคุณต้องการใช้ Ctrl-Something เพื่อข้ามไปที่กึ่งกลางโดยตรงให้เปลี่ยนรหัสเป็น:

jump_mid() {
    LEN=${#READLINE_LINE}
    POS=$(($LEN / 2))
    READLINE_POINT=$POS
}

และผูกกับสิ่งที่แตกต่างจาก Ctrl-a

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