Jak sprawić, by RPROMPT w aktualizacji zsh sam się aktualizował przy każdym wejściu?

11

Mój RPROMPTjest ustawiony do wyświetlania informacji o svn za pomocą vcs_info. Czyta RPROMPT=${vcs_info_msg_0_}. vcs_infonazywa się za pomocą precmd(). Jednak RPROMPT nie aktualizuje się, kiedy zmieniam katalogi. Działa tylko wtedy, gdy ponownie wywołam monit (przez source ~ / .zshrc lub monit) i nie zmieni się po chdir, chyba że ponownie wywołam monit. Czy istnieje sposób na zmianę tego zachowania?


źródło

Odpowiedzi:

20

Spróbuj umieścić pojedyncze cudzysłowy wokół wartości zmiennej przy przypisaniu, aby opóźnić ocenę:

RPROMPT='${vcs_info_msg_0_}'
Wstrzymano do odwołania.
źródło
dlaczego znacznik wyboru znika po migracji?
@ user5383: Powinieneś o to zapytać na meta.unix.stackexchange.com lub meta.stackoverflow.com. Nie znam odpowiedzi (lub tylko niejasno).
Wstrzymano do odwołania.
3
Wymaga to, aby setopt PROMPT_SUBSTmiało to miejsce wcześniej w pliku. W przeciwnym razie będzie to dosłownie powtórzyć monit.
Nick Meharry
1

Użycie pojedynczego cudzysłowu w celu opóźnienia oceny działa również w przypadku definiowania dynamicznych aliasów. Oto alias tsłużący do dołączenia nowej powłoki do istniejącego procesu agenta ssh, który został uruchomiony za pomocą aliasu, ssh-startktóry wypisuje kod powłoki do pliku w katalogu głównym:

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

Ta definicja tjest zła, ponieważ powoduje ssh-startignorowanie nowych informacji z nowej serii . Zmiana definicji aliasu tpojedynczego cytowania w moim pliku .zshrc zapewnia znacznie lepsze zachowanie:

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`

Zwróć uwagę na rozszerzenie definicji tpodanej przez which t, pokazujące skutki podwójnych cudzysłowów (natychmiastowe rozszerzenie poleceń lub zmiennych środowiskowych w miejscu) w porównaniu z pojedynczymi cudzysłowami (opóźniona ocena poleceń i zmiennych).


źródło