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если у вас нет мета-ключа). Это удалит только одну часть пути сразу.


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, и они также работают там.


12
Option + dдает мне ∂ на OSX
Иван Балашов

4
-1 OSX это не Ubuntu. Не стесняйтесь добавлять комментарии, но это не ответ.
wjandrea

сначала вы должны включить флажок «использовать опцию как мета-ключ» в настройках терминала (профили -> вкладка клавиатуры -> флажок)
nils petersohn

control + dна Mac Sierra
mfink

2
@IvanBalashov, если вы используете iterm, установите ключ let opt ​​в качестве esc +. Под Профили> ключи
Тесси
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.