มีทางลัดใน 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