Ottieni la funzione in PS1 (Zsh)?


15

Funziona in bash( parse_git_branchè una funzione definita)

export PS1="\$(parse_git_branch)"

Ma non riesco a capire l'equivalente in zsh.

Nota: se lo faccio

PROMPT="$(parse_git_branch)"

Sembra funzionare, ma in realtà sta eseguendo il comando quando imposto il prompt, che non è il punto.

Risposte:


26

Devi includere

setopt PROMPT_SUBST

nel tuo .zshrc, lo man zshallspiega nella sezione PROMPT EXPANSION :

Se è impostata l'opzione PROMPT_SUBST, la stringa del prompt viene prima sottoposta all'espansione dei parametri, alla sostituzione dei comandi e all'espansione aritmetica.


14

In realtà il tuo problema non era solo l'impostazione PROMPT_SUBST: usi doppie virgolette nello script per forzare la valutazione della funzione quando imposti le PROMPTvariabili. Si desidera effettuare una valutazione solo quando viene calcolato il prompt, ovvero è necessario utilizzare virgolette singole.


5

Come dice Akira, devi usare il comando subst. Questo è il mio codice iniziale (ci sto ancora lavorando):

setopt PROMPT_SUBST
PROMPT='$(parse_git_branch)'

o meglio

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) %(!.#.$)'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.