2012-06-11 4 views
11

Я бы хотел отобразить Ctrl - w до kill-region в Bash 4.2. По умолчанию этот ключ привязан к unix-word-rubout (удалять слово назад). По словам руководства, переназначение должно быть возможным с bind командой, которая имеет опцииКак я могу развязать и переделать C-w в Bash?

-u функция UNBIND все ключи, связанные с именем функции.

-r keyseq Удалить любое текущее связывание для keyseq.

Я попытался bind -r "\C-w" и bind -u unix-word-rubout, но ключ не снят с охраной и, как bind -P | grep unix-word-rubout показывает, что не было никаких изменений в отображении.

Я играл с bind немного, и я могу отвязать другие встроенные ключи, но не Ctrl - ж.

ответ

13

Ctrl - ш связан в stty к werase. Сначала вам нужно отпереть его.

stty werase undef 
bind '"\C-w":kill-region' 
11

По умолчанию, Readline пытается связать управляющие символы специально обрабатываются драйвером терминала ядра их эквиваленты чтения строки. (Чтобы посмотреть, как настроен ваш терминал, запустите

stty -a 

.) Ваш терминал предположительно имеет Ctrl-w набор для werase, так Баш связывает его с unix-word-rubout. Это связывание имеет приоритет над любыми ключевыми словами, указанными в ~/.inputrc.

Чтобы избежать этого отображения, вам нужно установить переменную Readline bind-tty-special-chars в off в файле ~/.inputrc:

set bind-tty-special-chars off 
Смежные вопросы