Ich hätte gerne einen lesbaren farbigen Pfad. Anstatt zum Zurückgeben einfach% ~ zu verwenden, ~/path/to/foo
möchte ich es formatieren ~$RED/$NOCOLORpath$RED/$NOCOLORto$RED/$NOCOLORfoo
, um die Pfadtrennzeichen hervorzuheben.
Kann ich den Inhalt von PROMPT so definieren, dass der Pfadausdruck bei jeder Anzeige neu ausgewertet wird? Sowas ${${(%):-%~}//\//_some_format_expression/}
funktioniert offensichtlich nicht.
Oder sollte ich das weiter hacken und den PROMPT-Wert zwingen, jedes Mal zurückgesetzt zu werden, wenn wir ein Verzeichnis wechseln?
Jede Lösung, die das Ziel der Pfadformatierung erreicht, ist willkommen.
Vielen Dank :)
Antworten:
zsh
Versuche dies:
Hier ist eine Aufschlüsselung der Eingabeaufforderung:
%{...%}
- eine Fluchtsequenz$(pwd|grep --color=always /)
- Das aktuelle Verzeichnis drucken und markieren./
- Die Farbe hängt von der Umgebungsvariablen $ GREP_COLORS (oder ihrem Standardwert) ab. - Die Standardeinstellung ist Fettrot%${#PWD}G
- Verwenden Sie die Länge des Namens des aktuellen Verzeichnisses in Zeichen als Störimpuls. Dies veranlasst die Shell, dies als die Länge der vorhergehenden Zeichenfolge (nach dem "%{
") anstelle der tatsächlichen Länge der Zeichenfolge zu betrachten, die ANSI-Escape-Folgen enthält. Dies verhindert, dass die Shell über die Position des Cursors relativ zum Ende der Eingabeaufforderung verwirrt wird.- - - - - - - das ist das Ende des Teils, der Ihre Frage beantwortet - - - - - -
%(!.%F{red}.%F{cyan})
- Wenn es sich um eine privilegierte Shell (Root) handelt, setzen Sie die Vordergrundfarbe auf Rot, andernfalls auf Cyan%n
- Benutzernamen ausgeben%f
- Setzen Sie die Vordergrundfarbe auf die Standardfarbe zurück@
- ein wörtliches Zeichen%F{yellow}
- mach die Vordergrundfarbe gelb%m
- den Hostnamen ausgeben%f
- Setzen Sie die Vordergrundfarbe auf die Standardfarbe zurück%(!.%F{red}.)
- Wenn dies eine privilegierte Shell (root) ist, setzen Sie die Vordergrundfarbe auf rot%#
- Geben Sie a#
für eine privilegierte Shell oder%
für eine nicht privilegierte Shell aus%f
- Setzen Sie die Vordergrundfarbe auf die Standardfarbe zurückIch habe den Pfad an erster Stelle in dieser Eingabeaufforderung zur Betonung gesetzt, da die Frage den Pfad betrifft.
Hier ist eine Version für zsh, die die Farbe des Schrägstrichs ändert, je nachdem, ob Sie root (privilegiert) sind, indem Sie die
$GREP_COLORS
Variable bearbeiten:Bash
Sie können eine ähnliche Eingabeaufforderung in Bash ausführen. In diesem Beispiel habe ich den Benutzer- und Hostnamen an die erste Stelle gesetzt und die Farbe der Schrägstriche ändert sich auch, wenn die UID 0 ist. Warnung: Dadurch wird die
$PS1
Eingabeaufforderungsvariable von Bash überschrieben . Dies sollte kein Problem sein, es sei denn, Sie tun etwas Besonderes oder Sie erwarten, dass sich das Verhalten ändert, wenn Sie diese Variable direkt festlegen und dies in Kraft tritt. Dies verwendet auch eine Variable mit dem Namen "usercolor
" verwendet, die mit etwas anderem kollidieren kann, obwohl das Ganze in eine Funktion gestellt und die Variable als local deklariert werden könnte.Ich habe die Tatsache ausgenutzt, dass Bash nicht über zshs "Glitch" -Funktion verfügt, um die Parametererweiterungsersetzung zu verwenden, um die Schrägstriche bedingt einzufärben (anstatt grep zu verwenden).
quelle
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\$ "
Farben definiert in github.com/ibrahima/dotfiles/blob/master/.bashrc.d/prompt.shNach einigem Hin und Her kann ich eine übergeordnete Lösung bereitstellen
chpwd
:my_path
Variable loszuwerden ? Ich kann das / inside% ~ nicht direkt ersetzen ...doprompt
ist wahrscheinlich sauberer.quelle
Eine reine zsh-Lösung:
${(%):-%~}
ist der aktuelle Pfad.${xxxxx//\//${PR_BOLD_RED}/%f}
ersetzt jedes / in xxxxx durch ein fett rot gefärbtesIch habe in meinen Tests doppelte Anführungszeichen verwendet, die keine Substitution zulassen. Alles funktioniert gut mit einfachen Anführungszeichen.
quelle
$PR_BOLD_RED
anderer Stelle definiert haben . Ich mussPROMPT='%n@%m: %{%B%F{red}%}${${(%):-%~}//\//%B%F{red\}/%b%f}%b%f '
auch das sehr seltsame Entkommen der schließenden geschweiften Klammer (nur) nach dem zweiten "roten" verwenden.Hier ist mein Versuch (basierend auf NicDumZ's):
Der Unterschied besteht darin, dass ich einen farbigen Pfad verwende. Daher muss ich zu meiner ursprünglichen Farbe für den Pfad zurückkehren, sobald der Schrägstrich farbig wird. In meinem Fall ist der Pfad normalerweise gelb, und der Schrägstrich wird mit Magenta gefärbt, und dann wird er wieder gelb. Ich bevorzuge auch die Verwendung von% F% f Sequenzen, da diese für mich viel besser lesbar erscheinen.
quelle