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


11

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

Ответы:


20

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

RPROMPT='${vcs_info_msg_0_}'

почему флажок исчезает при переносе?

@ user5383: Вы должны спросить об этом на meta.unix.stackexchange.com или meta.stackoverflow.com. Я не знаю (или только смутно знаю) ответ.
Приостановлено до дальнейшего уведомления.

3
Это требует, чтобы setopt PROMPT_SUBSTэто произошло ранее в файле. В противном случае, это будет буквально повторять подсказку.
Ник Мехарри

1

Использование одинарной кавычки для задержки оценки работает и для определения динамических псевдонимов. Вот псевдоним, 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, показывающее влияние двойных кавычек (немедленное расширение на месте команд или переменных среды) по сравнению с одинарными кавычками (отложенная оценка команд и переменных).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.