2017-06-28 2 views
0

Remarque: J'utilise Mac OS X Sierra mais ce problème se produit également sous Ubuntu.Le texte ne s'efface pas après la modification de l'invite du terminal

Je personnalisent les invite du terminal en tant que tel:

export PS1="\n\[\033[1;31m\]\u \[\033[1;32m\]@ \[\033[1;32m\]\h \[\033[0;35m\]in \[\033[0;36m\]\w\n\[\033[0;34m\]> \[\033[1;37m\] \e[0m" 

Notez que j'ai mis une nouvelle ligne à la fin, donc je commence à taper des commandes sur une nouvelle ligne après la >. Je l'ai fait sur un certain nombre de machines, et j'ai remarqué que chaque fois que j'ajoute la nouvelle ligne, le terminal se comporte bizarrement.

Par weirdly, le comportement exact je me réfère à ceci (ce qui inclut les étapes pour reproduire l'erreur si vous utilisez la valeur PS1 je l'ai mentionné):

  1. commandes Accès âgées en appuyant sur la flèche clé. Lorsque je rencontre dans l'historique une commande composée de plus d'un mot et que le premier mot comporte plus de 4 caractères, les 4 premiers caractères du mot «coller» à la partie initiale du mot rapide.

  2. Cette 'partie collante' ne peut pas être effacée par moi, et ne va même pas lorsque j'appuie plusieurs fois sur la touche fléchée haut.

Par exemple, si les 4 dernières commandes que je candidats ont été (du moins récent au plus récent): clear, man man, this that et help.

Puis, quand je regarde les commandes précédentes en appuyant sur la touche de manière incrémentale:

enter image description here

help est visible correctement.

enter image description here

this that est visible correctement.

enter image description here

Notez comment this est joint en annexe au début. Je ne peux pas le supprimer si j'essaye.

enter image description here

continue à rester comme j'appuie sur la touche haut.

Comment puis-je résoudre ce problème?

Répondre

2

Chacune des séquences d'échappement dans votre message doit être placé entre crochets avec \[ et \] dire bash que ces caractères doivent être ignorés dans le but de colonnes de comptage. Le dernier de votre exemple n'est pas entre parenthèses:

export PS1="\n\[\033[1;31m\]\u \[\033[1;32m\]@ \[\033[1;32m\]\h \[\033[0;35m\]in \[\033[0;36m\]\w\n\[\033[0;34m\]> \[\033[1;37m\] \e[0m" 

c.-à-d., \e[0m

Si vous corrigez l'erreur, bash donnera de meilleurs résultats. Ceci montre la correction suggérée;

export PS1="\n\[\033[1;31m\]\u \[\033[1;32m\]@ \[\033[1;32m\]\h \[\033[0;35m\]in \[\033[0;36m\]\w\n\[\033[0;34m\]> \[\033[1;37m\] \[\e[0m\]" 
+1

Merci, ça marche! –