ลบอาร์กิวเมนต์ทั้งหมดในบรรทัดคำสั่ง bash ปัจจุบัน


13

การใช้^W(unix-word-rubout) ฉันสามารถลบ "word" เดียวจากคำสั่งปัจจุบันใน bash shell ของฉันได้อย่างง่ายดาย

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

ดังนั้นฉันกำลังมองหาวิธีลบอาร์กิวเมนต์ทั้งหมด

ตัวอย่าง (เคอร์เซอร์อยู่ที่ท้ายเสมอ):

$ foo --bar "foo bar" meow
[black magic]
$ foo --bar "foo bar"
[black magic]
$ foo --bar
[black magic]
$ foo

จะเปลี่ยนเป็นตัวเลือก zsh หรือไม่? (ฉันไม่ทราบวิธีที่จะทำใน zsh ทั้งสองแบบ offhand แต่ก็มีบางบรรทัดคำสั่งแยกวิเคราะห์รหัสที่สามารถเข้าถึงได้เพื่อแก้ไขบรรทัด (หรืออย่างน้อยระบบเสร็จสมบูรณ์) ดังนั้นควรทำให้ง่ายขึ้น)
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


14

Bash มีคำสั่ง readline ที่ไม่ถูกผูกไว้โดยค่าเริ่มต้น คุณสามารถค้นหาได้ที่อ้างอิง: http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands

คำสั่งshell-backward-kill-wordคุณกำลังมองหาที่เรียกว่า คุณต้องเลือกทางลัดก่อน มาใช้Ctrlpกันเพราะมันเป็น "คำสั่งก่อนหน้า" - เหมือนกับลูกศรขึ้น

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