Видалити весь аргумент у поточному командному рядку bash


13

Використовуючи ^W(unix-word-rubout), я можу легко видалити одне "слово" з поточної команди в моїй команді bash.

Однак при роботі з цитованими аргументами, що містять пробіли (або аргументовані аргументи, що містять пробіли, пропущені косою косою рисою), це не працює добре, оскільки видаляє лише одне слово, а не весь аргумент.

Тому я шукаю спосіб видалити цілий аргумент.

Приклад (курсор завжди в кінці):

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

Чи є перехід на zsh варіант? (Я не знаю, як це зробити в zsh як назовні, але у нього є код розбору командного рядка, доступний редактору рядків (або принаймні системі завершення), так що це повинно бути простіше).
Жил "ТАК - перестань бути злим"

Відповіді:


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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.