J'aimerais avoir un chemin coloré lisible. Par exemple, au lieu d’utiliser% ~ pour retourner, ~/path/to/foo
je voudrais le formater ~$RED/$NOCOLORpath$RED/$NOCOLORto$RED/$NOCOLORfoo
pour mettre en évidence les séparateurs de chemin.
Puis-je définir le contenu de PROMPT afin que l'expression de chemin soit réévaluée sur chaque affichage? Quelque chose comme ${${(%):-%~}//\//_some_format_expression/}
évidemment ne fonctionne pas.
Ou devrais-je pirater cela plus loin et forcer la valeur PROMPT à se réinitialiser chaque fois que nous changeons de répertoire?
Toute solution permettant d'atteindre l'objectif de formatage du chemin serait la bienvenue.
Merci :)
Réponses:
zsh
Essaye ça:
Voici une ventilation de l'invite:
%{...%}
- une séquence d'échappement$(pwd|grep --color=always /)
- affiche le répertoire en cours et met en surbrillance/
- la couleur dépend de la variable d'environnement $ GREP_COLORS (ou de sa valeur par défaut) - le rouge gras est la valeur par défaut%${#PWD}G
- utilisez la longueur en caractères du nom du répertoire en cours comme valeur de pépin. Cela oblige le shell à considérer la longueur de la séquence de caractères précédente (après le "%{
") à la place de la longueur réelle de la chaîne qui inclut les séquences d'échappement ANSI. Cela empêche le shell d’être dérouté par la position du curseur par rapport à la fin de l’invite.- - - - - - - c'est la fin de la partie qui répond à votre question - - - - - - -
%(!.%F{red}.%F{cyan})
- s'il s'agit d'un shell privilégié (racine), définissez la couleur de premier plan sur rouge, sinon cyan%n
- sortir le nom d'utilisateur%f
- réinitialiser la couleur de premier plan à la valeur par défaut@
- un signe littéral%F{yellow}
- faire la couleur de premier plan jaune%m
- affiche le nom d'hôte%f
- réinitialiser la couleur de premier plan à la valeur par défaut%(!.%F{red}.)
- s'il s'agit d'un shell privilégié (racine), définissez la couleur de premier plan sur rouge%#
- sortie a#
pour un shell privilégié ou%
pour un non privilégié%f
- réinitialiser la couleur de premier plan à la valeur par défautJ'ai mis le chemin d'abord dans cette invite, car la question concerne le chemin.
Voici une version pour zsh qui modifie la couleur de la barre oblique selon que vous êtes root (privilégié) en manipulant la
$GREP_COLORS
variable:Frapper
Vous pouvez faire une invite similaire dans Bash. Dans cet exemple, j'ai placé l'utilisateur et le nom d'hôte en premier et la couleur des barres obliques change également lorsque l'UID est égal à 0. Avertissement: ceci écrase la
$PS1
variable d'invite de Bash . Cela ne devrait pas poser de problème, sauf si vous faites quelque chose de spécial ou si vous vous attendez à ce que le comportement change lorsque vous définissez cette variable directement et que ceci est appliqué. En outre, cela utilise une variable appelée "usercolor
" qui peut entrer en collision avec autre chose, bien que tout cela puisse être mis dans une fonction et que la variable soit déclarée locale.J'ai profité du fait que Bash ne dispose pas de la fonction "glitch" de zsh pour utiliser la substitution d'expansion de paramètre pour colorier les barres obliques de manière conditionnelle (au lieu d'utiliser grep).
la source
PS1="$(pwd)"; PS1="${debian_chroot:+($debian_chroot)}\[$bldgrn\]\u@$(fgcolor $hostnamecolor)\h$(resetcolor)\[$txtrst\]:\[$bldblu\]${PS1//\//$txtred/$bldblu}\[\e[00m\]$bldred\$(parse_git_branch)\[$txtrst\] \[$undcyn\]\T \d\[$txtrst\] 95\$ "
couleurs définies dans github.com/ibrahima/dotfiles/blob/master/.bashrc.d/prompt.shAprès quelques échanges, je peux fournir une solution prioritaire
chpwd
:my_path
variable temporaire ? Je ne peux pas remplacer directement le / inside% ~ ...doprompt
est probablement plus propre.la source
Une solution pure zsh:
${(%):-%~}
est le chemin actuel.${xxxxx//\//${PR_BOLD_RED}/%f}
remplace chaque / dans xxxxx par une couleur rouge vifJ'avais utilisé des guillemets doubles dans mes tests, ce qui ne permet pas la substitution. Tout fonctionne bien avec des guillemets simples.
la source
$PR_BOLD_RED
défini ailleurs. Je dois utiliserPROMPT='%n@%m: %{%B%F{red}%}${${(%):-%~}//\//%B%F{red\}/%b%f}%b%f '
notamment l' échappement très étrange de l'accolade fermante (uniquement) après le deuxième "rouge".Voici ma tentative (basée sur NicDumZ):
La différence est que j'utilise un chemin coloré. Je dois donc revenir à la couleur d'origine du chemin une fois que la barre oblique est colorée. Dans mon cas, le chemin est normalement jaune et la barre oblique se colore avec du magenta, puis elle redevient jaune. Je préfère également utiliser les séquences% F% f car elles me semblent beaucoup plus lisibles.
la source