Я сегодня в движении, вот еще один вопрос:
Почему, когда я положил их .inputrc, они оба делают одно и то же?
TAB: menu-complete
Shift-TAB: menu-complete-reverse
то есть они оба делают то, что говорит последний.
Я сегодня в движении, вот еще один вопрос:
Почему, когда я положил их .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
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пришлось работать:
bind '"\e[Z": menu-complete-backward'
~/.bash_profileиспользовании: bind TAB:menu-completeи bind '"\e[Z": menu-complete-backward'(обратите внимание на использование одинарных и двойных кавычек!).
^[Zработал на меня (BASH); спасибо за подробный ответ! :)