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.
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.
Odpowiedzi:
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
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ć:
bind '"\e[Z": menu-complete-backward'
~/.bash_profile
użyciu: bind TAB:menu-complete
i bind '"\e[Z": menu-complete-backward'
(zauważ użycie pojedynczych i podwójnych cudzysłowów!).
^[Z
pracował dla mnie (BASH); dzięki za szczegółową odpowiedź! :)