web-dev-qa-db-fra.com

Comment puis-je changer la couleur de mon invite dans zsh (différent du texte normal)?

Pour mieux reconnaître le début et la fin de la sortie sur une ligne de commande, je souhaite modifier la couleur de mon invite afin qu'elle soit visiblement différente de la sortie du programme. Pendant que j'utilise zsh, quelqu'un peut-il me donner un indice?

84
Mnementh

Voici un exemple de la manière de définir une invite rouge:

PS1=$'\e[0;31m$ \e[0m'

La magie c'est le \e[0;31m (allume le premier plan rouge) et \e[0m (désactive les attributs du personnage). Celles-ci s'appellent des séquences d'échappement. Différentes séquences d'échappement donnent des résultats différents, du positionnement absolu du curseur à la couleur, en passant par la possibilité de changer la barre de titre de la fenêtre, etc.

Pour plus d'informations sur les séquences d'échappement, voir l'entrée Wikipedia sur les codes d'échappement ANSI

43
Bryan Oakley

Mettez ceci dans ~/.zshrc:

autoload -U colors && colors
PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% "

Couleurs prises en charge:
Rouge, bleu, vert, cyan, jaune, magenta, noir et blanc (de cette réponse ) bien que différents ordinateurs puissent avoir différentes options valides.

Codes de couleur surround (et tout autre caractère non imprimable) avec %{....%}. Ceci est pour que le retour à la ligne fonctionne correctement.

De plus, voici comment vous pouvez obtenir que cela fonctionne avec le rognage de répertoire à partir de ici .

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "
219
Joe the Person

Zsh est livré avec des invites de couleur intégrées. Essayer

autoload -U promptinit && promptinit

et alors Prompt -l liste les invites disponibles, -p fire prévisualise l'invite "fire", -s fire le définit.

Lorsque vous êtes prêt à ajouter une invite, ajoutez quelque chose comme ceci sous la ligne de chargement automatique ci-dessus:

Prompt fade red
51
Mitro

Je ne pense pas que le autoload -U colors && colors est plus nécessaire et on peut simplement faire:

PS1="%{%F{red}%}%n%{%f%}@%{%F{blue}%}%m %{%F{yellow}%}%~ %{$%f%}%% "

obtenir le même résultat que réponse de FireDude . Voir le documentation ZSH pour plus d'informations.

17
Andrew Marshall

J'ai trouvé que, avec zsh5 (la valeur par défaut sous Debian Jessie), toutes ces solutions fonctionnent:

  • $'\e[00m
  • $fg[white]
  • $fg{white}

Maintenant, ils ont un problème: ils déplacent le curseur, ce qui donne une mauvaise étiquette lors de la tabulation (pour la complétion automatique). La solution consiste simplement à entourer les séquences d'échappement avec %{FOOBAR%}. Cela m'a pris du temps pour comprendre cela. Pour les 2ème et 3ème solutions, le chargement du module colors est obligatoire. Pour que la 1ère solution reste lisible, définissez simplement des variables pour les couleurs que vous utilisez.

4
user3459474

man zshall et recherche Prompt EXPANSION

Après avoir lu les réponses existantes ici, plusieurs d’entre elles sont en conflit. J'ai essayé différentes approches sur les systèmes exécutant zsh 4.2 et 5+ et j'ai constaté que ces réponses sont contradictoires parce qu'elles ne précisent pas la version de ZSH à laquelle elles sont destinées. Différentes versions utilisent une syntaxe différente pour cela et certaines d'entre elles requièrent divers chargements automatiques.

Donc, le mieux est probablement de manipuler zshall et de rechercher Prompt EXPANSION pour connaître toutes les règles relatives à votre installation particulière de zsh. Notez dans les commentaires, des choses comme "J'utilise Ubuntu 11.04 ou 10.4 ou OSX" ne sont pas très significatives, car on ne sait pas quelle version de ZSH vous utilisez. Ubuntu 11.04 n'implique pas une version plus récente de ZSH que Ubuntu 10.04. Il peut y avoir un certain nombre de raisons pour lesquelles une version plus ancienne a été installée. D'ailleurs, une version plus récente de ZSH n'implique pas quelle syntaxe utiliser sans savoir quelle version de ZSH il s'agit.

0
cs_alumnus