Bash: удалить слово перед курсором

76

Рассмотрим следующую командную строку bash, где ^ обозначает местоположение курсора:

svn commit -m very/long/path/to/some/file "[bug 123456] Fix the pixel issue"
              ^

Я хотел бы зафиксировать другой файл с тем же сообщением. Как я могу удалить текущее слово, от местоположения курсора до следующего пробела? Есть также ярлык для удаления назад, от курсора к первому пробелу назад?

Обновление: ctrl + wстирает в обратном направлении, но какой ярлык стирает одно слово вперед?

Адам Матан
источник
2
Ctrl uэто опция для удаления из позиции курсора в начало ...
Nutty о Natty
23
Попробуйте alt + d, это может быть полезно, когда установлен режим редактирования emacs.
@Mik, как ты включаешь режим emacs?
Адам Матан,
@AdamMatan set -o emacsвключает его, но обычно это значение по умолчанию; если нет, вы можете поместить эту строку в .bashrcили .bash_aliases, затем получить исходный файл или перезагрузить терминал. Однако тогда ярлыки, к которым вы можете привыкнуть в режиме vi, будут недоступны, хотя такие, как ctrl + c, будут доступны, поскольку они не являются ярлыками Bash.

Ответы:

56

Я ответил на аналогичный вопрос на unix.stackexchange.com :

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'

Единственное отличие состоит в том, что вместо этого вы должны использовать команду «shell-kill-word», так как хотите удалить вперед.

Существует также команда «kill-word» с сочетанием клавиш Meta+ d(попробуйте Esc+, dесли у вас нет мета-ключа). Это удалит только одну часть пути сразу.

Nykakin
источник
31
У меня работает Alt-d
Рикаб
8
Как правило, в мире клавиатур, где Meta не существует, Alt = Meta.
Nate CK
В мире, где у вас много разных клавиатур, удобный и довольно полезный факт заключается в том, что Esc в качестве префикса также действует как Meta.
tripleee
1
Короче говоря, добавьте, например, это в ваш файл $ HOME / .inputrc:, "\ew": shell-kill-word который заставит Alt-w переслать слово вперед, так же, как CTRL-w, наоборот, удалит слово (и в отличие от Alt-d, который переместит удаление, но остановится, например, а / или - и другие символы)
user964970
7

Протестировал и esc+ dи alt/ opt+ dна OSX Mavericks, и они также работают там.

visyoual
источник
12
Option + dдает мне ∂ на OSX
Иван Балашов
4
-1 OSX это не Ubuntu. Не стесняйтесь добавлять комментарии, но это не ответ.
wjandrea
сначала вы должны включить флажок «использовать опцию как мета-ключ» в настройках терминала (профили -> вкладка клавиатуры -> флажок)
nils petersohn
control + dна Mac Sierra
mfink
2
@IvanBalashov, если вы используете iterm, установите ключ let opt ​​в качестве esc +. Под Профили> ключи
Тесси