Problème avec les touches Ctrl + flèches gauche / droite

25

Après la dernière mise à jour du système, la commande ctrl + flèche gauche / droite sur le terminal zsh ne fait rien. Ctrl + u a également quelque chose qui ne va pas, car généralement cette commande efface du curseur au début de la ligne, alors qu'elle efface maintenant la ligne entière. Quelqu'un sait comment résoudre ces problèmes? Merci à tous.

riskio
la source
Avez-vous trouvé une réponse acceptable? Je pense que la réponse de Goncalo est excellente.
Léo Léopold Hertz 준영

Réponses:

44

FWIW, c'est ce qui a fonctionné sur mon environnement (rhel5.x) en utilisant la valeur par défaut de zsh.

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word
Goncalo
la source
5
^[^[[Det ^[^[[C, respectivement, pour OSX
Jon z
1
Confirmée, la proposition de Goncalo fonctionne également dans Debian 8.5. Je me demande simplement pourquoi ce code n'est pas intégré .zshrcpar défaut.
Léo Léopold Hertz 준영
Fonctionne comme un charme dans Ubuntu Artful, merci!
Konrad Garus
Au cas où quelqu'un voudrait utiliser à la $terminfoplace des séquences d'échappement: les clés $terminfo[kLFT5]et $terminfo[kRIT5]travaillé pour moi
Griddo
14

Ctrl + U est très probablement parce que vous avez le curseur à la fin de la ligne. Deuxièmement, à quelle version de Gentoo faites-vous référence en tant que «dernière mise à jour du système»?

Et qu'aimeriez-vous que les touches ctrl + gauche / droite fassent?

  • Ajouter à la configuration zsh:

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

  • Et à partir de vieux morceaux que j'ai trouvés (cela pourrait aider):

bindkey ";5C" forward-word
bindkey ";5D" backward-word

  • ou regardez ça lien, qui devrait vous aider?

Remarque: Si la configuration fonctionne mais que les touches supposées ne font pas ce que vous voulez, c'est peut-être parce que la définition de la clé diffère de la vôtre et de la mienne, faites-le: cat > /dev/null et appuyez sur les touches que vous souhaitez obtenir et ajustez en conséquence.

Torxed
la source
1
"Ctrl + U est très probablement parce que vous avez le curseur à la fin de la ligne" bien sûr, je veux dire lorsque mon curseur est au milieu. "Et que voulez-vous que le Ctrl + gauche / droite fasse?" habituellement ctrl + flèche gauche: sauter le mot en allant à gauche etc ...
riskio
Et quel shell / terminal utilisez-vous? Assurez-vous que vous utilisez Emacs ou le terminal que vous utilisez habituellement et / bin / bash? courez-vous à travers l'écran?
Torxed
1
s'il vous plaît lire la question est là ..
riskio
1
@Masi Pas sûr, j'ai répondu deux ans avant lui et nos réponses sont presque identiques, je viens de montrer deux façons différentes de le faire .. et vous pouvez les fusionner toutes les deux pour combiner ce qu'il a écrit.
Torxed
1
@Masi Tout ce que je sais, c'est qu'à l'époque (rappelez-vous, 2010-2012 .. C'était il y a longtemps) ces deux (et sa combinaison) fonctionnaient pour moi sur de nombreux systèmes différents. J'étais sur Unix et Linux (et il était sur Gentoo, un système d'exploitation à version mobile). Et il y a encore des traces de cela sur beaucoup d'exemples .. Comme ce référentiel. Maintenant, encore une fois, je ne sais pas trop pourquoi, mais cela a fonctionné sur au moins deux machines, alors j'ai pensé le partager. Et bien sûr, il est plus clair AUJOURD'HUI, et cela ne me dérange pas qu'il obtienne tous les votes positifs. Il s'agit d'un post hérité.
Torxed
5

Ce qui fonctionne ne dépend pas directement de la distribution (Gentoo, Debian, RHEL etc.) ou du shell (ZSH, KSH, BASH) - cela dépend de ce qui terminal emulatorest utilisé et de ses paramètres: konsole, terminator, urxvt, lx-terminal etc. La distribution peut être importante si elle utilise une configuration de shell standard différente (fx. .zshrc), et si vous utilisez un shell différent qui configure la coque sur cette distribution, elle peut déjà la gérer.

Voici quelques solutions spécifiques à l'émulateur de terminal:

urxvt / rxvt-unicode (et peut-être d'autres):

bindkey "^[Od" backward-word
bindkey "^[Oc" forward-word

terminator, konsole et xterm (et peut-être d'autres):

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

Pour une approche plus générale, vous démarrez votre terminal, appuyez sur CTRL-V suivi de la combinaison de touches dont vous voulez le code d'échappement (le nom) - dans ce cas, les combinaisons de touches CTRL-leftarrow et CTRL-rightarrow - et mettez la sortie pour chaque combinaison de touches entre les deux guillemets.

miyalys
la source
1
Avez-vous essayé la suggestion CTRL-V? Peut-être que votre terminal interprète les frappes différemment, donc la clé doit être liée à différents "symboles"?
miyalys
1
J'ai mis à jour ma réponse. Il existe plusieurs solutions selon l' terminal emulatorutilisation. La distribution ou le shell n'a pas d'importance. C'est probablement aussi pourquoi il n'est pas dans .zshrc, car ce qui fonctionne pour un émulateur de terminal ne fonctionne pas pour un autre. Mais cela pourrait probablement être résolu si zshrc fx. lire la variable d'environnement $ TERM et appliquer différents paramètres de bindkey en fonction du résultat.
miyalys
2

Résolu.

Terminal utilisé: Konsole .

Pour résoudre: cliquez avec le bouton droit sur le terminal (ou les paramètres dans la barre de menus) -> modifier le profil actuel -> mappage du clavier -> passer à Default (xfree4)

riskio
la source
pas même vraiment lié à zsh mais bien sûr, un correctif est un correctif.
Torxed