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?

Odpowiedzi:


20

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

RPROMPT='${vcs_info_msg_0_}'

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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.