Можно ли настроить ctrl-w (удалить слово)?

40

Обычно Ctrl+ Wудаляет обратно в последний пробел.

Можно ли настроить его на использование дополнительных символов, например /?

Изменить: Чтобы быть более понятным: я не хочу настраивать ключ для него, я хочу, чтобы удаление /также было включено.

Пример:

vim /foo/bar^W
vim /foo/
SkaveRat
источник

Ответы:

29

Для меня было полезно добавить следующие строки в мой .bashrc

stty werase undef
bind '\C-w:unix-filename-rubout'

Вам нужна строка undef, иначе bash игнорирует вашу новую привязку для C-w

мКМ
источник
3
Следует отметить, что stty werase undefэто остановит вас от использования Cw в любой программе (bind позволит вам использовать в readline)
0fnt
24

Вы должны быть в состоянии использовать Esc, затем Backspace, чтобы удалить слова, разделенные косой чертой.

Вы можете изменить это, поместив это в вас .bashrc:

bind '\C-f:unix-filename-rubout'

Теперь используйте, Ctrl+f чтобы делать то, что вы хотите.

Не сейчас
источник
1
спасибо, это команда, которая работает. Есть ли способ перезаписать команду Cw? Если я изменю его на C-w:..., то по-прежнему включается поведение удаления по умолчанию на следующий пробел. На другом ключе (например, F), если работает нормально.
SkaveRat
Я не думаю, что Ctrl-W управляется только оболочкой. Может также управляться tty. Каковы ваши настройки tty stty -a? у вас есть control-w как символ по умолчанию для werase? Если вы удалите этот параметр из tty с помощью comman stty werase undef, то bash будет работать так, как ожидается?
eppesuig
23

Для этой конкретной проблемы вы также можете использовать:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

Хорошая ссылка: Приключения со стиранием слова Баша

fedorqui
источник
2
Потрясающе! Большинство других ответов предполагают повторное связывание Ctrl+wили Ctrl + b или что-то unix-filename-rubout, но гораздо лучше, если есть встроенная привязка: M-Backspace (Alt + Backspace или Esc Backspace)
Colin D Bennett
У меня не сработало
ethanjyx
@ethanjyx ооо Я работаю над GNU Bash. Вы тоже в этом аромате?
Федорки
7

С помощью bash вы можете получить желаемый эффект, поместив в файл ~ / .bashrc следующее:

bind '"\C-w":backward-kill-word'

Нажмите CTRL+Vи комбинацию клавиш, чтобы увидеть, как выглядит ваш эмулятор терминала. Например, CTRL+bkspможет интерпретироваться по-разному на разных терминалах, например ^Hили ^?. ^Характер такой же , как CTRL.


источник
Я думаю, что я не был достаточно конкретен с моим вопросом. Я хотел иметь /в качестве дополнительного символа остановки, а не способ привязать команду удаления слова к другому ключу. Я отредактировал свой вопрос
SkaveRat
Используя обратное-kill-word, связанное с \ Cw, он удалит назад до последней заданной косой черты, если присутствует в слове, и удалит слова, разделенные пробелом. Это не то, что вы хотели?
Моя система использует ^F- но использование "\^F"в приведенном выше сценарии не работает
SkaveRat
1
CtrlСимвол записывается \Cв сценарии , а не \^.