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コマンドを入力する左側の表示。デフォルトではユーザー名が表示される場所
PROMPT22行以上のプロンプトで表示される。パイプ時とか。
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%} '

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