Як зробити RPROMPT в оновленнях zsh щоразу при кожному введенні?


11

Моя 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.