Я сегодня в движении, вот еще один вопрос:
Почему, когда я положил их .inputrc
, они оба делают одно и то же?
TAB: menu-complete
Shift-TAB: menu-complete-reverse
то есть они оба делают то, что говорит последний.
Readline ничего не знает о названном модификаторе Shift
и тихо игнорирует неизвестные имена модификаторов. Попробуй wibble-TAB
.
Чтобы связать действие с Shift+ Tab, вам необходимо выяснить, какую escape-последовательность отправляет ваш терминал. В bash запустите cat
и наберите Ctrl+ Vзатем Shift+ Tab. Это вставит escape-последовательность буквально. Вполне вероятно, что первый символ будет escape-символом, показанным как ^[
; разные терминалы имеют разные escape-последовательности, но общие возможности ␛[Z
(например, escape, левая скобка, заглавная Z) и ␛␉
(т.е. escape, tab). Привязать ключ соответствующим образом ~/.inputrc
(где \e
означает escape-символ).
"\e\t": menu-complete-backward
"\e[Z": menu-complete-backward
^[Z
работал на меня (BASH); спасибо за подробный ответ! :)cat
избегает привязки к bash. Обычно bash имеет такую же привязку Ctrl + V, чтобы вставить следующий символ буквально, так что это не имеет значения.$ cat <Enter> <Shift+Tab>
какие показы^[[Z
я всегда добавляю\e
перед последовательностью, из которой я получаюCtrl+V
? Означает ли это:"\e^[[Z": shell-expand-command
^[
на `\ e`На Xubuntu 16.04, терминал: xfce4-терминал 0.6.3, оболочка: bash
Для Shift+ Tabпришлось работать:
источник
~/.bash_profile
использовании:bind TAB:menu-complete
иbind '"\e[Z": menu-complete-backward'
(обратите внимание на использование одинарных и двойных кавычек!).