1 votes

Comportement du retour en arrière sur le terminal

J'ai ouvert un zsh dans un ordinateur distant fonctionnant sous Fedora 13 (oui, c'est vieux). Lorsque vous tapez backspace tout fonctionne bien, mais rien ne se passe quand je tape home ( Ctrl + A fait le travail comme prévu). Mais lors du lancement d'un sous-shell Python 2.7, mes backspace imprime ^? au lieu de supprimer le dernier caractère et home imprime ^[OH et Ctrl + A imprime ^A .

Ce n'est pas le comportement que je vois lorsque je suis dans ma machine habituelle Linux Mint en local, où tout fonctionne bien. Est-ce que quelqu'un sait comment cela se produit et ce que je peux faire pour résoudre ce problème ? Merci.

0voto

mpy Points 24817

Comme l'a souligné @BrandonInvergo dans les commentaires, il s'agit de deux questions différentes. Comme je ne connais pas Python, je ne me concentre que sur les zsh problème spécifique.

Le Z Shell utilise la fonction Editeur de ligne Z (zle) pour interagir avec l'utilisateur. Les liaisons de touches sont configurées avec l'option bindkey (voir man zshzle pour des informations plus détaillées). Il existe différents keymaps, par exemple, lorsque vous tapez à l'invite, la touche main est actif, si vous utilisez zed (un éditeur de fichiers simple, mais souvent très pratique), le keymap zed est actif, etc.

Vous pouvez afficher les liaisons de touches actuelles avec bindkey -M [keymap] le main est la valeur par défaut, donc dans le plus vous pouvez simplement omettre le -M [keymap] paramètre.

Maintenant, examinons votre problème spécifique :

CTRL+A (représentée par ^A ) saute au début de la ligne, donc vous avez probablement utilisé la commande bindkey -e quelque part dans vos fichiers RC (soit dans votre fichier personnel ~/.zshrc mais elle peut aussi être émise dans une configuration générale du système comme /etc/zshrc ) pour activer le emacs les liaisons entre les touches :

$ zsh -f
$ bindkey -e
$ bindkey | head -n 3
"^@" set-mark-command
"^A" beginning-of-line
"^B" backward-char

Pour avoir le même comportement pour le HOME vous devez identifier la chaîne produite (ce qui dépend de l'émulateur de terminal que vous utilisez). Une astuce simple consiste à lancer cat et appuyez sur la touche souhaitée. Voici la sortie en utilisant xterm pour le HOME et END clé :

$ cat
^[[H^[[F

Donc, texte long, message court -- vous voulez mettre ces lignes dans votre ~/.zshrc (mais après le site bindkey -e commande) :

bindkey "^[[F" end-of-line
bindkey "^[[H" beginning-of-line

Et n'oubliez pas de source ~/.zshrc ... alors ces deux clés devraient fonctionner comme souhaité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X