Comment faire pour que RPROMPT dans zsh se mette à jour à chaque entrée?

11

Mon RPROMPTest configuré pour afficher les informations svn à l'aide de vcs_info. Il se lit comme suit RPROMPT=${vcs_info_msg_0_}. vcs_infoest appelé en utilisant precmd(). Cependant, RPROMPT ne se met pas à jour lorsque je change de répertoire. Cela ne fonctionne que si j'appelle à nouveau l'invite (soit par source ~ / .zshrc ou invite) et ne change pas lors de chdir, à moins que j'appelle à nouveau l'invite. Existe-t-il un moyen de modifier ce comportement?


la source

Réponses:

20

Essayez de mettre des guillemets simples autour de la valeur de la variable lors de l'affectation pour retarder l'évaluation:

RPROMPT='${vcs_info_msg_0_}'
En pause jusqu'à nouvel ordre.
la source
pourquoi la coche disparaît-elle lors de la migration?
@ user5383: Vous devriez demander cela sur meta.unix.stackexchange.com ou meta.stackoverflow.com. Je ne connais pas (ou je ne connais que vaguement) la réponse.
pause jusqu'à nouvel ordre.
3
Cela nécessite que cela se setopt PROMPT_SUBSTsoit produit plus tôt dans le fichier. Sinon, cela fera écho à l'invite littéralement.
Nick Meharry
1

L'utilisation d'un guillemet simple pour retarder l'évaluation fonctionne également pour la définition d'alias dynamiques. Voici un alias, tutilisé pour attacher un nouveau shell à un processus d'agent ssh existant, qui a été démarré avec un alias appelé ssh-startqui écrit le code shell dans un fichier dans un homedir:

mymistress:~> which ssh-start
ssh-start: aliased to eval `ssh-agent | tee ~/.ssh/ssh-agent.out` ; ssh-add ~/.ssh/id_rsa
mymistress:~> grep "alias t" .zshrc    
alias t="eval `cat ~/.ssh/ssh-agent.out`"
mymistress:~> which t
t: aliased to eval SSH_AUTH_SOCK=/tmp/ssh-nZBZp29804/agent.29804; export SSH_AUTH_SOCK;\nSSH_AGENT_PID=29805; export SSH_AGENT_PID;\necho Agent pid 29805;`

Cette définition de test mauvaise car elle entraîne l'ignorance de nouvelles informations provenant d'une nouvelle série de ssh-start. Changer la définition d'alias tpour être cité individuellement dans mon .zshrc donne un meilleur comportement:

mymistress:~> grep "alias t" .zshrc
alias t='eval `cat ~/.ssh/ssh-agent.out`'
mymistress:~> source ~/.zshrc
mymistress:~> which t
t: aliased to eval `cat ~/.ssh/ssh-agent.out`

Notez l'expansion de la définition de ttel que fourni par which t, montrant les effets des guillemets doubles (expansion immédiate sur place des commandes ou des variables d'environnement) par rapport aux guillemets simples (évaluation retardée des commandes et des variables).


la source