Como você faz o RPROMPT no zsh se atualizar a cada entrada?

11

My RPROMPTestá definido para exibir informações svn usando vcs_info. Lê RPROMPT=${vcs_info_msg_0_}. vcs_infoé chamado usando precmd(). No entanto, o RPROMPT não é atualizado quando altero os diretórios. Funciona apenas se eu chamar o prompt novamente (por fonte ~ / .zshrc ou prompt) e não mudar no chdir, a menos que eu chame o prompt novamente. Existe alguma maneira de mudar esse comportamento?


fonte

Respostas:

20

Tente colocar aspas simples em torno do valor da variável na atribuição para atrasar a avaliação:

RPROMPT='${vcs_info_msg_0_}'
Pausado até novo aviso.
fonte
por que a marca de seleção desaparece quando é migrada?
@ user5383: Você deve perguntar isso em meta.unix.stackexchange.com ou meta.stackoverflow.com. Não sei (ou apenas sei vagamente) a resposta.
Pausado até novo aviso.
3
Isso requer que setopt PROMPT_SUBSTtenha ocorrido anteriormente no arquivo. Caso contrário, ele ecoará o prompt literalmente.
Nick Meharry
1

O uso de aspas simples para atrasar a avaliação também funciona para definir aliases dinâmicos. Aqui está um alias, tusado para anexar um novo shell a um processo existente do agente ssh, que foi iniciado com um alias chamado ssh-startque grava o código do shell em um arquivo em um 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;`

Essa definição de té ruim porque faz com que novas informações de uma nova execução ssh-startsejam ignoradas. Alterar a definição de alias de tser citado individualmente no meu arquivo .zshrc oferece um comportamento muito melhor:

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 a expansão da definição tconforme fornecida por which t, mostrando os efeitos de aspas duplas (expansão imediata imediata de comandos ou variáveis ​​de ambiente) versus aspas simples (avaliação atrasada de comandos e variáveis).


fonte