Jestem na bieżąco, oto kolejne pytanie:
Jak to się stało, że kiedy je włożyłem .inputrc
, oboje robią to samo?
TAB: menu-complete
Shift-TAB: menu-complete-reverse
tzn. oboje robią wszystko, co mówi ostatni.
Readline nie wie nic o nazwie modyfikatora Shift
i cicho ignoruje nieznane nazwy modyfikatorów. Spróbować wibble-TAB
.
Aby powiązać akcję z Shift+ Tab, musisz dowiedzieć się, jaką sekwencję ucieczki wysyła twój terminal. W bash uruchom cat
i wpisz Ctrl+, Va następnie Shift+ Tab. Spowoduje to wstawienie sekwencji ucieczki dosłownie. Najprawdopodobniej pierwszą postacią będzie postać ucieczki, pokazana jako ^[
; różne terminale mają różne sekwencje specjalne, ale typowymi możliwościami są ␛[Z
(tj. ucieczka, lewy nawias, wielka ␛␉
litera Z) i (tj. ucieczka, tab). Powiąż odpowiednio klucz w ~/.inputrc
(gdzie \e
oznacza znak ucieczki).
"\e\t": menu-complete-backward
"\e[Z": menu-complete-backward
^[Z
pracował dla mnie (BASH); dzięki za szczegółową odpowiedź! :)cat
pozwala uniknąć wiązania bash. Zwykle bash ma to samo powiązanie Ctrl + V, aby wstawić dosłownie następny znak, więc nie robi to różnicy.$ cat <Enter> <Shift+Tab>
które wyświetla^[[Z
Czy zawsze dodawam\e
przed sekwencją, z której otrzymujęCtrl+V
? Czy to przekłada się na:"\e^[[Z": shell-expand-command
^[
na `\ e`Na Xubuntu 16.04, terminal: xfce4-terminal 0.6.3, shell: bash
Do Shift+ Tabdo pracy musiałem użyć:
źródło
~/.bash_profile
użyciu:bind TAB:menu-complete
ibind '"\e[Z": menu-complete-backward'
(zauważ użycie pojedynczych i podwójnych cudzysłowów!).