Obtener función en PS1 (Zsh)?

15

Esto funciona en bash( parse_git_branches una función definida)

export PS1="\$(parse_git_branch)"

Pero no puedo entender el equivalente en zsh.

Nota: si lo hago

PROMPT="$(parse_git_branch)"

Parece funcionar, pero de hecho está ejecutando el comando cuando configuro el indicador, que no es el punto.

Dan Rosenstark
fuente

Respuestas:

26

Tienes que incluir

setopt PROMPT_SUBST

en su .zshrc, lo man zshallexplica en la sección EXPANSIÓN INMEDIATA :

Si se establece la opción PROMPT_SUBST, la cadena de solicitud se somete primero a la expansión de parámetros, la sustitución de comandos y la expansión aritmética.

akira
fuente
14

En realidad, su problema no era solo la configuración PROMPT_SUBST: utiliza comillas dobles en su script para forzar la evaluación de la función cuando establece las PROMPTvariables. Solo desea una evaluación cuando se calcula la solicitud, es decir, debe usar comillas simples.

JN
fuente
5

Como dice akira, tienes que usar prompt subst. Este es mi código inicial (todavía estoy trabajando en él):

setopt PROMPT_SUBST
PROMPT='$(parse_git_branch)'

o mejor

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