Как сделать RPROMPT в самом обновлении zsh при каждом входе?

Мой RPROMPT настроен на отображение информации svn с помощью vcs_info . Он читает RPROMPT=${vcs_info_msg_0_} . vcs_info вызывается с помощью функции precmd() . Однако при изменении каталогов RPROMPT не обновляется. Он работает только в том случае, если я снова вызываю приглашение (либо из источника ~ / .zshrc или prompt), либо не изменяется на chdir, если я снова не вызову приглашение. Есть ли способ изменить это поведение?

Попробуйте поставить одинарные кавычки вокруг значения переменной при назначении для оценки задержки:

 RPROMPT='${vcs_info_msg_0_}' 

Использование однокристальной программы для оценки задержки также позволяет определить динамические псевдонимы. Вот псевдоним, t , используемый для присоединения новой оболочки к существующему процессу агента ssh, который был запущен с псевдонимом ssh-start который выписывает код оболочки в файл в 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;` 

Это определение t плохо, потому что это приводит к игнорированию новой информации из нового запуска ssh-start . Изменение определения псевдонима t которое будет указано отдельно в моем .zshrc, дает гораздо лучшее поведение:

 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` 

Обратите внимание на разложение определения t как показано на рисунке which t , показывающее влияние двойных кавычек (немедленное расширение команд или переменных среды на месте) по сравнению с одинарными кавычками (отложенная оценка команд и переменных).