Funktion in PS1 (Zsh) bekommen?

14

Dies funktioniert in bash( parse_git_branchist eine definierte Funktion)

export PS1="\$(parse_git_branch)"

Aber ich kann das Äquivalent in nicht herausfinden zsh.

Hinweis: Wenn ja

PROMPT="$(parse_git_branch)"

Es scheint zu funktionieren, aber tatsächlich wird der Befehl ausgeführt, wenn ich die Eingabeaufforderung setze, worum es nicht geht.

Dan Rosenstark
quelle

Antworten:

25

Sie müssen einschließen

setopt PROMPT_SUBST

in Ihrem .zshrc, man zshallerklärt es im Abschnitt PROMPT EXPANSION :

Wenn die Option PROMPT_SUBST festgelegt ist, wird die Eingabeaufforderungszeichenfolge zunächst einer Parametererweiterung, einer Befehlssubstitution und einer arithmetischen Erweiterung unterzogen.

Akira
quelle
14

Eigentlich war Ihr Problem nicht nur das Setzen PROMPT_SUBST: Sie verwenden doppelte Anführungszeichen in Ihrem Skript, um die Auswertung der Funktion zu erzwingen, wenn Sie die PROMPTVariablen setzen. Sie möchten eine Auswertung nur, wenn die Eingabeaufforderung berechnet wurde, dh Sie müssen einfache Anführungszeichen verwenden.

JN
quelle
5

Wie Akira sagt, müssen Sie prompt subst verwenden. Dies ist mein früher Code (der noch daran arbeitet):

setopt PROMPT_SUBST
PROMPT='$(parse_git_branch)'

oder besser

setopt PROMPT_SUBST
PROMPT='[$PR_MAGENTA%n$PR_NO_COLOR@$PR_GREEN%U%m%u$PR_NO_COLOR:$PR_RED%2c$PR_NO_COLOR]$(parse_git_branch) %(!.#.$)'
Dan Rosenstark
quelle