Recherche de la solution ALT + LeftArrowKey dans zsh

130

Je viens de passer de bash à zsh, mais mon Alt+ LeftArrowKeyet Alt+ me manque RightArrowKeypour aller et venir un mot à la fois.

En ce moment, si j'appuie sur Alt+, LeftArrowKeyje recule quelques lettres et je suis coincé. Je n'irai pas plus loin en arrière et je ne reviendrai pas à la fin de la ligne avec Alt+ RightArrowKeycomme 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-dernier. Impossible de saisir de nouveaux caractères sur la ligne ni de supprimer.

Comment récupérer mon raccourci préféré?

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

Mads Ohm Larsen
la source

Réponses:

243

Exécutez catpuis appuyez sur les touches pour voir les codes envoyés par votre raccourci.
(Appuyez sur Ctrl+ Cpour tuer le catlorsque vous avez terminé.)
Pour moi, (ubuntu, konsole, xterm) en appuyant sur Alt+ envoie ^[[1;3D, je mettrais donc 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 (Début / Fin / Insérer / Supprimer) dans .zshrc lors de l'exécution de Zsh dans Terminator Terminal Emulator

lolesque
la source
15
Tu es mon Sauveur! Sur mon Mac, "Alt + <-" a donné "^ [b" et -> a donné "^ [f", alors j'ai ajouté ceux-ci. Fonctionne comme un charme. Les flèches Ctrl + sont réservées pour basculer entre les bureaux sur Mac.
Mads Ohm Larsen
1
Une note est que pour ctrl + <- cat faisait un rapport ^[[Dpour moi tandis que ctrl + v faisait un rapport ^[OD. La suggestion de Ctrl + v a fonctionné, mais pas celle de chat. De plus, ctrl + v signalait la même chose pour les deux alt + <- et alt + ->. J'ai pu ajouter ces deux en regardant la sortie de chat et en remplaçant tout "[[" par "O"
Mike S
10
ma sortie sous cat est ^[^[[Cpour le mot avant et ^[^[[Dpour le mot arrière, mais la mise à jour pour ceux-ci dans .zshrc n'a pas fonctionné pour une raison quelconque.
Yunti
2
@Yunti - Mettre bindkey "^[^[[D" backward-wordet bindkey "^[^[[C" forward-worddans ~ / .zprofile travaillé pour moi!
Fernando Espinosa
Homme! Sauvé ma vie! Merci d'avoir partagé!
Joao Henrique
187

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, ce qui crée des problèmes de compatibilité lorsque vous changez de shell (si vous vous connectez à 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 pré-liées. De plus, bien qu'ils ne soient pas cohérents à 100%, ils sont suffisamment proches. Donc, le moyen le plus simple que j'ai trouvé pour créer des raccourcis clavier 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 natifs ici

Ouvrez les préférences iTerm + ,et accédez à l' Profilesonglet (l' Keysonglet peut être utilisé, mais l'ajout de raccourcis clavier à votre profil vous permet d' enregistrer votre profil et de le synchroniser sur plusieurs ordinateurs) et le keyssous-onglet et entrez ce qui suit:

Déplacer le curseur d'un mot vers la gauche

+ Envoyer des codes hexadécimaux:0x1b 0x62

Déplacer le curseur d'un mot vers la droite

+ Envoyer des codes hexadécimaux:0x1b 0x66

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

Travis
la source
1
J'avais des problèmes avec la solution acceptée car j'avais zsh fonctionnant bien mais pas irb et d'autres consoles. Effacer les paramètres précédents (dans le profil iTerm comme suggéré) fonctionne comme un charme!
llekn
1
La solution bindkey ferait un son d'erreur ennuyeux sur Mac. Cela devrait être la bonne façon de procéder.
Weishi Zeng
@Lev Probablement parce que votre shell n'est pas mappé à la configuration par défaut. Exécutez, bindkey | grep forward-wordvous devriez voir "^[f" forward-wordrenvoyé, mais si vous ne le faites pas, vous avez 2 options. map à l'un des autres retournés, ou ajouter "^[f" forward-wordà votre .zshrc.
Travis
Je noterai que cela "^[f"semble être la liaison la plus systématiquement utilisée pour les forward-wordshells, et la seule définie par défaut dans ma version de bash.
Travis
D'une manière ou d'une autre, cela a fonctionné avec le bouton de commande pour moi au lieu de l'option. Merci mec. :)
Vaibhav Jain
72

L'ajout de ce qui suit à ~ / .zshrc a fonctionné pour moi sur OSX Mountain Lion.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word
Rob Sawyer
la source
4
Cette solution déclenche une "cloche" dans iTerm 2 à chaque utilisation, donc sauter entre les mots peut devenir vraiment ennuyeux.
Matthew Morek
1
n'importe qui trouve comment empêcher cela de se produire ^ @MatthewMorek
Daniel Kobe
18
'\ e \ e' empêche la cloche. Ma configuration sur El Capitan avec iTerm 2 en mode de compatibilité Terminal est bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum
Merci d'avoir résolu le problème sur macOs Sierra. Je n'obtiens aucun son de cloche sur le terminal ou sur iTerm2.
Raspo
Comment le paramétrez-vous pour qu'il se déplace de la fin des mots et non du début ou d'eux?
Mafro34
23

Sur MacOS High Siera 10.13.6 ou Mojave 10.14.2 et en utilisant iTerm2 avec ZSH Pour passer des mots, je dois mettre comme ceci:

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

Une autre solution ne fonctionne pas pour le moment

Vetalll
la source
1
C'est la seule solution qui a fonctionné pour moi aussi. Je vous remercie! Mac OS Mojave
jamescampbell
Fonctionne également sur OS Catalina!
Reed Richards le
7

Bien que ne répondant pas strictement à votre question, la liaison par défaut pour forward-wordet backward-wordsont alt-fresp. alt-b.

Cela fonctionne partout, ne vous oblige pas à quitter la ligne de départ et a une belle propriété mnémotechnique (f = avant, b = arrière), tout en étant cohérent avec ctrl-fet ctrl-bétant forward-characteret backward-character.

Arrachez vos touches fléchées!

0x89
la source
4
ne fonctionne pas pour moi dans zsh / iterm2, affiche ƒ et ∫ (cb cf fonctionne).
Davorin
2

Pour que cela fonctionne pour moi, j'ai utilisé cette réponse , mais j'ai dû échanger les codes (gauche <-> droite)

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

et ajoutez ce qui suit à mon ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word
iRonin
la source
Ce serait sans doute moins déroutant si vous changiez votre bindkeys à la place, pour vous lier ^[fà forward-wordet non pour backward-word.
Nickolay
1

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

ZeoS
la source
1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie
0

Dans zsh, vous pouvez utiliser la bindkeycommande pour afficher les raccourcis clavier.

Permet bindkeyd'explorer les options disponibles sans raccourcis clavier personnalisés.

A savoir ^[b reculer d'un mot et ^[favancer d'un mot.

MCI
la source