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


76

Розглянемо наступний командний рядок bash, де ^ позначає розташування курсору:

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

Я хотів би створити інший файл з тим же повідомленням. Як я можу видалити поточне слово з місця розташування курсору до наступного пробілу? Чи є також ярлик для зворотного видалення, сформуйте курсор до першого пробілу назад?

Оновлення: ctrl + wстирає назад, але яка ярлик стирає одне слово вперед?


2
Ctrl u- це варіант для видалення з місця розташування курсору до початку ...
горіх про 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 працює для мене
ricab

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 + don mac Sierra
mfink

2
@IvanBalashov, якщо ви використовуєте iterm, встановіть ваш ключ дозволити як esc +. У розділі Профілі> клавіші
tessie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.