ALT + flèche se déplaçant entre les mots dans zsh et iTerm2

19

Je me suis connecté sur l'un des serveurs du fournisseur d'hébergement et j'ai remarqué que ALT + gauche et ALT + droite se déplaçaient entre les mots dans une invite de shell dans l'écran GNU.

Quel type de raccourcis clavier je dois configurer et où obtenir ce comportement sur mon OS X zsh local exécuté dans iTerm2?

Mikko Ohtamaa
la source
Les personnes intéressées par cette question peuvent également être intéressées de savoir que les mots zsh ne sont pas des mots bash. FOO=BARest un mot pour zsh et 2 mots pour bash. De même, si vous placez votre curseur à la fin de foo --baret faites alt + backspace, en bash vous aurez foo --et en zsh vous aurez foo . Zsh ajoute de nombreuses fonctionnalités à bash, mais il a également de nombreux paramètres par défaut insensés à remplacer.
weberc2

Réponses:

28

J'ai trouvé la solution ici: https://coderwall.com/p/h6yfda . Copiera les parties les plus importantes de celui-ci, au cas où le lien tomberait.

  1. Allez dans Préférences, Profil, Clés.
  2. Réglez votre touche gauche ⌥ pour agir comme un personnage d'échappement.
  3. Localisez le raccourci actuel pour ⌥ ← ou créez-en un nouveau, avec les paramètres suivants:
    • Raccourci clavier: ⌥ ←
    • Action: envoyer une séquence d'échappement
    • Echap +: b
  4. répéter pour le raccourci clavier ⌥ → avec les paramètres suivants:
    • Raccourci clavier: ⌥ →
    • Action: envoyer une séquence d'échappement
    • Echap +: f
Willington Vega
la source
1
Il convient de mentionner qu'il est spécifique à un émulateur de terminal particulier - pas à zsh en général.
Hi-Angel
6

Vous recherchez les mots backward-word- clés et forward-word. Donc, si vous êtes sur un shell où les raccourcis clavier ne fonctionnent pas, essayez bindkey -L | grep backward-wordde vérifier s'ils sont même configurés. Il y a plus d'informations à ce sujet dans zshzle (1) .

Vous pouvez définir manuellement la liaison de touches en tapant quelque chose comme ceci:

bindkey ' Ctrl+ v Alt+ Right' mot avant

bindkey ' Ctrl+ v Alt+ Left' mot en arrière

J'ai également eu des problèmes avec les raccourcis clavier et le problème était presque toujours que la touche Option / Alt envoyait quelque chose de différent du Meta / Escape attendu.

Sebastian Stumpf
la source
Vous pouvez également utiliser emacs-forward-wordet emacs-backward-word. La différence est que vous sautez en avant à la fin du mot et en arrière au début du mot au lieu de sauter toujours au début du mot.
Aalex Gabi
Celui-ci est la solution la plus robuste et la plus propre. Il peut s'adapter à différents types de mappage de clés et / ou à toutes sortes de combinaisons ssh-tmux-zsh. D'autres solutions qui impliquent une séquence d'échappement codée en dur ne résolvent que certains des cas dans un système particulier.
HKTonyLee
3

Je ne peux pas parler pour iTerm mais ce sont les raccourcis clavier que j'ai utilisés pour résoudre ce problème sous GNOME Terminal, sur Fedora 19, exécutant ZSH 5.0.7 avec Oh-my-zsh:

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

\e== La séquence de touches d'échappement (comme indiqué dans la section 4.1.1 )

et [== O(O majuscule; comme indiqué dans la section 4.2.1 ), dans certains cas. Par exemple, sous tmuxcette substitution est nécessaire pour moi, mais sans tmuxqu'il soit nécessaire qu'aucune substitution ne soit faite et [==[

Les codes clés d'une séquence peuvent être obtenus en utilisant catet en appuyant sur la séquence souhaitée. Par exemple, les résultats du pressage <Alt+Right>doivent être interprétés comme suit:

$ cat
^[[1;3C

^[== \e== La séquence de touches d'échappement

[== [sans tmuxOR [== O(o majuscule) avectmux

1;3 == Je ne suis pas sûr de celui-ci, mais cela devrait logiquement signifier <Alt>

C == La touche fléchée droite

Ensuite, cette séquence est donnée bindkeydans le ~/.zshrcfichier pour la persistance, comme premier argument, et est liée , ce qui signifie que la frappe dans l'argument un exécutera une commande d'édition particulière (ou widget en termes zsh), au widget, qui dans le premier ligne de l'exemple ci-dessus est forward-word.

Le ~/.zshrcdevrait être re-sourced après que ces deux commandes lui soient ajoutées avec:

$ source ~/.zshrc

Maintenant, une gêne sur mon système est que cette combinaison particulière a provoqué l'émulateur de terminal pour émettre un bip chaque fois que la commande a été émise, j'ai résolu ce problème en désactivant le

'Edit'->'Profile Preferences'->'Terminal Bell' case à cocher.

rivanov
la source
1

Ce qui a fonctionné le mieux pour moi pour rendre la navigation en ligne de commande d'iTerm2 plus intuitive pour moi (je suis un jeune adulte qui n'a pas grandi sur une ligne de commande, mais j'ai passé beaucoup de temps dans les éditeurs de texte et les IDE) était à:

  • Allez dans Préférences -> Profil -> Clés
  • Sous la liste des mappages de touches, il y a une boîte pour ajouter / supprimer ou charger des préréglages (zone de liste déroulante)
  • Sélectionnez l' Natural Text Editingoption dans la liste déroulante Presets.

Par défaut, les touches de l'éditeur sont plus standard sans que je doive modifier chaque option individuellement.

loganjones16
la source
0

Je vous suggère d'utiliser zkbdpour configurer les raccourcis clavier. Je l'utilise et Alt+ Left/ Alt+ Rightfonctionne très bien sur iTerm2. Voir zshcontrib(1)pour plus de détails sur zkbd.

Daniel Serodio
la source