TAB .inputrc ne se comporte pas comme prévu

11

Je suis sur une lancée aujourd'hui, voici une autre question:

Comment se fait-il que lorsque je les mets .inputrc, ils font tous les deux la même chose?

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

c'est à dire qu'ils font tous les deux ce que dit le dernier.

user541686
la source

Réponses:

15

Readline ne sait rien d'un modificateur appelé Shiftet ignore discrètement les noms de modificateurs inconnus. Essayez wibble-TAB.

Pour lier une action à Shift+ Tab, vous devez savoir quelle séquence d'échappement votre terminal envoie. En bash, exécutez catet tapez Ctrl+ Vpuis Shift+ Tab. Cela insérera la séquence d'échappement littéralement. Il est probable que le premier caractère soit un caractère d'échappement, représenté par ^[; différents terminaux ont des séquences d'échappement différentes, mais les possibilités courantes sont ␛[Z(c'est-à-dire d'échappement, crochet gauche, Z majuscule) et ␛␉(c'est-à-dire d'échappement, tabulation). Liez la clé de manière appropriée ~/.inputrc(où \esignifie un caractère d'échappement).

"\e\t": menu-complete-backward
"\e[Z": menu-complete-backward
Gilles 'SO- arrête d'être méchant'
la source
1
Ah, a ^[Ztravaillé pour moi (BASH); Merci pour la réponse détaillée! :)
user541686
Appuyez-vous sur Entrée avant ou après «chat»? Pourquoi «chat» est-il nécessaire? Il me semble obtenir les mêmes séquences d'échappement sans «chat».
dougkramer
@ douglas.kramer Running catévite toute liaison bash. Habituellement, bash a la même liaison Ctrl + V pour insérer littéralement le caractère suivant afin que cela ne fasse aucune différence.
Gilles 'SO- arrête d'être méchant'
J'ai du mal à faire en sorte que Shift + Tab soit lié à «shell-expand-command». J'obtiens: $ cat <Enter> <Shift+Tab>qui affiche ^[[Z Est-ce que j'ajoute toujours \eavant la séquence que j'obtiens Ctrl+V? Est-ce que cela se traduit par:"\e^[[Z": shell-expand-command
dougkramer
@dou Replace ^[by `\ e`
Gilles 'SO- arrête d'être méchant'
4

Sur Xubuntu 16.04, terminal: xfce4-terminal 0.6.3, shell: bash

Pour que Shift+ Tabfonctionne, j'ai dû utiliser:

bind '"\e[Z": menu-complete-backward'
Raizul
la source
En cours d' ~/.bash_profileutilisation: bind TAB:menu-completeet bind '"\e[Z": menu-complete-backward'(notez l'utilisation de guillemets simples et doubles!).
Erik