9

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

export PS1="\$(parse_git_branch)"

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

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

PROMPT="$(parse_git_branch)"

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

3 ответа3

18

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

setopt PROMPT_SUBST

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

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

10

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

2

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

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) %(!.#.$)'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .