43
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

zshのプロンプトを256色表示にする+好きなフォーマットで時刻表示

Last updated at Posted at 2017-03-16

先日、今まで頑なにBashを使い続けていたもののついにZshに乗り換えました。
世の中には様々な理由でBashしか使えない環境も多いということでずっとBashにこだわってきましたが、zsh-syntax-highlightingの存在ででついに落ちました。

この話はまた今度にして今回はプロンプトのカスタマイズについて書いていきます。
特に256色表示と時刻表示でハマったのでその話をメモとして残しておこうと思います。

環境

名称 version等
OS OS X El Capitan 10.11.6
zsh 5.3.1
ターミナルエミュレータ iTerm2 3.0.14

zshとiTerm2はhomebrewでインストールしています。
また、VMですがCentOS 7.1などでもちゃんと反映できました。

プロンプトをカラフルに

単にプロンプトの色を変更すること自体は.zshrcでcolorsを呼び出して、PROMPTに文字の色なら$fg[hoge]、背景色なら$bg[hoge]を指定してあげるだけです。

例:~/.zshrc
autoload -Uz colors
colors

PROMPT="%{$fg[green]}%}[%n@%m]%{${reset_color}%}"

なんとまあ、お手軽簡単。しかしこの方法では8色しか指定できません。
元々、僕はデザイナー出身で色にうるさいエンジニアなので、CUIでも色に拘りたいのです。
なので早速プロンプトを256色表示でカラフルにしてあげようと思い調べました。

256色表示

256色表示する方法は複数あります。
例はいずれも緑(082)背景の赤(001)文字です。

ANSI利用

例1
PROMPT="%{^[[30;48;5;082m%}%{^[[38;5;001m%}[%n@%m]%{^[[0m%}"

一つ目はANSIカラーコードの256色モードを利用したもの。
^[で表されているのは制御文字でVimの場合はCtrl+v入力後にCtrl+[ or ESCで入力できます。
[30;48;5;色番号mで背景色、[38;5;色番号mで文字色を指定できます。最後に[0mで色リセット。

余談ですが、^[\033\eでも代用できるはずなんですが、僕の環境では何故か正常に反映されませんでした。何か分かる人は教えてください。

(2017/3/20 追記)
コメントより

例1’
PROMPT=$'%{\e[30;48;5;082m%}%{\e[38;5;001m%}[%n@%m]%{\e[0m%}'

\が使われたエスケープはプロンプトでの解釈には含まれず、$'~'やzsh組み込みのechoの引数で解釈されるそうです。
なので、PROMPTの指定で\を使うならば、上の例のように代入時に$'~'を使って\が解釈されるようにすると良いようです。ちなみに例では\eですが、\033でも大丈夫です。

Zshパラメータ利用

例2
PROMPT="%K{082}%F{001}[%n@%m]%f%k"

もう一つはman zshmiscで見れるZshのパラメータを利用した方法。
%K{色番号}で背景色、%F{色番号}で文字色を指定、%kで背景色リセット、%fで文字色リセット出来ます。
こちらのほうがスッキリしていて見やすいので僕はこちらで指定しています。

ちなみに、指定できる色は以下のワンライナー実行で確認できます。

for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [ $(($c%16)) -eq 15 ] && echo;done;echo

好きなフォーマットで時刻表示

Bash時代のプロンプトには僕は[曜日 月/日 時:分:秒]なフォーマットで時刻を表示していたのですが、Zshで標準で提供されているパラメータではこのようなフォーマットは存在しません。
しかし、Zshではstrftime関数を用いて自由に時刻フォーマットできる%D{string}が用意されています。

PROMPT="[%D{%a %m/%d %T}]"

上記のフォーマットはこのようになります。
詳しいフォーマットについてはman strftimeこのサイトで。

参考

あとがき

manコマンドはさいつよ。
あと、Sublime textで^[入力できないのなんか悔しい。

43
40
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?