Comportement de retour arrière sur le terminal

1

J'ai ouvert un zshdans un ordinateur distant exécutant Fedora 13 (ouais, c'est vieux). Lorsque vous tapez backspacetout fonctionne bien, mais rien ne se passe lorsque je tape home( Ctrl+ Afait le travail comme prévu). Mais lors du lancement d'un sous-shell Python 2.7, mes backspaceimpressions ^?au lieu de supprimer les derniers caractères et homeimpressions ^[OH, et Ctrl+ Aimpressions ^A.

Ce n'est pas le comportement que je vois quand je suis dans ma Linux Mint habituelle dans une machine locale, où tout fonctionne bien. Est-ce que quelqu'un sait comment cela se produit et que puis-je faire pour résoudre ce problème? Je vous remercie

Rafa
la source
2
Ce sont deux problèmes distincts. L'interpréteur Python devrait utiliser Readline, alors que zsh utilise sa propre bibliothèque d'édition de lignes. Je ne connais pas grand chose à propos de zsh, je ne peux donc pas vous aider. Quelle version de Python est sur le système et quelle est, le cas échéant, la valeur de la PYTHONSTARTUPvariable d'environnement?
@Brandon Merci. Le système utilise normalement python2.4, mais j'ai installé mon propre python2.7.5 et je l'ouvre en appelant le chemin d'accès à 2.7.5. echo $PYTHONSTARTUPAffiche maintenant une ligne vide. Et my PATHcommence avec le binrépertoire où se trouve python2.7.5. Est-il possible qu'il tente d'accéder aux configurations d'anciennes versions de Python? Chaque utilisateur y a installé son propre python.
Rafa
Est-il possible que vous ayez désactivé le support Readline lors de la création de Python? Essayez de le reconstruire, en spécifiant --enable-readlinecomme option du configurescript.
Vous pourrez peut-être faire quelque chose en modifiant votre ~/.inputrcfichier.
Terdon
@BrandonInvergo, si je le reconstruis, vais-je perdre tous les paquets installés?
Rafa

Réponses:

0

Comme @BrandonInvergo l'a souligné dans les commentaires, il s'agit de deux problèmes différents. Comme je ne connais pas le python, je ne me concentre que sur le zshproblème spécifique.

Le shell Z utilise l' éditeur de ligne Z (zle) pour interagir avec l'utilisateur. Les raccourcis clavier sont configurés avec la fonction bindkeyintégrée (voir man zshzleles informations plus détaillées). Il existe différentes mappes clavier, par exemple lorsque vous tapez à l'invite, le mainclavier est actif, si vous utilisez zed(un éditeur de fichier simple mais souvent très pratique), le clavier zedest actif, etc.

Vous pouvez afficher les combinaisons de touches actuelles avec bindkey -M [keymap], la mainconfiguration de clé est la valeur par défaut. Dans la plupart des cas, vous pouvez simplement omettre le -M [keymap]paramètre.

Voyons maintenant votre problème spécifique:

CTRL+A(représenté par ^A) saute au début de la ligne, vous avez donc probablement utilisé bindkey -equelque part dans vos fichiers RC (soit dans vos fichiers personnels ~/.zshrc, mais il pourrait également être émis dans une configuration similaire à celle du système /etc/zshrc) pour activer les emacsraccourcis clavier:

$ 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 la HOMEclé, vous devez identifier la chaîne produite (qui dépend de votre émulateur de terminal que vous utilisez). Une astuce simple consiste à lancer catet à appuyer sur la touche souhaitée. Voici la sortie utilisant xtermpour la touche HOMEet END:

$ cat
^[[H^[[F

Donc, texte long, message court - vous voulez mettre ces lignes dans votre ~/.zshrcfichier (mais après la bindkey -ecommande):

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

Et s'il vous plaît n'oubliez pas de source ~/.zshrc... alors ces deux clés devraient fonctionner comme vous le souhaitez.

mpy
la source
Merci, je suis un peu nouveau dans zsh. En effet, mes chaînes pour homeet endsont ^[OHet ^[OF, alors ça marche. Et comme je suis plus habitué vi, bindkey -vj'activer les viinsraccourcis clavier à la place.
Rafa