Wie kann ich die Farbe meiner Eingabeaufforderung in zsh ändern (anders als normaler Text)?

121

Um den Beginn und das Ende der Ausgabe in einer Befehlszeile besser zu erkennen, möchte ich die Farbe meiner Eingabeaufforderung so ändern, dass sie sich sichtbar von der Programmausgabe unterscheidet. Kann mir jemand einen Hinweis geben, wenn ich zsh benutze?

Mnementh
quelle

Antworten:

57

Hier ist ein Beispiel für das Festlegen einer roten Eingabeaufforderung:

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

Die Magie ist das \e[0;31m(roten Vordergrund \e[0meinschalten ) und (Zeichenattribute ausschalten). Diese werden Escape-Sequenzen genannt. Unterschiedliche Escape-Sequenzen führen zu unterschiedlichen Ergebnissen, von der absoluten Cursorpositionierung über die Farbe bis hin zur Änderung der Titelleiste Ihres Fensters usw.

Weitere Informationen zu Escape-Sequenzen finden Sie im Wikipedia-Eintrag zu ANSI-Escape-Codes

Bryan Oakley
quelle
3
Ich verwende PROMPT = '[%!]' In meiner .zshrc. Wie kannst du es färben? Ich führe PROMPT = '\ e [0; 31m [%!] \ E [0m' in meiner .zshrc erfolglos aus.
Léo Léopold Hertz 29
3
@ erikb85: warum sagst du es ist falsch? Kann ich etwas tun, um die Antwort zu verbessern? Wenn ich das oben genannte mache, bekomme ich ein rotes Dollarzeichen, deshalb verstehe ich nicht, warum du denkst, dass es falsch ist.
Bryan Oakley
4
Es funktioniert, aber das $ vor dem String lässt zshrc fehlerhaft werden. Der Text wird links eingefügt, wenn ich eine Tabelle verwende. Ich bevorzuge @ Joe die Person Antwort
Möbius
1
Ich bin damit einverstanden, @Moebius, ich wollte, dass dieses funktioniert, es war klar und einfach, aber es bringt die Registerkarte auf CD
Diek
2
Ich dachte, zsh brauchte kein verrücktes komisches ANSI-Fluchtmaterial ... es muss eine bessere Antwort geben ...
Charlie Parker
263

Geben Sie dies ein ~/.zshrc:

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

Unterstützte Farben:
red, blue, green, cyan, yellow, magenta, black, und white(aus dieser Antwort ) , obwohl verschiedene Computer können verschiedene gültige Optionen haben.

Surround-Farbcodes (und andere nicht druckbare Zeichen) mit %{....%}. Damit funktioniert der Textumbruch korrekt.

Außerdem erfahren Sie hier, wie Sie dies von hier aus mit dem Trimmen von Verzeichnissen zum Laufen bringen können .

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "
Joe die Person
quelle
3
Einverstanden, bei weitem die überlegene Antwort (zum Glück war diese Antwort das dritte Google-Ergebnis;)
new123456
3
Ich arbeite nicht für mich. :(zsh: colors: function definition file not found
Balki
Verwenden Sie ZSH4? Ich denke nicht, dass es auf Versionen unter 4.3.11 funktioniert. Wenn Sie die neueste Version haben, werden möglicherweise nicht die richtigen Dateien verwendet.
Joe die Person
Was sind die gültigen Farbwerte?
Chakrit
12
Dies %{...%}bedeutet, dass der Inhalt als wörtliche Escape-Sequenz interpretiert wird, sodass sich der Cursor beim Drucken der Sequenz nicht bewegt. Wenn Sie dies nicht verwenden, können die Farbcodes den Cursor tatsächlich bewegen und unerwünschte Effekte erzeugen. Dies ist in dem Visual EffectsAbschnitt in zshmisc Manpage
Bruno Penteado
69

Zsh wird mit eingebauten farbigen Eingabeaufforderungen geliefert. Versuchen

autoload -U promptinit && promptinit

und prompt -llistet dann verfügbare -p fireEingabeaufforderungen auf, zeigt eine Vorschau der Eingabeaufforderung "Feuer" an und -s firelegt sie fest.

Wenn Sie bereit sind, eine Eingabeaufforderung hinzuzufügen, fügen Sie unter der Autoload-Zeile oben Folgendes hinzu:

prompt fade red
Mitro
quelle
Gibt es eine Möglichkeit, alle Themen zu färben? Ich mag die Walters-Eingabeaufforderung, möchte sie aber in Rot.
Pat Myron
24

Ich glaube nicht, dass das autoload -U colors && colorsmehr gebraucht wird und man kann einfach:

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

um das gleiche Ergebnis wie die Antwort von FireDude zu erzielen . Weitere Informationen finden Sie in der ZSH-Dokumentation .

Andrew Marshall
quelle
Zu Ihrer Information. Ich habe es gerade in Ubunutu 11.04 versucht und Farben haben bei mir nicht funktioniert ohneautoload -U colors && colors
dpc.pw
2
Seltsam. Funktioniert für mich unter OS X & Ubuntu 10.04.
Andrew Marshall
@ Andrew Marshall Ja, aber es ist wahrscheinlicher, mit autoloadzu arbeiten.
Joe die Person
@ fireDude67 Wie einstellen autoload on?
Balki
1
Wenn Sie dies nicht benötigen autoload -U colors, bedeutet dies, dass Ihre Distribution es bereits in einer anderen zsh-Initialisierungsdatei hat. Sie sollten es weiterhin in Skripten aufnehmen, die Sie mit anderen teilen möchten.
Kindall
21

Verfügbare Farben:

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

                                      


Verfügbare Variablen:

  • %F{118} (1 bis 256)
  • $FG[018] (1 bis 256)
  • $fg[magenta] (Magenta, Rot, Weiß, Gelb, Schwarz, Blau, Cyan, Grün)

Eingabeaufforderung Beispiel:

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

Erfassung

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

Erfassung


Installieren:

Die Variablendefinition (PS1 / PROMPT) muss hinzugefügt werden ~/.zshrc

Wir können die PS1-Variable auch an der aktuellen Eingabeaufforderung neu definieren, um sie sofort zu testen (Änderungen werden nicht gespeichert).

Intika
quelle
15

Die Antwort von Bryan Oakley oben hat einen Fehler, wie bereits erwähnt, und die von Andrew Marshall angebotene Lösung enthält zwar keinen Fehler, macht es jedoch nicht offensichtlich, dass die verwendeten Farben zu stark angepasst werden müssen.

Da macOS Catalina von nun an verlangt, dass zsh die Standard-Shell ist, möchten möglicherweise mehrere weitere Personen ihre Eingabeaufforderung anpassen und kommen möglicherweise hierher, um eine Antwort zu erhalten. Daher dachte ich, ich würde versuchen, eine breitere Zusammenfassung zu geben und andere sehr eng verwandte Begriffe zu berühren, die eine stärkere Anpassung ermöglichen.

3-stellige Codes für verschiedene Farben. Zunächst finden wir hier dreistellige Codes für verschiedene Farben: https://unix.stackexchange.com/a/124409/194343 . Zum Beispiel ist 214 eine Art orange Farbe.

Vordergrund und Hintergrund. Die andere wichtige Information ist, dass man für die Grundfarben F oreground und bac K definieren kann, was sie mit F bzw. K wollen . Quelle ist das zsh-Handbuch zu visuellen Effekten: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

So zum Beispiel die folgenden zwei Befehle

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

Präsentieren Sie den Hostnamen in Orange mit schwarzem Hintergrund, gefolgt von einem Doppelpunkt in Weiß mit schwarzem Hintergrund, gefolgt vom aktuellen Arbeitsverzeichnis in hellblau mit schwarzem Hintergrund, gefolgt vom Dollarzeichen in Weiß mit schwarzem Hintergrund.

Weitere verwandte Informationen finden Sie unten.

Sofortige Informationen auf der rechten Seite. Zum Beispiel Hinzufügen eines Zeitstempels. Siehe https://superuser.com/a/1251045/290299 . Natürlich kann dies farbcodiert werden, zum Beispiel mit einer hellblauen / lila Farbe, wie folgt:

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

Farben für ls. Nach dem Lesen des Handbuchs für ls kann man beispielsweise die Farben für lsdie folgenden zwei Befehle aktivieren :

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

Als letzte Bemerkung, die ich nicht getestet habe, da ich mit meiner Konfiguration zufrieden bin, könnte eine andere Möglichkeit für jemanden sein, den Port coreutilsvon MacPorts zu installieren und dann zu verwenden gdircolors(Quelle: https://unix.stackexchange.com/a/174596) / 194343 ). (Ich kann diesen letzten Teil in Zukunft bearbeiten, da alle oben genannten Teile verwandte Teile sind, die den Alltag viel lustiger und leichter zu bewältigen machen.)

MightyMouse
quelle
1
Dies ist eine äußerst hilfreiche Antwort. Danke, dass du das zusammengestellt hast.
Shaunakde
@shaunakde Gern geschehen! :)
MightyMouse
4

Ich habe festgestellt, dass mit zsh5 (dem Standard unter Debian Jessie) alle diese Lösungen funktionieren:

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

Jetzt haben sie ein Problem: Sie bewegen den Cursor, was beim Tabulieren zu einem hässlichen Aufkleber führt (zur automatischen Vervollständigung). Die Lösung besteht einfach darin, die Escape-Sequenzen mit zu umgeben %{FOOBAR%}. Ich habe eine Weile gebraucht, um das herauszufinden. Für die 2. und 3. Lösung ist das colorsLademodul obligatorisch. Um die erste Lösung lesbar zu halten, definieren Sie einfach Variablen für die von Ihnen verwendeten Farben.

user3459474
quelle
2

Um eine Eingabeaufforderung mit der Farbe abhängig vom Exit-Status des letzten Befehls zu erhalten, können Sie Folgendes verwenden:

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

Fügen Sie einfach diese Zeile zu Ihrem hinzu ~/.zshrc.

In der Dokumentation sind mögliche Platzhalter aufgeführt.

Martin
quelle
Dies ist die beste Lösung hier. Vielen Dank.
Eddy Ekofo
2

Probieren Sie meinen Favoriten: setzen Sie ein

~/.zshrc

diese Linie:

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

vergiss nicht

source ~/.zshrc

um die Änderungen zu testen

Sie können natürlich die Farben / Farbcodes ändern :-)

Hermann Schwarz
quelle
0

man zshall und suche nach PROMPT EXPANSION

Nachdem Sie die vorhandenen Antworten hier gelesen haben, sind einige von ihnen widersprüchlich. Ich habe die verschiedenen Ansätze auf Systemen mit zsh 4.2 und 5+ ausprobiert und festgestellt, dass diese Antworten widersprüchlich sind, weil sie nicht angeben, auf welche Version von ZSH sie abzielen. Verschiedene Versionen verwenden hierfür unterschiedliche Syntax und einige von ihnen erfordern verschiedene Autoloads.

Daher ist es wahrscheinlich die beste Wahl, zshall zu managen und nach PROMPT EXPANSION zu suchen, um alle Regeln für Ihre spezielle Installation von zsh herauszufinden. Beachten Sie in den Kommentaren, dass Dinge wie "Ich verwende Ubuntu 11.04 oder 10.4 oder OSX" nicht sehr aussagekräftig sind, da unklar ist, welche Version von ZSH Sie verwenden. Ubuntu 11.04 impliziert keine neuere Version von ZSH als Ubuntu 10.04. Es kann eine Reihe von Gründen geben, warum eine ältere Version installiert wurde. Im Übrigen impliziert eine neuere Version von ZSH nicht, welche Syntax verwendet werden soll, ohne zu wissen, um welche Version von ZSH es sich handelt.

cs_alumnus
quelle
0

Um alle oben genannten Antworten zu ergänzen, besteht ein weiterer praktischer Trick darin, die Einstellungen für die farbige Eingabeaufforderung in eine zsh-Funktion zu platzieren. Dort können Sie lokale Variablen definieren, um längere Befehle zu aliasen, z. B. rc=$reset_coloroder Ihre eigenen Farbvariablen definieren. Vergessen Sie nicht, es in Ihre .zshrcDatei aufzunehmen und die von Ihnen definierte Funktion aufzurufen:

# 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
quelle