¿Cómo haces que RPROMPT en zsh se actualice en cada entrada?

11

My RPROMPTestá configurado para mostrar información svn usando vcs_info. Se lee RPROMPT=${vcs_info_msg_0_}. vcs_infose llama usando precmd(). Sin embargo, RPROMPT no se actualiza cuando cambio los directorios. Funciona solo si invoco el indicador nuevamente (ya sea por fuente ~ / .zshrc o indicador) y no cambia en chdir, a menos que invoque el indicador nuevamente. ¿Hay alguna forma de cambiar este comportamiento?


fuente

Respuestas:

20

Intente poner comillas simples alrededor del valor de la variable en la asignación para retrasar la evaluación:

RPROMPT='${vcs_info_msg_0_}'
Pausado hasta nuevo aviso.
fuente
¿Por qué desaparece la marca de verificación cuando se migra?
@ usuario5383: debe preguntar eso en meta.unix.stackexchange.com o meta.stackoverflow.com. No sé (o solo sé vagamente) la respuesta.
Pausado hasta nuevo aviso.
3
Esto requiere que setopt PROMPT_SUBSThaya ocurrido anteriormente en el archivo. De lo contrario, solo hará eco del aviso literalmente.
Nick Meharry
1

El uso de una comilla simple para retrasar la evaluación también funciona para definir alias dinámicos. Aquí hay un alias, tutilizado para adjuntar un nuevo shell a un proceso de agente ssh existente, que se inició con un alias llamado ssh-startque escribe el código de shell en un archivo en 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;`

Esa definición de tes mala porque hace ssh-startque se ignore la información nueva de una nueva ejecución . Cambiar la definición de alias de tser citado individualmente en mi .zshrc proporciona un comportamiento mucho mejor:

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`

Observe la expansión de la definición de tcomo se proporciona which t, mostrando los efectos de las comillas dobles (expansión inmediata en el lugar de comandos o variables de entorno) frente a comillas simples (evaluación retrasada de comandos y variables).


fuente