これは少しフリンジかもしれませんが、最近zshに移動し、シェルプロンプトのカスタマイズに問題があります。
私の.zshrcの一部は次のようになります。
# keeping this simple right now by just printing the date, but imagine this function would look for something specific when moving to a new directory each time
function parse_special {
print $(date)
}
autoload -U colors && colors
PS1="%{$fg[green]%}%n@%m %{$fg[blue]%}%c %{$fg[yellow]%}%{$(parse_special)%} %{$reset_color%}%# "
ターミナルを起動すると、すべてが良さそうです。私のプロンプトは私が期待するものです:
me@someHost ~ Wed Aug 8 22:56:22 PDT 2012 %
しかし、別のディレクトリにcdすると、カスタムプロンプトを再計算するためにparse_special関数が再度呼び出されないように見えます(日付が変更されていないことに注意してください)。
me@someHost ~ Wed Aug 8 22:56:22 PDT 2012 % cd .ssh
me@someHost .ssh Wed Aug 8 22:56:22 PDT 2012 % cd ../workspace
me@someHost workspace Wed Aug 8 22:56:22 PDT 2012 %
プロンプトが表示されるたびにプロンプトを再計算するようにzshに指示する方法はありますか?
提案をありがとうございました。
cjhvealに返信する
PS1は一重引用符で囲まれた値で設定されるのを好まないようです。私は次のことを試しました:
local tp1="%{$fg[green]%}%n@%m%{$reset_color%}"
PS1="${tp1}"
print "PS1 set by tp1: ${PS1}"
local tp2='%{$fg[green]%}%n@%m%{$reset_color%}'
PS1="${tp2}"
print "PS1 set by tp2: ${PS1}"
そして、この出力を取得しました
#inner stuff was green
PS1 set by tp1: %{%}%n@%m%{%}
#everything was uncolored
PS1 set by tp2: %{$fg[green]%}%n@%m%{$reset_color%}
また、cjhvealの提案に基づいて、文字通り試したことを追加する必要があります。繰り返しますが、一重引用符は物事を台無しにしているようです
function parse_special {
print $(date)
}
autoload -U colors && colors
local prompt_user='%{$fg[green]%}%n@%m%{$reset_color%}'
local prompt_root='%{$fg[red]%}%n@%m%{$reset_color%}'
local prompt_dir='%{$fg[blue]%}%c%{$reset_color%}'
local prompt_special='%{$fg[yellow]%}%{$(parse_special)%}%{$reset_color%}'
PS1="${prompt_user} ${prompt_dir}${prompt_special}%# "