web-dev-qa-db-ja.com

zshのRPROMPTを入力するたびに更新するにはどうすればよいですか?

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

11
user5383

評価を遅らせるために、割り当て時に変数値を一重引用符で囲んでみてください。

RPROMPT='${vcs_info_msg_0_}'

一重引用符を使用して評価を遅らせることは、動的エイリアスの定義にも機能します。これは、既存のsshエージェントプロセスに新しいシェルをアタッチするために使用されるエイリアス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の新規実行からの新しい情報が無視されるために不適切です。 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`

which tによって提供されるtの定義の拡張に注意してください。これは、二重引用符(コマンドまたは環境変数の即時インプレース展開)と一重引用符(コマンドの評価の遅延および変数)。

1
nebkor