zshにプロンプ​​トが表示されるたびにプロンプ​​ト表現を再評価します。

zshにプロンプ​​トが表示されるたびにプロンプ​​ト表現を再評価します。

以下に基づいてzshプロンプトを調整しています。ダラステーマとデータトピック:ああ、。私は、ダラスがプロンプトのさまざまな部分を変数にまとめて何が起こっているのかをより簡単に理解できることが好きです。

問題は、これらの文字列が評価されることです。一度拡張のため。したがって、dstufftなどの動的エントリを使用しようとすると、動的${PWD/#$HOME/~}に更新されなくなります。

どうすれば両方の世界の利点を得ることができますか?プロンプトを作成するたびに、評価するサブセクションにプロンプ​​トを分割したいと思います。

答え1

確実にするprompt_substオプションオープンしました。必要に応じて、次の行を次の行に追加してください~/.zshrc

setopt prompt_subst

これは、プロンプトが表示されるたびにzshにプロンプ​​ト文字列を再評価するように指示します。次に、必要に応じて割り当てますPS1(またはテーマで使用される他の変数をプロンプトします)。

PS1='${PWD/#$HOME/~}'

一重引用符は、たとえば$変数を設定するときに特殊文字が評価されないように保護します。

答え2

zshでは、precmd各プロンプトの前に何かを行うことができます(たとえば、変数の設定)。

function precmd() {
    current_git_branch=`git rev-parse --abbrev-ref HEAD`
}

http://zsh.sourceforge.net/Doc/Release/Functions.html

これは元の質問ほど現在のディレクトリには必要ありませんが、他の状況でこの問題を探している人には役立ちます。

(precmdはzshに固有です。bashには$PROMPT_COMMAND。)

答え3

いいね、

私はちょうど私の$標識を脱出する必要があります。たとえば、

${PWD/#$HOME/~}
\${PWD/#\$HOME/~}

答え4

%zshではこれにエスケープ文字を使用する必要があります。たとえば${PWD/#$HOME/~}(あなたの例のように)代わりに%~

読んでzshall(1)検索迅速かつ簡単な脱出(ここでは引用が長すぎます)。

関連情報