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

6882
Dan Rosenstark

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

export PS1="\$(parse_git_branch)" 

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

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

PROMPT="$(parse_git_branch)" 

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

8

3 ответа на вопрос

17
akira

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

setopt PROMPT_SUBST 

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

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

10
J.N.

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

2
Dan Rosenstark

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

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