zshプロンプトにおける%F{color}と%{$fg[color]%}の違い

zshプロンプトにおける%F{color}と%{$fg[color]%}の違い

プロンプトで前景色を設定する方法が 2 つあることに気付きましたzsh

PROMPT='%F{blue}$'
PROMPT='%{$fg[blue]%}$'

これらの行は両方ともプロンプトとして青色を生成します$。これら 2 つには違いがありますか? また、プロンプトを設定するための推奨される方法はありますか?

カラーコードを指定したい場合は、$F{160}または他の数値を使用できますが、 は使用できません%{$fg[160]%}。これが、これら 2 つのオプションの唯一の違いでしょうか?

答え1

直接%F{...}エスケープは、zsh C コードによって直接処理されます。 を使用すると、$fg[blue]という名前の連想配列にアクセスしますfg。これを機能させるには、zsh に付属する関数を呼び出す必要がありますcolors。プロンプトの場合は、 もPROMPT_SUBSTオプションに依存します。

これら 2 つの方法で生成される結果には、大きな違いはありません。前者の方がクリーンで、zsh のターミナル状態の追跡とよりうまく連携します。これは 2008 年に zsh に追加されましたが、colors 関数は 1999 年に追加されました。今日では、どちらかの機能が欠けているほど古い zsh に固執することはほとんどありません。そのため、古い方法に固執する意味はもうありません。

また、お気づきのとおり、%F端末が 88 色または 256 色をサポートしている場合は、数値を処理できます。より新しい zsh を実行する場合は、トゥルー%F{#0000ff}カラー端末がある場合 (または zsh/nearcolor モジュールをロードする場合) のように、16 進数のトリプレットを指定することもできます。

関連情報