วิธีลบส่วนหนึ่งของเส้นทางในเชลล์แบบโต้ตอบได้อย่างไร


19

มีทางลัดใน bash และ zsh เพื่อลบองค์ประกอบหนึ่งของเส้นทางหรือไม่? ตัวอย่างเช่นถ้าฉันพิมพ์ls ~/local/color/และเคอร์เซอร์อยู่ที่ท้ายบรรทัดมีทางลัดในการลบcolor/ที่ท้ายหรือไม่ เป็นการดีที่ฉันต้องการโซลูชันทั้งในโหมด vi และโหมด emacs

คำตอบ:


25

คำสั่งที่ใช้บ่อยที่สุดในโหมด bash emacsเริ่มต้นสำหรับแป้นพิมพ์ที่ใช้บ่อยที่สุด:

การเคลื่อนไหว

  • Ctrl- pหรือUp: คำสั่งก่อนหน้า
  • Ctrl- n, หรือDown: คำสั่งถัดไป
  • Ctrl- bหรือLeft: อักขระก่อนหน้า
  • Ctrl- f, หรือRight: ตัวละครถัดไป
  • Alt- b: คำก่อนหน้า
  • Alt- f: คำต่อไป
  • Ctrl- aหรือHome: เริ่มต้นคำสั่ง
  • Ctrl- e, หรือEnd: สิ้นสุดคำสั่ง

การแก้ไข

  • BkSpc: ลบอักขระก่อนหน้า
  • Ctrl- dหรือDel: ลบตัวละครปัจจุบัน
  • Alt- BkSpc: ลบคำไปทางซ้าย
  • Alt- d: ลบคำไปทางขวา
  • Ctrl- u: ลบเพื่อเริ่มต้นคำสั่ง
  • Ctrl- k: ลบถึงสิ้นสุดคำสั่ง
  • Ctrl- y: วางแปะสุดท้าย

หนังสือรวบรวมเรื่อง

  • Cltr- /: เลิกทำ
  • Cltr- r: การค้นหาประวัติย้อนหลังที่เพิ่มขึ้น

2
Complement: ตั้งค่าช็อตคัตเพื่อจุดประสงค์นี้ใน zshbindkey [key] vi-backward-kill-word
Vayn

ขอบคุณ ฉันเพิ่มสิ่งนี้ลงในไฟล์ ~ / .zshrc ของฉันและทำงานได้ดีสำหรับฉันเมื่อฉันกด Alt + Backspace: bindkey "^ [^?" VI-ย้อนหลังฆ่าคำ มันไม่เหมาะ
Tim Stewart

Alt-Bckspc และ Alt-d ทำงานได้ดีกับไฟล์พา ธ ที่ฉันได้ลองใช้ (เมื่อทุบตี)
เอียง

10

นอกจากนี้ยังมีunix-filename-ruboutสำหรับReadline!

# in ~/.inputrc
# press ctrl-b to delete unix filename parts
# see: man bash | less -p 'unix-filename-rubout' and
#      http://www.calmar.ws/vim/vi-bash.html
set editing-mode vi
set keymap vi
"\C-b": unix-filename-rubout

2
IMHO unix-filename-ruboutเป็นคำตอบที่ถูกต้องสำหรับคำถามที่ถามเนื่องจากลบเครื่องหมายทับหรือช่องว่างในขณะที่Alt-BkSpcจะหยุดที่อักขระเช่นยัติภังค์, ขีดล่าง, จุดเป็นต้น
Steve

6

โดยค่าเริ่มต้นทุบตี (และฉันคาดเดา zsh) จะอยู่ในโหมด emacs คุณสามารถลองสิ่งนี้:

Esc + bจะวางเคอร์เซอร์กลับหนึ่งคำ Ctrl + kจะลบจนกว่าจะสิ้นสุดบรรทัด

เชลล์สมัยใหม่ส่วนใหญ่ (เช่น bash) จะใช้คุณสมบัติการแก้ไขบรรทัดคำสั่งขั้นสูง คำสั่งเหล่านั้นใกล้เคียงกับการแก้ไข emacs (Ctrl + A สำหรับการเริ่มต้นบรรทัด, Ctrl + E สำหรับการสิ้นสุดบรรทัด, ... )

หากคุณคุ้นเคยกับโปรแกรมแก้ไขแบบ vi คุณสามารถลองใช้โหมด vi ได้

set -o vi

มันให้โหมดเหมือน vi ของเชลล์ (โหมดคำสั่ง / โหมดแทรก) และคุณสามารถเข้าถึงคำสั่งมาตรฐาน (d สำหรับลบ, r สำหรับแทนที่, ... )

ในโหมด Vi ต่อไปนี้เป็นวิธีที่คุณจะทำในสิ่งที่คุณอธิบาย:

Esc (command mode); d; b.

1
ฉันจะไม่พูดว่า "การแก้ไขบรรทัดคำสั่งมากยิ่งขึ้นมีประสิทธิภาพและครบถ้วน vi โหมด" emacs โหมดมีคำสั่งที่จะทำทุกสิ่งที่คุณสามารถทำได้ในโหมด vi
enzotib

ฉันยอมรับว่าฉันถูกพาไปเล็กน้อย ฉันจะใช้ถ้อยคำนี้ใหม่
rahmu

ขอบคุณที่เตือนฉันว่ามีโหมด vi ใน bash ดังนั้นฉันสามารถใช้dbในสถานการณ์นี้ใน bash ฉันพบvi-backward-kill-wordใน zsh เป็นสิ่งที่ฉันต้องการและสะดวกกว่าตั้งค่าโหมด vi ใน bash แต่ฉันยังต้องการหาทางลัดโหมด emacsเพื่อจุดประสงค์นี้ในการทุบตี
Vayn

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