มีทางลัดใน bash และ zsh เพื่อลบองค์ประกอบหนึ่งของเส้นทางหรือไม่? ตัวอย่างเช่นถ้าฉันพิมพ์ls ~/local/color/
และเคอร์เซอร์อยู่ที่ท้ายบรรทัดมีทางลัดในการลบcolor/
ที่ท้ายหรือไม่ เป็นการดีที่ฉันต้องการโซลูชันทั้งในโหมด vi และโหมด emacs
มีทางลัดใน bash และ zsh เพื่อลบองค์ประกอบหนึ่งของเส้นทางหรือไม่? ตัวอย่างเช่นถ้าฉันพิมพ์ls ~/local/color/
และเคอร์เซอร์อยู่ที่ท้ายบรรทัดมีทางลัดในการลบcolor/
ที่ท้ายหรือไม่ เป็นการดีที่ฉันต้องการโซลูชันทั้งในโหมด vi และโหมด emacs
คำตอบ:
คำสั่งที่ใช้บ่อยที่สุดในโหมด bash emacsเริ่มต้นสำหรับแป้นพิมพ์ที่ใช้บ่อยที่สุด:
นอกจากนี้ยังมี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
unix-filename-rubout
เป็นคำตอบที่ถูกต้องสำหรับคำถามที่ถามเนื่องจากลบเครื่องหมายทับหรือช่องว่างในขณะที่Alt-BkSpc
จะหยุดที่อักขระเช่นยัติภังค์, ขีดล่าง, จุดเป็นต้น
โดยค่าเริ่มต้นทุบตี (และฉันคาดเดา 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.
db
ในสถานการณ์นี้ใน bash ฉันพบvi-backward-kill-word
ใน zsh เป็นสิ่งที่ฉันต้องการและสะดวกกว่าตั้งค่าโหมด vi ใน bash แต่ฉันยังต้องการหาทางลัดโหมด emacsเพื่อจุดประสงค์นี้ในการทุบตี
db
จะทำในบางกรณี
bindkey [key] vi-backward-kill-word