Unterschied zwischen %F{color} und %{$fg[color]%} in der Zsh-Eingabeaufforderung

Unterschied zwischen %F{color} und %{$fg[color]%} in der Zsh-Eingabeaufforderung

Mir ist aufgefallen, dass es in Ihrer Eingabeaufforderung zwei Möglichkeiten gibt, die Vordergrundfarbe festzulegen zsh.

PROMPT='%F{blue}$'
PROMPT='%{$fg[blue]%}$'

Beide Zeilen erzeugen eine blaue $Eingabeaufforderung. Gibt es einen Unterschied zwischen diesen beiden und gibt es eine bevorzugte Methode zum Festlegen Ihrer Eingabeaufforderung?

Wenn Sie einen Farbcode angeben möchten, können Sie $F{160}oder eine andere Zahl angeben, aber nicht für %{$fg[160]%}. Ist das der einzige Unterschied zwischen diesen beiden Optionen?

Antwort1

Der direkte %F{...}Escape-Vorgang wird direkt vom zsh-C-Code gehandhabt. Die Verwendung von $fg[blue]greift auf ein assoziatives Array mit dem Namen zu fg. Damit dies funktioniert, müssen Sie eine colorsFunktion aufrufen, die mit zsh geliefert wird. Für Eingabeaufforderungen ist dies ebenfalls auf die PROMPT_SUBSTOption angewiesen.

Es gibt keinen großen Unterschied in Bezug auf das, was diese beiden Wege erzeugen. Der erste ist sauberer und funktioniert besser mit der Verfolgung des Terminalstatus durch zsh. Er wurde 2008 zu zsh hinzugefügt, während die Farbfunktion 1999 hinzugefügt wurde. Heutzutage ist es sehr unwahrscheinlich, dass Sie mit einem zsh festsitzen, das alt genug ist, um eine der beiden Funktionen zu vermissen, also hat es keinen Sinn mehr, beim alten Weg zu bleiben.

Und wie Sie bemerkt haben, %Fkönnen Zahlen verarbeitet werden, wenn Ihr Terminal 88 oder 256 Farben unterstützt. Wenn Sie ein viel aktuelleres zsh verwenden, können Sie auch Hex-Tripletts angeben, z. B. %F{#0000ff}wenn Sie ein True-Color-Terminal haben (oder das Modul zsh/nearcolor laden).

verwandte Informationen