14

Когда в оболочке (bash) - я хочу, чтобы Ctrl-Backspace связывался для "удаления слова назад". Является ли это возможным?

Редактировать:

Я использую konsole - терминал в KDE.

8 ответов8

9

Я нашел эту тему через Google, но ответ был не то, что я хотел услышать. Итак, я поиграл:

На моем терминале нормальный backspace отправляет ^H , а ctrl+backspace отправляет ^? , Так что это просто случай повторного связывания ^? удалить слово, которое по умолчанию доступно через Ctrl+W.

Первый (неудачная попытка):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

Итак, поэтому это должно работать:

$ bind '"\C-?":unix-word-rubout'

Однако это не ... кто-нибудь может объяснить?

Вторая (успешная) попытка:

$ bind '"\C-?":"^W"'

Где ^W - это буквальное / необработанное ^W (нажмите Ctrl +V, затем Ctrl +W, чтобы он появился).

7

Почему бы просто не использовать Alt+Backspace или Ctrl+W , которые уже отображаются в большинстве терминалов. Не уверен насчет консоли. Xmodmap (man xmodmap) может также использоваться для переназначения других пользовательских ключей. (Как ни парадоксально, xmodmap не может переназначить Backspace очень хорошо, потому что терминал переопределяет сопоставления, но он хорошо работает с большинством ключей ...).

4

Просто отредактируйте ваш ~/.inputrc (вам может понадобиться создать его или скопировать туда в /etc/inputrc ), чтобы он содержал:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

Это также отобразит Ctrl+Delete, чтобы удалить слово рядом с курсором.

4

Здесь есть несколько хороших ответов, но я решил это в Konsole с помощью Настройки-> Редактировать текущий профиль-> Клавиатура-> Изменить, а затем добавил отображение из Backspace+Control в \x17 . (Я нашел код ASCII для Ctrl-w, используя showkey --ascii .)

3

Это зависит от того, что видит Баш. При обычном взаимодействии с терминалом bash не видит, какие клавишные модификаторы вы нажали, только получившийся символ. Backspace уже такой же, как control-H, например. Удерживать нажатой клавишу Shift или контроль не имеет значения.

ОДНАКО ваше терминальное приложение (xterm? CMD? Терминал? Шпатлевка? Зависит от вашей ОС) может видеть ваши нажатия клавиш и может иметь способ сопоставить комбинацию клавиш control-backspace с чем-то, что bash может отличить, кроме backspace.

2

Попробуй это:

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

При желании добавьте следующее в ~/.inputrc, чтобы сделать его постоянным:

"\C-_": backward-kill-word

Работает на bash 4.3.11 в Kubuntu 14.04

0

На большинстве терминалов CTRL+W уже должен удалить слово назад. Это работает с xterm, и я думаю, что это работает с konsole. CTRL+W - это стандартная привязка клавиш в текстовой программе, которая будет работать с vim в режиме вставки, emacs и каждой оболочке.

0

В консоли:

  • нажмите Settings -> Edit current profile
  • щелкните вкладку «Клавиатура» -> [Edit...]
  • нажмите кнопку [Add] и в столбце « Key Combination введите Backspace+Ctrl . В столбце Output введите 0x08 (который обычно является символом возврата )

Теперь вы должны иметь возможность сопоставить этот ключ с backward-kill-word через

# ~/.bashrc

bind '"\x08":backward-kill-word'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .