Uzyskaj funkcję w PS1 (Zsh)?


15

Działa to w bash( parse_git_branchjest zdefiniowaną funkcją)

export PS1="\$(parse_git_branch)"

Ale nie mogę znaleźć odpowiednika w zsh.

Uwaga: jeśli to zrobię

PROMPT="$(parse_git_branch)"

Wydaje się, że działa, ale w rzeczywistości uruchamia polecenie po ustawieniu monitu, co nie jest celem.

Odpowiedzi:


26

Musisz dołączyć

setopt PROMPT_SUBST

W twojej .zshrc, man zshallwyjaśnia to w PROMPT EXPANSION sekcji:

Jeśli ustawiona jest opcja PROMPT_SUBST, łańcuch zachęty jest najpierw poddawany interpretacji parametrów, podstawianiu poleceń i interpretacji arytmetycznej.


14

W rzeczywistości twoim problemem nie było tylko ustawienie PROMPT_SUBST: używasz podwójnych cudzysłowów w skrypcie, zmuszając ocenę funkcji podczas ustawiania PROMPTzmiennych. Potrzebujesz oceny tylko po obliczeniu monitu, czyli musisz użyć pojedynczych cudzysłowów.


5

Jak mówi Akira, musisz użyć szybkiego zastępstwa. To jest mój wczesny kod (wciąż nad nim pracuję):

setopt PROMPT_SUBST
PROMPT='$(parse_git_branch)'

albo lepiej

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) %(!.#.$)'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.