.inputrc TAB не работает должным образом

11

Я сегодня в движении, вот еще один вопрос:

Почему, когда я положил их .inputrc, они оба делают одно и то же?

TAB: menu-complete
Shift-TAB: menu-complete-reverse

то есть они оба делают то, что говорит последний.

user541686
источник

Ответы:

15

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
Жиль "ТАК - перестань быть злым"
источник
1
Ах, ^[Zработал на меня (BASH); спасибо за подробный ответ! :)
user541686
Вы нажимаете Enter до или после 'кошка'? Зачем нужен «кот»? Кажется, я получаю те же escape-последовательности без 'cat'.
Дугкрамер
@ douglas.kramer Running catизбегает привязки к bash. Обычно bash имеет такую ​​же привязку Ctrl + V, чтобы вставить следующий символ буквально, так что это не имеет значения.
Жиль "ТАК - перестань быть злым"
У меня проблемы с привязкой Shift + Tab к «shell-expand-command». Я получаю: $ cat <Enter> <Shift+Tab>какие показы ^[[Z я всегда добавляю \eперед последовательностью, из которой я получаю Ctrl+V? Означает ли это:"\e^[[Z": shell-expand-command
Дугкрамер
@dou Заменить ^[на `\ e`
Жиль,
4

На Xubuntu 16.04, терминал: xfce4-терминал 0.6.3, оболочка: bash

Для Shift+ Tabпришлось работать:

bind '"\e[Z": menu-complete-backward'
Raizul
источник
В ~/.bash_profileиспользовании: bind TAB:menu-completeи bind '"\e[Z": menu-complete-backward'(обратите внимание на использование одинарных и двойных кавычек!).
Эрик