Alt-gauche pour ignorer les mots ne fonctionne pas dans les émulateurs de terminaux

16

Sur une machine Debian Wheezy au travail précédent, je me suis habitué à Alt + Gauche et Alt + Droite pour sauter entre les mots sur la ligne de commande active (en bash).

Cependant, comme à la maison j'ai mis à niveau vers Jessie (Debian 8.0, branche de test), cela ne fonctionne plus: au lieu de passer au mot précédent, Alt-Left imprime quelque chose comme Dou [D. OTOH, si j'ouvre ssh et me connecte à ma Debian Wheezy sans tête, cela fonctionne parfaitement.

De plus, je viens d'installer Fedora 20 dans mon nouveau travail et ici le comportement est le même. Cela s'applique à bash, csh et ksh (commencé sous env -i), ainsi qu'à rxvt-unicode et xfce4-terminal, donc ce doit être quelque chose en dehors de ces niveaux.

Où d'autre dans la pile dois-je chercher pour trouver la différence?

Alois Mahdal
la source
4
Je suggérerais d'essayer alt-b et alt-f (ainsi que le reste des clés de ligne de lecture), car ils sont plus universels, et un certain nombre de programmes de ligne de commande honorent les liaisons de ligne de lecture.
sage

Réponses:

21

Vous avez probablement défini un fichier local ~/.inputrcou global /etc/inputrcqui a été perdu lors de la mise à niveau. Une solution simple consiste à créer un ~/.inputrcfichier avec les lignes suivantes:

## enable Alt-arrows 
"\e[1;3D": backward-word ### Alt left
"\e[1;3C": forward-word ### Alt right

Ceux-ci fonctionneront avec xtermet terminatoret gnome-terminalmais devront peut-être être modifiés pour d'autres terminaux. Malheureusement, chaque émulateur de terminal peut utiliser une syntaxe différente. Pour plus de détails, voir ma réponse ici .

terdon
la source
Je voulais vraiment dire Alt, et cela fonctionne toujours sur la machine distante. Ctrl + Gauche / Droite est déjà prise dans Rxvt pour déplacer l'onglet vers la gauche et la droite (Maj + Gauche / Droite en changeant les onglets et Maj + Bas en ouvrant un nouveau).
Alois Mahdal
1
Soit dit en passant, alors que Ctrl + Gauche / Droite est courant dans les éditeurs GUI, les terminaux sont un monde complètement différent où je n'ai pas encore vu cette combinaison.
Alois Mahdal
10

terdon m'a mis dans la bonne direction: fichier inputrc .

Le coupable est que, tout à fait de manière non intuitive, readline6 utilise en fait ~ / .inputrc au lieu de / etc / inputrc, que readline (3) n'accentue ni ne réfute:

Le nom de ce fichier est tiré de la valeur de la variable d'environnement INPUTRC. Si cette variable n'est pas définie, la valeur par défaut est ~ / .inputrc. Si ce fichier n'existe pas ou ne peut pas être lu, la valeur par défaut ultime est / etc / inputrc.

Ainsi , alors que dans les deux machines Debian / etc / inputrc est identique à celui fourni par libreadline6 package (la version est le même aussi bien), sur la nouvelle machine existe ~ / .inputrc avec seule ligne: set bell-style none. Lorsque ce fichier est supprimé, tout fonctionne bien (voir les notes ci-dessous).

Je ne peux pas vérifier Fedora avant demain mais je suppose que c'est le même problème. Mise à jour: Sur Fedora, ~ / .inputrc n'existait pas, ici / etc / inputrc est simplement différent donc il ne peut pas le définir. En tant que correctif, j'ai simplement enregistré inputrc de Debian en tant que mon ~ / .inputrc.


Remarques:

Le mystère de la façon dont il a été modifié lors de la mise à niveau 7> 8 n'est pas résolu, mais peut en partie être attribué à ma mauvaise mémoire et à certains jonglages de fichiers dot involontaires. (BTW, ce n'était pas une mise à niveau APT, mais plutôt une réinstallation et un déplacement manuel du fichier dot, alors peut-être que le ~ .inputrc a gêné d'une manière ou d'une autre.)

De plus, quand je dis OK, je veux dire que cela fonctionne avec Ctrl partout sauf Rxvt (OK, je n'ai vérifié que xfce4-terminal mais nous savons que Rxvt est le rebelle habituel), où cela est remappé en Alt, apparemment parce que Ctrl est pris par Rxvt -fonctionnalité spécifique - déplacer l'onglet actif dans la liste.

Comme le mentionne la page de manuel, avec bash, vous pouvez utiliser la commande de liaison intégrée pour rechercher ce que vous avez actuellement.

Alois Mahdal
la source
Belle prise, +1. En fait, c'est plus intuitif que vous ne le pensez. Le comportement par défaut est que les fichiers dot spécifiques à l'utilisateur aient priorité sur les valeurs par défaut à l'échelle du système. Sinon, les utilisateurs ne pourraient pas modifier leur paramètre.
terdon
Voir la réponse mise à jour pour savoir comment activer spécifiquement les flèches Alt +.
terdon
2
C'est normal, vous avez besoin $include /etc/inputrcen haut de ~/.inputrcsi vous voulez lire cela aussi.
Chris Down
@terdon, il est parfaitement logique de préférer les paramètres utilisateur avant l'ensemble du système, mais ce que je verrais comme plus intuitif serait que ~ / .initrc serait "fusionné" dans / etc / initrc (c'est-à-dire / etc / initrc serait $included par défaut).
Alois Mahdal
1
Voir: 1. options codées en dur, 2. / etc / initrc, 3. ~ / .initrc --vs-- 1. options codées en dur 2. / etc / initrc OU ~ / .initrc. La première façon est beaucoup plus flexible car elle peut facilement être étendue à un niveau inférieur (par exemple par projet, eh bien j'admets que cet exemple n'a pas beaucoup de sens avec readline mais vous obtenez le point).
Alois Mahdal