GNU/Linux >> Tutoriels Linux >  >> Linux

Premiers caractères de la commande répétés à l'écran lors de l'achèvement ?

Les deux premiers caractères ont été répétés pendant que j'utilisais Tab faire l'achèvement. Dans la capture d'écran ci-dessous, cd est répété.

J'ai essayé rxvt-unicdoe, xterm, terminateur. Tous ces émulateurs de terminaux ont ce problème.

Zsh version 5.0.2, fichier de configuration sur-mon-zsh

Réponse acceptée :

Si les caractères de votre ligne de commande sont parfois affichés avec un décalage, c'est souvent parce que zsh a calculé la mauvaise largeur pour l'invite. Les symptômes sont que l'affichage semble correct tant que vous ajoutez des caractères ou que vous vous déplacez caractère par caractère, mais devient brouillé (certains caractères apparaissant plus à droite qu'ils ne le devraient) lorsque vous utilisez d'autres commandes qui déplacent le curseur (Accueil , complétion, etc.) ou lorsque la commande chevauche une deuxième ligne.

Zsh a besoin de connaître la largeur de l'invite afin de savoir où sont placés les caractères de la commande. Il suppose que chaque personnage occupe une position, sauf indication contraire.

Il est possible que votre invite contienne des séquences d'échappement qui ne sont pas correctement délimités. Les séquences d'échappement qui modifient la couleur ou d'autres aspects de mise en forme du texte, ou qui modifient le titre de la fenêtre ou d'autres effets, ont une largeur nulle. Ils doivent être inclus dans une construction d'accolades en pourcentage %{…%} . Plus généralement, une séquence d'échappement comme %42{…%} dit à zsh de supposer que ce qui est à l'intérieur des accolades fait 42 caractères de large.

Vérifiez donc vos paramètres d'invite (PS1 , PROMPT , ou les variables auxquelles ils font référence) et assurez-vous que toutes les séquences d'échappement (telles que \e[…m pour modifier les attributs de texte : notez qu'il peut être présent via une variable telle que $fg[red] ) sont à l'intérieur de %{…%} . Puisque vous utilisez oh-my-zsh, vérifiez à la fois vos propres paramètres et les définitions que vous utilisez depuis oh-my-zsh.

Le même problème se pose dans bash. Les séquences de largeur nulle dans une invite doivent être entourées de \[…\] .

Une autre possibilité est que votre invite contienne des caractères non ASCII et que zsh (ou toute autre application) et votre terminal aient une idée différente de leur largeur. Cela peut se produire s'il y a une incompatibilité entre l'encodage de votre terminal et l'encodage déclaré dans le shell, et les deux encodages donnent des largeurs différentes pour certaines séquences d'octets. En règle générale, vous pouvez rencontrer ce problème lorsque vous utilisez un terminal non Unicode mais que vous déclarez une locale Unicode ou vice versa.

Les applications s'appuient sur des variables d'environnement pour connaître les paramètres régionaux ; le paramètre pertinent est LC_CTYPE , qui est déterminé à partir des variables d'environnement LANGUAGE , LC_ALL , LC_CTYPE et LANG (le premier d'entre eux qui est défini s'applique). La commande locale | grep LC_CTYPE vous indique votre réglage actuel. Habituellement, la meilleure façon d'éviter les problèmes de paramètres régionaux est de laisser l'émulateur de terminal définir LC_CTYPE , puisqu'il sait quel encodage il attend ; mais si cela ne fonctionne pas pour vous, assurez-vous de définir LC_CTYPE .

Les mêmes symptômes peuvent se produire lorsque la commande précédente affichait une sortie qui ne se terminait pas par une nouvelle ligne, de sorte que l'invite s'affiche au milieu de la ligne mais que le shell ne s'en rend pas compte. Dans ce cas, cela ne se produirait qu'après avoir exécuté une telle commande, pas de manière persistante.

Connexe :la redirection IO et la commande head ?

Si une ligne ne s'affiche pas correctement, la commande redisplay ou clear-screen (lié à Ctrl +L par défaut) le corrigera.


Linux
  1. Comment afficher différemment les caractères de contrôle (^c, ^d, ^[, …) dans le shell ?

  2. Comment arrêter la commande de recherche après la première correspondance ?

  3. Commande Linux ls

  4. Comment capturer la première adresse IP à partir d'une commande ifconfig ?

  5. Pourquoi slabtop -o ne renvoie-t-il que les 23 premières lignes lorsque la commande est canalisée ?

Comment utiliser la commande hostname sous Linux

Mettez en signet les commandes Linux pour une invocation répétée plus facile

L'historique des commandes semble manquer les 75 premières lignes ?

Changer la couleur du texte de la sortie à l'invite de commande ?

Utilisation de la commande tr sous Linux pour jouer avec des personnages

Remplacer tous les caractères sauf les quatre premiers caractères