Come si fa a aggiornare RPROMPT in zsh ad ogni invio?


11

My RPROMPTè impostato per visualizzare le informazioni svn usando vcs_info. Si legge RPROMPT=${vcs_info_msg_0_}. vcs_infoviene chiamato usando precmd(). Tuttavia, RPROMPT non si aggiorna quando cambio directory. Funziona solo se invoco di nuovo il prompt (tramite source ~ / .zshrc o prompt) e non cambia su chdir, a meno che non invochi nuovamente il prompt. C'è un modo per cambiare questo comportamento?

Risposte:


20

Prova a mettere virgolette singole attorno al valore della variabile al momento dell'assegnazione per ritardare la valutazione:

RPROMPT='${vcs_info_msg_0_}'

perché il segno di spunta scompare quando viene migrato?

@ user5383: dovresti chiederlo su meta.unix.stackexchange.com o meta.stackoverflow.com. Non conosco (o conosco solo vagamente) la risposta.
In pausa fino a ulteriore avviso.

3
Ciò richiede che si setopt PROMPT_SUBSTsia verificato in precedenza nel file. Altrimenti, farà semplicemente eco al prompt letteralmente.
Nick Meharry,

1

L'uso di una virgoletta singola per ritardare la valutazione funziona anche per la definizione di alias dinamici. Ecco un alias, tutilizzato per collegare una nuova shell a un processo agente ssh esistente, che è stato avviato con un alias chiamato ssh-startche scrive il codice shell in un file in 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;`

Questa definizione di tè errata perché causa l'ignoramento di nuove informazioni da una nuova serie di ssh-start. Cambiare la definizione di alias di tessere citato singolarmente nel mio .zshrc dà un comportamento molto migliore:

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`

Si noti l'espansione della definizione di tcome fornita da which t, che mostra gli effetti delle doppie virgolette (espansione immediata dei comandi o delle variabili di ambiente) rispetto alle virgolette singole (valutazione ritardata di comandi e variabili).

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.