![zshプロンプトにおける%F{color}と%{$fg[color]%}の違い](https://rvso.com/image/171063/zsh%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%25F%7Bcolor%7D%E3%81%A8%25%7B%24fg%5Bcolor%5D%25%7D%E3%81%AE%E9%81%95%E3%81%84.png)
プロンプトで前景色を設定する方法が 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 進数のトリプレットを指定することもできます。