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

121

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

Mnementh
la source

Réponses:

58

Voici un exemple de la façon de définir 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 attributs de caractère). Celles-ci sont appelées 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

Bryan Oakley
la source
3
J'utilise PROMPT = '[%!]' Dans mon .zshrc. Comment pouvez-vous le colorier? Je lance sans succès PROMPT = '\ e [0; 31m [%!] \ E [0m' dans mon .zshrc.
Léo Léopold Hertz 준영
3
@ erikb85: pourquoi dites-vous que c'est faux? Puis-je faire quelque chose pour améliorer la réponse? Pour moi, faire ce qui précède me donne un signe dollar rouge, donc je ne comprends pas pourquoi vous pensez que c'est faux.
Bryan Oakley
4
Cela fonctionne, mais le $ avant la chaîne rend zshrc un problème. Le texte est mis à gauche lorsque j'utilise la tabulation. Je préfère @Joe the Person answer
Moebius
1
Je suis d'accord @Moebius, je voulais que celui-ci fonctionne, c'était clair et simple, mais cela gâche complètement l'onglet sur cd
diek
2
Je pensais que zsh n'avait pas besoin de trucs fous d'évasion ANSI bizarres ... il doit y avoir une meilleure réponse ...
Charlie Parker
264

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:
red, blue, green, cyan, yellow, magenta, black, et white(de cette réponse ) , bien que différents ordinateurs peuvent avoir différentes options valides.

Encadrez les codes de couleur (et tout autre caractère non imprimable) avec %{....%}. C'est pour que l'habillage du texte fonctionne correctement.

De plus, voici comment vous pouvez faire fonctionner cela avec le rognage de répertoire à partir d' ici .

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "
Joe la personne
la source
3
D'accord, de loin la meilleure réponse (heureusement, cette réponse était le troisième résultat Google;)
new123456
3
ne fonctionne pas pour moi. :(zsh: colors: function definition file not found
balki
Utilisez-vous ZSH4? Je ne pense pas que cela fonctionne sur les versions inférieures à 4.3.11. Si vous avez la dernière version, peut-être n'utilise-t-elle pas les bons fichiers.
Joe the Person
Quelles sont les valeurs de couleur valides?
chakrit
12
les %{...%}moyens que le contenu sera interprété comme une séquence d'échappement littéral, de sorte que le curseur wont se déplacer lors de l' impression de la séquence. Si vous ne l'utilisez pas, les codes de couleur peuvent en fait déplacer le curseur et produire des effets indésirables. Ceci est documenté dans la Visual Effectssection de la page de manuel zshmisc
Bruno Penteado
69

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

autoload -U promptinit && promptinit

puis prompt -lrépertorie les invites disponibles, affiche un -p fireaperçu de l'invite "feu", la -s firedé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
Mitro
la source
Existe-t-il un moyen de colorer tous les thèmes? J'aime l'invite de Walter, mais je l'aimerais en rouge.
Pat Myron
25

Je ne pense plus que ce autoload -U colors && colorssoit 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 . Consultez la documentation ZSH pour plus d'informations.

Andrew Marshall
la source
FYI. Je viens d'essayer dans Ubunutu 11.04 et les couleurs ne fonctionnaient pas pour moi sansautoload -U colors && colors
dpc.pw
2
Bizarre. Fonctionne pour moi sur OS X et Ubuntu 10.04.
Andrew Marshall
@Andrew Marshall Oui, mais il est plus probable que cela fonctionne avec autoload.
Joe the Person
@ fireDude67 Comment définir autoload on?
balki
1
Si vous n'en avez pas besoin autoload -U colors, cela signifie que votre distribution l'a déjà dans un autre fichier d'initialisation zsh. Vous devez toujours l'inclure dans les scripts que vous avez l'intention de partager avec d'autres.
kindall
23

Couleurs disponibles:

for i in {1..256}; do print -P "%F{$i}Color : $i"; done;

                                      


Variables disponibles:

  • %F{118} (1 à 256)
  • $FG[018] (1 à 256)
  • $fg[magenta] (magenta, rouge, blanc, jaune, noir, bleu, cyan, vert)

Exemple rapide:

PS1='%(?.%F{green}.%F{green})%n@%m:%~%# %f'

Capturer

PS1='%{$fg[gray]%}[%T][%n@%m%{$reset_color%}:%c%{$reset_color%}%{$fg[gray]%}$(git_prompt_info)]$(prompt_char)%{$reset_color%} ' 

Capturer


Installer:

La définition des variables (PS1 / PROMPT) doit être ajoutée à ~/.zshrc

Nous pouvons également redéfinir la variable PS1 sur l'invite actuelle pour la tester tout de suite (les modifications ne sont pas enregistrées).

intika
la source
15

La réponse de Bryan Oakley ci-dessus a un pépin comme cela a déjà été signalé et la solution proposée par Andrew Marshall bien qu'elle ne porte pas le pépin, néanmoins cela ne le rend pas évident pour trop de personnalisation sur les couleurs utilisées.

Comme macOS Catalina demande désormais que zsh soit le shell par défaut, je pense que plusieurs autres personnes voudront peut-être personnaliser leur invite et viendront peut-être ici pour une réponse. Donc, j'ai pensé que j'essaierais de donner un résumé plus large et de toucher à d'autres notions très étroitement liées qui permettent plus de personnalisation.

Codes à 3 chiffres pour différentes couleurs. Tout d'abord, nous pouvons trouver ici des codes à 3 chiffres pour différentes couleurs: https://unix.stackexchange.com/a/124409/194343 . Par exemple, 214 est une sorte de couleur orange.

Premier plan et arrière-plan. L'autre information clé est que pour les couleurs de fond F oreground et bac K, on peut définir ce qu'elles veulent avec F et K respectivement. La source est le manuel zsh sur les effets visuels: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

Ainsi, par exemple, les deux commandes suivantes

autoload -U colors && colors
export PS1="%F{214}%K{000}%m%F{015}%K{000}:%F{039}%K{000}%~%F{015}%K{000}\$ "

présenter le nom d'hôte en orange sur fond noir, suivi d'un deux-points en blanc sur fond noir, suivi du répertoire de travail actuel en bleu vif sur fond noir, suivi du signe dollar en blanc sur fond noir.

Plus d'informations connexes se trouvent ci-dessous.

Informations rapides sur le côté droit. Par exemple, ajouter un horodatage. Voir https://superuser.com/a/1251045/290299 . Bien sûr, cela peut être codé par couleur, par exemple avec une couleur bleu clair / violet-ish, comme ceci:

RPROMPT="%F{111}%K{000}[%D{%f/%m/%y}|%@]"

Couleurs pour ls. Après avoir lu le manuel de ls, on peut par exemple activer les couleurs pour lsutiliser les deux commandes suivantes:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

Enfin, comme dernière remarque que je n'ai pas testée car je suis satisfait de ma configuration, une autre avenue pourrait être pour quelqu'un d'installer le port coreutilsdepuis MacPorts puis de l'utiliser gdircolors(source: https://unix.stackexchange.com/a/174596 / 194343 ). (Je pourrais modifier cette dernière partie à l'avenir, car tous les éléments ci-dessus sont des éléments connexes qui rendent la vie de tous les jours beaucoup plus amusante et plus facile à gérer.)

MightyMouse
la source
1
C'est une réponse extrêmement utile. Merci d'avoir mis cela ensemble.
shaunakde
@shaunakde Vous êtes les bienvenus! :)
MightyMouse
4

J'ai trouvé qu'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 déplaceront le curseur, ce qui entraînera un décalque laid lors de la tabulation (pour l'auto-complétion). La solution est simplement d'entourer les séquences d'échappement %{FOOBAR%}. Il m'a fallu un certain temps pour comprendre cela. Pour les 2e et 3e solutions, le colorsmodule de chargement est obligatoire. Pour que la première solution reste lisible, définissez simplement des variables pour les couleurs que vous utilisez.

user3459474
la source
2

Pour obtenir une invite avec la couleur en fonction de l'état de sortie de la dernière commande, vous pouvez utiliser ceci:

PS1='%(?.%F{green}.%F{red})%n@%m:%~%# %f'

Ajoutez simplement cette ligne à votre ~/.zshrc.

La documentation répertorie les espaces réservés possibles.

Martin
la source
C'est la meilleure solution ici, merci beaucoup.
Eddy Ekofo
2

Essayez mon préféré: mettez

~/.zshrc

cette ligne:

PROMPT='%F{240}%n%F{red}@%F{green}%m:%F{141}%d$ %F{reset}'

n'oublie pas

source ~/.zshrc

pour tester les changements

vous pouvez bien sûr changer les couleurs / codes couleur :-)

Hermann Schwarz
la source
0

man zshall et recherchez PROMPT EXPANSION

Après avoir lu les réponses existantes ici, plusieurs d'entre elles sont contradictoires. J'ai essayé les différentes approches sur les systèmes exécutant zsh 4.2 et 5+ et j'ai trouvé que la raison pour laquelle ces réponses sont contradictoires est qu'elles ne disent pas quelle version de ZSH elles sont ciblées. Différentes versions utilisent une syntaxe différente pour cela et certaines d'entre elles nécessitent divers autoloads.

Donc, le meilleur pari est probablement de manier zshall et de rechercher PROMPT EXPANSION pour connaître toutes les règles de 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 la syntaxe à utiliser sans savoir de quelle version de ZSH il s'agit.

cs_alumnus
la source
0

Pour compléter toutes les réponses ci-dessus, une autre astuce pratique consiste à placer les paramètres d'invite colorés dans une fonction zsh. Là, vous pouvez définir des variables locales pour aliaser des commandes plus longues, par exemple rc=$reset_colorou définir vos propres variables de couleur. N'oubliez pas de le placer dans votre .zshrcfichier et d'appeler la fonction que vous avez définie:

# Coloured prompt
autoload -U colors && colors
function myprompt {
  local rc=$reset_color
  export PS1="%F{cyan}%n%{$rc%}@%F{green}%m%{$rc%}:%F{magenta}%~%{$rc%}%# "
}
myprompt
Mabalenk
la source