Vous recherchez une solution alt + LeftArrowKey dans zsh

Je viens récemment passé de bash pour zsh, cependant je m'ennuie de mon Alt+LeftArrowKey et Alt+RightArrowKey pour aller et venir d'un mot à la fois.

Maintenant, si j'appuie sur Alt+LeftArrowKey je reviens d'un couple de lettres et puis, je suis coincé. Je n'irai pas plus loin en arrière et il ne reviendra pas à la fin de la ligne avec Alt+RightArrowKey comme je m'y attendais. Je ne peux même pas utiliser les touches fléchées pour aller à la fin de la ligne, seulement à l'avant-dernière. Impossible d'entrer de nouveaux caractères sur la ligne ni de supprimer.

Comment puis-je récupérer mon raccourci bien-aimé?

Je suis sur Mac OS X en utilisant le Terminal si c'est important.

65
demandé sur Fabrizio 2012-09-12 10:41:08

6 réponses

Exécutez cat puis appuyez sur les touches pour voir les codes envoyés par votre raccourci.
(Appuyez sur la touche Ctrl+C pour tuer le cat lorsque vous avez terminé.)
Pour moi, (ubuntu, konsole, xterm) en appuyant sur Alt+ envoie ^[[1;3D, donc j'en ai mis dans mon .zshrc

bindkey "^[[1;3C" forward-word
bindkey "^[[1;3D" backward-word

(en fait, je préfère utiliser Ctrl + flèche pour déplacer mot par mot, comme dans une zone de texte normale sous Windows ou linux gui.)

Question connexe: correction des paramètres clés (Home / End / Insert / Delete) dans .zshrc lors de L'exécution de Zsh dans Terminator Terminal Emulator

140
répondu lolesque 2018-03-03 10:48:26

pour toute personne utilisant iTerm, quel que soit le shell

Toutes les solutions proposées ici adoptent une approche à rebours à mon avis. Vous dites essentiellement à votre shell d'écouter une séquence esc ou une autre liaison de clé que vous avez définie dans votre terminal, créant des problèmes de compatibilité lorsque vous changez de Shell (si vous SSH dans un autre shell, passez de BASH à ZSH, etc. et vous perdez certains sinon tous vos raccourcis clavier).

La plupart des shells ont un ensemble de séquences par défaut qui sont pré-lié. De plus, bien qu'ils ne soient pas cohérents à 100%, ils sont assez proches. Donc, le moyen le plus simple que j'ai trouvé pour créer keybinding pour une action particulière dans le shell est de dire à votre application de terminal de se lier aux raccourcis clavier par défaut qui sont cohérents entre les shells.

j'ai écrit une solution compressive pour que votre terminal réponde au plus près des raccourcis clavier Mac natifs ici

Ouvrez les préférences iTerm +, et accédez à l'onglet Profiles (l'onglet Keys peut être utilisé, mais l'ajout de raccourcis clavier à votre profil vous permet de enregistrer votre profil {[16] } et de le synchroniser sur plusieurs ordinateurs) et keys sous-onglet et entrez ce qui suit:

Déplacer le curseur d'un mot à gauche

+ Envoyer Des Codes Hex: 0x1b 0x62

Déplacer le curseur d'un mot à droite

+ Envoyer Des Codes Hex: 0x1b 0x66

Et cela devrait vous donner le comportement souhaité non seulement dans ZSH, mais aussi si vous SSH dans un serveur exécutant BASH, irb/pry, node etc.

93
répondu Travis 2017-10-06 14:50:00

Ajouter ce qui suit à ~/.zshrc a travaillé pour moi sur OSX Mountain Lion.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word
56
répondu Rob Sawyer 2013-05-07 04:37:26

Bien que ne répondant pas strictement à votre question, la liaison par défaut pour forward-word et backward-word sont alt-f resp. alt-b.

Cela fonctionne partout, ne vous oblige pas à quitter la ligne d'origine, et a une belle propriété mnémonique (F = forward, b=back), tout en étant cohérent avec ctrl-f et ctrl-b étant forward-character et backward-character.

Arrachez vos touches fléchées!

5
répondu 0x89 2016-03-10 15:49:11

Sur Mavericks (10.9.4) le code est 1; 5... donc, pour lier alt avec des flèches, j'ai mon .zshrc en utilisant ceci:

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

Vous pouvez utiliser CTRL+V puis la commande que vous souhaitez utiliser

Dans Yosemite, utilisez la solution de Rob

1
répondu ZeoS 2015-03-18 13:55:31

Pour le faire fonctionner pour moi j'ai utilisé cette réponse, mais j'ai dû intervertir les codes (à gauche droite)

⌥ + ← Envoyer des Codes hexadécimaux: 0x1b 0x66
⌥ + → Envoyer des Codes hexadécimaux: 0x1b 0x62

Et ajouter ce qui suit à mon ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word
0
répondu iRonin 2018-03-23 10:15:56