Удалить весь аргумент в текущей командной строке 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
ThiefMaster
источник
Является ли переключение на 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". Вы должны сначала выбрать ярлык. Давайте использовать Crtl + p, так как это «предыдущая команда» - то же самое, что и стрелка вверх.

bind '"\C-p": shell-backward-kill-word'
Nykakin
источник