zshのプロンプトカラーを設定を変更してみた

このエントリーをはてなブックマークに追加

ターミナルを使うときに、zsh を利用しています。

zsh の設定の大部分は、どこからかコピーしてきた設定をそのまま使っていただけなのですが、プロンプトのカラー設定を変えようと思い、少し変更してみることに。

zshでプロンプトの色を変更する

最初は ~/.zshrc の設定を、以下のようにしていました。

autoload colors
colors
PROMPT="%{$fg[green]%}%m%(!.#.$) %{$reset_color%}"
PROMPT2="%{$fg[green]%}%_> %{$reset_color%}"
SPROMPT="%{$fg[red]%}correct: %R -> %r [nyae]? %{$reset_color%}"
RPROMPT="%{$fg[cyan]%}[%~]%{$reset_color%}"

以下の参照リンク先によると、最初の2行で、色のセットをしてくれるようになるらしく、その後に色の指定を入れる。(2行なくても色の設定が反映されている気がするけど、とりあえずつけたままにしておきます)

Zsh - ArchWiki

指定の時に利用する、 PROMPT とか RPROMPT って なんだ?

と、Prompt Expansion を調べてみると、以下のようなところの設定になるらしい。

zsh: 13. Prompt Expansion

PROMPT コマンドを入力する左側の表示。デフォルトではユーザー名が表示される場所
PROMPT2 2行以上のプロンプトで表示される。パイプ時とか。
SPROMPT 入力したコマンドが、打ち間違いなどで見つからない時に表示される「もしかして」の表示
RPROMPT 画面の右側の表示。上記の例ではカレントを表示になる。

とりあえず表示する内容はそのままにするとして、色を変更してみることに。

色の変更

greenred となっているところを変えたら変更できるよう様子。一つ目の参照先に、Possible color values という指定があるので確認すると、設定できる色は、 black red green yellow blue magenta cyan white だけらしい。なんだか思ったより少ない。

fg が表示の文字色で、 bg だと背景色の設定ができるらしい。

例えば黄色背景に黒文字ににしたい場合は、以下のようにする。

PROMPT="%{$fg[black]$bg[yellow]%}%m%(!.#.$) %{$reset_color%}"

設定したら $ source ~/.zshrc で反映させる。

256色で反映させてみる

$fg[color] で、設定できる8色だけはなくて、256色にもできるようなので調べてみた。

いろいろ備忘録: zsh 色の設定、指定文字のハイライト表示

第3回 zsh使いこなしポイント即効編:zshで究極のオペレーションを|gihyo.jp … 技術評論社

これらを見ると、 '\e[38;5;詳細前景色コードm'と'\e[m'で文字を囲むと文字が256色の設定ができる様子。文字色を変える場合は最初の数字を 38、背景の場合は 48を利用する。間の数字で5と入れているのだけは何かがわからなかったのですが、5以外を指定しても、色が反映されなかったので、必要なものだということだけは理解。

使える色は、以下を参照して出力して確認することに。

zsh で全 256 色を試しに表示みたい - Qiita

最終的には、以下の様な明るい緑色にしてみました。

PROMPT=$'%{\e[38;5;46m%}%m%(!.#.$)%{\e[m%} '

頭の $'〜' がないと \e がエスケープとして解釈されないようで、入れた文字列のまま表示されてしまうという。また、%{〜%} で指定しないと、これまた位置がずれてしまうようで、最終的には上記のような形で落ち着きました。

尚、背景色をいれるような場合は以下のようにしてつなげるようです。

PROMPT=$'%{\e[38;5;16;48;5;46m%}%m%(!.#.$)%{\e[m%} '

上記の例は明るめの緑背景にちょっと明るい黒い文字になります。