Получить функцию в PS1 (Zsh)?

15

Это работает в bash( parse_git_branchэто определенная функция)

export PS1="\$(parse_git_branch)"

Но я не могу понять эквивалент в zsh.

Примечание: если я делаю

PROMPT="$(parse_git_branch)"

Кажется, это работает, но на самом деле он запускает команду, когда я задаю приглашение, но это не главное.

Дэн Розенстарк
источник

Ответы:

26

Вы должны включить

setopt PROMPT_SUBST

в вашем .zshrc, man zshallобъясняет это в разделе РАСШИРЕНИЕ РАСШИРЕНИЯ :

Если установлена ​​опция PROMPT_SUBST, строка приглашения сначала подвергается расширению параметров, подстановке команд и арифметическому расширению.

Акира
источник
14

На самом деле ваша проблема была не просто в установке PROMPT_SUBST: вы используете двойные кавычки в вашем скрипте, заставляя вычислять функцию при установке PROMPTпеременных. Вы хотите оценку только тогда, когда подсказка вычислена, то есть вы должны использовать одинарные кавычки.

JN
источник
5

Как говорит Акира, вы должны использовать оперативную замену. Это мой ранний код (все еще работает над ним):

setopt PROMPT_SUBST
PROMPT='$(parse_git_branch)'

или лучше

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) %(!.#.$)'
Дэн Розенстарк
источник