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