Чи можна налаштувати ctrl-w (видалити слово)?


40

Як правило, Ctrl+ Wвидаляє назад до останнього пробілу.

Чи можна налаштувати його на використання додаткових символів, таких як /?

Редагування: Щоб було більш зрозуміло: я не хочу налаштувати ключ для нього, я також хочу, щоб видалення було зупинено /.

Приклад:

vim /foo/bar^W
vim /foo/

Відповіді:


29

Що для мене спрацювало - додати наступні рядки до мого .bashrc

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

Вам потрібна лінія undef, інакше bash ігнорує вашу нову прив'язку для C-w


3
Слід зазначити, що вам не stty werase undefвдасться використовувати Cw в будь-якій програмі (прив'язка дозволить вам використовувати у режимі читання)
0fnt

24

Ви повинні мати можливість використовувати Esc, а потім зворотну простір, щоб видалити слова, розмежовані косою рисою.

Ви можете змінити це, вклавши це у себе .bashrc:

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

Тепер використовуйте, Ctrl+f щоб робити те, що хочете.


1
дякую, це команда, яка працює. чи є спосіб перезаписати команду Cw? Якщо я зміню це на C-w:..., типова поведінка видалення до наступного пробілу все ще починається. На іншому ключі (наприклад, F), якщо він працює добре.
SkaveRat

Я не думаю, що ctrl-w управляється оболонкою поодинці. Це може управляти також tty. Які твої налаштування показано stty -a? чи є у вас контроль-w як char за замовчуванням для 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/               # ...

Гарна довідка: Пригоди зі стиранням слова Баша


2
Дивовижно! Більшість інших відповідей пропонують перезавантаження Ctrl+wабо Ctrl + b або щось таке unix-filename-rubout, але настільки краще, що є вбудована прив'язка: M-backspace (Alt + backspace або Esc backspace)
Colin D Bennett

Не працював для мене
ethanjyx

@ethanjyx о. Я працюю над GNU bash. Ви теж в цьому ароматі?
fedorqui

7

За допомогою bash ви можете отримати бажаний ефект, помістивши у файл ~ / .bashrc файл наступне:

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

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


Я думаю, що я не був досить конкретним у своєму питанні. Я хотів мати /додатковий символ зупинки, а не спосіб прив’язати команду delete-word до іншої клавіші. Я редагував своє запитання
SkaveRat

Використовуючи слово "назад-kill", прив'язане до \ Cw, воно буде стерте назад до останнього заданого косого кута, якщо воно присутнє у слові, і воно стерне слова, розмежовані пробілом. Це не те, чого ти хотів?

Моя система використовує ^F- але використання "\^F"в сценарії вище не працює
SkaveRat

1
CtrlСимвол записується \Cв сценарії , а не \^.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.