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 changer la couleur de mon invite, de sorte qu’elle soit visiblement différente de la sortie du programme. Comme j’utilise zsh, quelqu’un peut-il me donner un indice?

Voici un exemple de définition d’une invite rouge:

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

La magie est le \e[0;31m (activer le premier plan rouge) et \e[0m (désactiver les atsortingbuts des caractères)). Ce sont des séquences d’échappement. Différentes séquences d’échappement vous 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 votre fenêtre, etc.

Pour plus d’informations sur les séquences d’échappement, consultez l’entrée Wikipedia sur les codes d’échappement ANSI.

Mettez ceci dans ~/.zshrc :

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

Couleurs sockets en charge:
Rouge, Bleu, Vert, Cyan, Jaune, Magenta, Noir et Blanc (à partir de cette réponse ) bien que différents ordinateurs puissent avoir des options valides différentes.

Entourez les codes de couleur (et tout autre caractère non imprimable) avec %{....%} . C’est pour que le retour à la ligne fonctionne correctement.

De plus, voici comment vous pouvez faire en sorte que cela fonctionne avec le découpage de répertoires ici .

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

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

 autoload -U promptinit && promptinit 

et ensuite prompt -l liste les invites disponibles, -p fire aperçus de l’invite “fire”, -s fire définit.

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

 prompt fade red 

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

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

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

J’ai trouvé que, avec zsh5 (celui par défaut sur Debian Jessie), toutes ces solutions fonctionnent:

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

Maintenant, ils ont un problème: ils vont déplacer le curseur, ce qui entraîne une décalcomanie moche lors de la tabulation (pour l’auto-complétion). La solution consiste simplement à entourer les séquences d’échappement avec %{FOOBAR%} . Il m’a fallu du temps pour comprendre cela. Pour les 2ème et 3ème solutions, le module de chargement des colors est obligatoire. Pour que la première solution rest lisible, définissez simplement les variables pour les couleurs que vous utilisez.

man zshall et recherche de PROMPT EXPANSION

Après avoir lu les réponses existantes, plusieurs d’entre elles sont en conflit. J’ai essayé les différentes approches sur les systèmes fonctionnant avec zsh 4.2 et 5+ et j’ai découvert que la raison pour laquelle ces réponses sont contradictoires est qu’elles ne disent pas à quelle version de ZSH elles sont destinées. Différentes versions utilisent une syntaxe différente pour cela et certaines d’entre elles nécessitent différents autoloads.

Donc, le meilleur pari est probablement de man zshall et de rechercher PROMPT EXPANSION pour trouver toutes les règles pour 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 il est difficile de savoir 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 antérieure a été installée. Pour cela, une nouvelle version de ZSH n’implique pas quelle syntaxe utiliser sans connaître la version de ZSH.