Pourquoi Ctrl-Arrow ne fonctionne-t-il pas en bash sur OS X?


15

J'utilise Ctrl- et Ctrl- sur tous les systèmes Linux sur lesquels je travaille, mais ces combinaisons de touches ne fonctionnent pas en bash sur mon Macbook Pro. Il exécute Snow Leopard et j'utilise l'application Terminal intégrée.

Les combinaisons de touches ne semblent pas être capturées par quoi que ce soit avant ou par Terminal, car si je passe à l'un de mes serveurs Linux, je peux utiliser Ctrl- / pour passer au mot suivant / précédent sur la ligne de commande. Cependant, lorsque j'essaie cette combinaison de touches en bash sur mon Macbook, j'obtiens simplement "C" pour la flèche droite et "D" pour la flèche gauche.

Avez-vous des idées sur la façon de faire fonctionner ces clés dans Darwin Bash?


2
Si vous utilisez des espaces, Ctrl + flèche par défaut change d'espaces.
mark4o

Réponses:


13

OS X utilise la clé emacs liant ma valeur par défaut. C'est vrai, c'est pratiquement toutes les applications sur OS X, c'est plutôt sympa. Cela signifie que des choses comme Ca et Ce sont en début / fin de ligne. Vous obtenez également le nifty backward-word-kill avec M-backspace, oh, et kill-line avec Ck.

Cela devrait signifier que dans votre terminal, les mots avant / arrière sont liés respectivement à Mf et Mb (M = Meta = alt / option), mais ce n'est pas le cas. Sous OS X, les mots avant / arrière sont liés à M- → et M- ← par défaut.

Vous pouvez modifier ce comportement en modifiant la configuration de la bibliothèque GNU Readline pour votre compte. Cela a lieu dans votre ~/.inputrcdossier. Vous pouvez obtenir une grande liste de commandes pouvant être liées avec man readlineainsi que dans la documentation en ligne comme celle-ci ici. .

Donc, pour répondre à votre question, vous voulez remapper ce que fait Readline quand il voit C- → et C- ← pour faire ce qu'il fait sur votre serveur Linux.

La syntaxe d'un ~/.inputrcfichier est assez simple pour ce que vous voulez faire: key-sequence: action.

Cela devrait être ce dont vous avez besoin pour obtenir le comportement souhaité:

"\e[5C": forward-word
"\e[5D": backward-word

Voici une autre page avec des liaisons utiles supplémentaires.

(Vous pourriez probablement vous en sortir en copiant / etc / inputrc de votre box linux vers votre OS X ~ / .inputrc)


Une note: Si vous utilisez beaucoup tmux avec les touches xterm, vous aurez également besoin de \e[1;5Cet \e[1;5Dpour déclencher forward-wordet backward-word.
Arne

2
Autre remarque: si cela ne fonctionne toujours pas, cela peut être dû à un conflit de raccourcis avec Mission Control / Spaces. Préférences Système -> Clavier -> Raccourcis -> Contrôle de mission, Déplacer vers la gauche / droite un espace
bhh1988

Je ne comprends pas "OS X utilise la liaison de clés emacs par défaut." "Ctrl-flèche" est également une liaison de clé emacs.
Greg

3

mettre dans ~/.inputrcles lignes suivantes:

"\e[5C": forward-word
"\e[5D": backward-word

0

Ces jours-ci, il semble que les séquences d'échappement émises par Ctrl-Flèches dans le terminal ont changé. Voici ce qui fonctionne pour moi à partir d'aujourd'hui (fin 2018):

"\e[1;5C": forward-word "\e[1;5D": backward-word

Remarque: vous pouvez toujours déterminer les séquences d'échappement réelles en tapant cat -vdans le terminal et en appuyant sur Ctrl-Flèche gauche ou Ctrl-Flèche droite. Voici un exemple de sortie pour ma propre flèche Ctrl-Gauche:

^[[1;5C ^[[1;5C

Pour traduire en .inputrcjargon, remplacez le signe d'échappement ^[par \eet collez le résultat à l'intérieur des guillemets doubles.


0

Comme @ bhh1988 l'a mentionné, la configuration de Mission Control empêche les touches Ctrl de fonctionner avec les touches fléchées de bash. Je ne voulais pas interférer avec ces raccourcis, donc j'utilise plutôt la touche Option (c'est-à-dire Alt). Actuellement sur Mojave en utilisant un clavier allemand (je ne sais pas si c'est pertinent), je mets ce qui suit .inputrcpour utiliser Option-flèche gauche et Option-flèche droite pour se déplacer entre les mots.

"\e\e[C": forward-word
"\e\e[D": backward-word

0

MISE À JOUR Jan 2020

Sur les dernières versions d'OSX, le shell par défaut est zsh. Par conséquent, l'incantation magique pour que ctrl-arrowleft et ctrl-arrowright fonctionnent comme prévu est la suivante:

bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word

(mettez-le dans votre .zshrc)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.