すべてのエンターでzsh update自体のRPROMPTをどのように作成しますか?


11

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

回答:


20

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

RPROMPT='${vcs_info_msg_0_}'

移行するとチェックマークが消えるのはなぜですか?

@ user5383:meta.unix.stackexchange.comまたはmeta.stackoverflow.comで確認する必要があります。答えがわかりません(または漠然としかわかりません)。
追って通知があるまで一時停止。

3
これにはsetopt PROMPT_SUBST、ファイル内で以前に発生したことが必要です。それ以外の場合は、文字通りプロンプトをエコーし​​ます。
Nick Meharry

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二重引用符(コマンドまたは環境変数の即時インプレース展開)と単一引用符(コマンドと変数の遅延評価)の影響を示しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.