zshでRPROMPTをすべての入力で自動的に更新するには?

zshでRPROMPTをすべての入力で自動的に更新するには?

RPROMPTはsvn情報を表示するために使用するように設定されていますvcs_info。それは言うRPROMPT=${vcs_info_msg_0_}vcs_infoを使用して呼び出されますprecmd()。ただし、ディレクトリを変更してもRPROMPTは更新されません。プロンプトを再度呼び出す場合にのみ機能します(ソース〜/ .zshrcまたはPromptを介して)、プロンプトを再度呼び出さない限り、chdirは変更されません。この動作を変更する方法はありますか?

答え1

遅延評価を割り当てるときは、変数の値を一重引用符で囲みます。

RPROMPT='${vcs_info_msg_0_}'

答え2

動的エイリアスを定義するときは、単一​​引用符を使用して評価を遅らせることもできます。以下は、既存のSSHエージェントプロセスに新しいシェルを関連付けるためのエイリアスです。このプロセスは、homedirのファイルにシェルコードを書き込むtエイリアスで始まります。ssh-start

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無視されるため、お勧めできません。私の.zshrcでエイリアス定義をt一重引用符に変更すると、より良い動作が得られます。

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。二重引用符(コマンドまたは環境変数の即時内部拡張)と一重引用符(コマンドと変数の遅延評価)の効果を示します。

関連情報