Wie lässt sich RPROMPT in zsh bei jeder Eingabe selbst aktualisieren?

11

My RPROMPTist so eingestellt, dass svn-Informationen mit angezeigt werden vcs_info. Es liest RPROMPT=${vcs_info_msg_0_}. vcs_infoheißt using precmd(). RPROMPT wird jedoch nicht aktualisiert, wenn ich Verzeichnisse wechsle. Es funktioniert nur, wenn ich die Eingabeaufforderung erneut aufrufe (entweder über source ~ / .zshrc oder prompt) und sich bei chdir nicht ändert, es sei denn, ich rufe die Eingabeaufforderung erneut auf. Gibt es eine Möglichkeit, dieses Verhalten zu ändern?


quelle

Antworten:

20

Versuchen Sie, den Variablenwert bei der Zuweisung in einfache Anführungszeichen zu setzen, um die Auswertung zu verzögern:

RPROMPT='${vcs_info_msg_0_}'
Bis auf weiteres angehalten.
quelle
Warum verschwindet das Häkchen, wenn es migriert wird?
@ user5383: Sie sollten dies auf meta.unix.stackexchange.com oder meta.stackoverflow.com erfragen. Ich kenne die Antwort nicht (oder nur vage).
Bis auf weiteres angehalten.
3
Dies setzt voraus, dass dies setopt PROMPT_SUBSTfrüher in der Datei aufgetreten ist. Andernfalls wird die Eingabeaufforderung nur buchstäblich wiedergegeben.
Nick Meharry
1

Die Verwendung eines einfachen Anführungszeichens zur Verzögerung der Auswertung funktioniert auch zum Definieren dynamischer Aliase. Hier ist ein Alias, der tverwendet wird, um eine neue Shell an einen vorhandenen SSH-Agentenprozess anzuhängen, der mit einem Alias ​​namens aufgerufen wurde ssh-start, der Shell-Code in eine Datei in einem Homedir schreibt:

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;`

Diese Definition von tist schlecht, da dadurch neue Informationen aus einem neuen Lauf von ssh-startignoriert werden. Das Ändern der Alias-Definition von t, um in meiner .zshrc einzeln zitiert zu werden, führt zu einem viel besseren Verhalten:

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`

Beachten Sie die Erweiterung der Definition von twie angegeben which t, die die Auswirkungen von doppelten Anführungszeichen (sofortige direkte Erweiterung von Befehlen oder Umgebungsvariablen) im Vergleich zu einfachen Anführungszeichen (verzögerte Auswertung von Befehlen und Variablen) zeigt.


quelle