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行なくても色の設定が反映されている気がするけど、とりあえずつけたままにしておきます)
指定の時に利用する、 PROMPT
とか RPROMPT
って なんだ?
と、Prompt Expansion を調べてみると、以下のようなところの設定になるらしい。
PROMPT | コマンドを入力する左側の表示。デフォルトではユーザー名が表示される場所 |
---|---|
PROMPT2 | 2行以上のプロンプトで表示される。パイプ時とか。 |
SPROMPT | 入力したコマンドが、打ち間違いなどで見つからない時に表示される「もしかして」の表示 |
RPROMPT | 画面の右側の表示。上記の例ではカレントを表示になる。 |
とりあえず表示する内容はそのままにするとして、色を変更してみることに。
色の変更
green
や red
となっているところを変えたら変更できるよう様子。一つ目の参照先に、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以外を指定しても、色が反映されなかったので、必要なものだということだけは理解。
使える色は、以下を参照して出力して確認することに。
最終的には、以下の様な明るい緑色にしてみました。
PROMPT=$'%{\e[38;5;46m%}%m%(!.#.$)%{\e[m%} '
頭の $'〜'
がないと \e
がエスケープとして解釈されないようで、入れた文字列のまま表示されてしまうという。また、%{〜%}
で指定しないと、これまた位置がずれてしまうようで、最終的には上記のような形で落ち着きました。
尚、背景色をいれるような場合は以下のようにしてつなげるようです。
PROMPT=$'%{\e[38;5;16;48;5;46m%}%m%(!.#.$)%{\e[m%} '
上記の例は明るめの緑背景にちょっと明るい黒い文字になります。