Comportement étrange dans Terminal avec un .bash_profile personnalisé

8

Il est difficile de décrire le comportement, mais voici un court extrait:

http://www.youtube.com/watch?v=9KqHBA94FPI

Fondamentalement, lors de la saisie de commandes multi-lignes, à la fin de la première ligne, le bloc d'insertion remonte au début de la première ligne, écrit sur la première ligne, puis continue comme d'habitude sur les deuxième, troisième, etc. lignes. . Lors de la suppression, cela me permet de supprimer toute la commande, ainsi que les espaces vides sur la ligne au-dessus de la commande (je l'ai configuré pour que les commandes soient insérées après une ligne contenant les informations utilisateur @ hôte / répertoire. Cela me permet même de supprimer le dernière partie du répertoire et de l'hôte que j'ai décrite ci-dessus. Désolé, je suis horrible à expliquer cela, la vidéo fera un meilleur travail.

Voici le contenu de mon .bash_profile:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "
Blair Beckwith
la source

Réponses:

12

Vous devez entourer vos caractères non imprimables (dans ce cas, vos séquences d'échappement ANSI) de séquences d'échappement bash: \[et \]. De cette façon, bash saura que les caractères inclus ne sont pas visibles, c'est-à-dire. ils ne prennent pas de place, ie. ils ne doivent pas être inclus dans le calcul de la longueur de mot utilisé par le wrapper de ligne.

en d'autres termes, changez votre PS1définition:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

… à:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

Et voici la même PS1valeur, pour la lecture humaine uniquement, avec une lisibilité peut-être améliorée (ANSI-échappe dans la rangée inférieure, bash échappe au milieu et imprime les caractères dans la rangée supérieure.)

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

Lectures complémentaires:

Jari Keinänen
la source
C'est parfait, a résolu mon problème. Merci beaucoup pour l'aide!
Blair Beckwith
Blair, bienvenue à Ask Different! Si vous souhaitez une réponse à votre question, veuillez voter et l'accepter.
nohillside
0

Je tout le monde,

J'ai eu des problèmes similaires et j'ai trouvé une solution en changeant simplement ma variable PS1 de l'original en une très simple, juste mon nom en fait: export PS1 = Alex

Maintenant, mon terminal n'a plus de comportement étrange.

J'espère que ça va aider.

Alex (sur Mac Lion 10.8)

user43414
la source