Funktion in PS1 (Zsh) laden?

6934
Dan Rosenstark

Dies funktioniert in bash( parse_git_branchist eine definierte Funktion)

export PS1="\$(parse_git_branch)" 

Aber ich kann das Äquivalent nicht herausfinden zsh.

Hinweis: Wenn ja

PROMPT="$(parse_git_branch)" 

Es scheint zu funktionieren, aber in der Tat wird der Befehl ausgeführt, wenn ich die Eingabeaufforderung setze. Dies ist nicht der Punkt.

8

3 Antworten auf die Frage

17
akira

Sie müssen einschließen

setopt PROMPT_SUBST 

in Ihrem .zshrc, man zshallerklärt es in der PROMPT EXPANSION- Sektion:

Wenn die Option PROMPT_SUBST festgelegt ist, wird die Eingabeaufforderungszeichenfolge zuerst der Parametererweiterung, der Befehlssubstitution und der Arithmetikerweiterung unterzogen.

10
J.N.

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

2
Dan Rosenstark

Wie Akira sagt, müssen Sie die Eingabeaufforderung 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) %(!.#.$)'