Terminal: zshプロンプトのカスタマイズ(git 対応)

日常は GUI でほとんどのオペレーションを行ってますが、アプリ開発時のバージョン管理は、CUI の方が学習コストも低く扱いやすいので、GUI と CUI を行ったり来たりしながら作業を行っています。

今回、zsh のプロンプトに Git ブランチを表示したかったので、そのカスタマイズ方法をメモしておきます。

目次

  • zsh プロンプト概要
  • zsh プロンプトに Git の情報を表示する
  • まとめ

zsh プロンプト概要

はじめに

zsh のプロンプトを変更するため、ホーム直下にある .zshrc ファイルを開きます。

この .zshrc ファイルで以下のようなプロンプトの定義(各パラメータの詳細は後述)を行います。PROMPT は画面左端、RPROMPT は画面右端に出力されるプロンプト変数です。

.zshrc

PROMPT='%{$fg[red]%}[%n@%m]%{$reset_color%}'
RPROMPT='%{${fg[red]}%}[%~]%{${reset_color}%}'

.zshrc を変更・保存した後にはターミナルで source ~/.zshrc コマンドを実行し、ソースファイルをリロードします。

ターミナル

$ source ~/.zshrc

結果

img_terminal-zsh-prompt-customize01

色の変更

最初に、カラー変更を行うため、colors を呼び出しておきます。

.zshrc

autoload -Uz colors
colors

%{$fg[色番号]%}%{$reset_color%} で囲まれた部分に「色番号(名称)」のカラーが適用されます。

.zshrc

PROMPT='%{$fg[red]%}[%n@%m]%{$reset_color%}'

今回の PROMPT の例では [%n@%m]「red(赤)」で表示する、と言う意味になります。
また、$fgForeGround)の部分を $bg (BackGround) とすることで、背景色を変更することも可能です。

.zshrc

PROMPT='%{$bg[red]%}[%n@%m]%{$reset_color%}'

プロンプトで使用できる色は以下の通りです。

色の番号・名称・サンプル一覧

番号 名称 サンプル
0 black
1 red
2 green
3 yellow
4 blue
5 magenta
6 cyan
7 white

パラメータの詳細

PROMPT(RPROMPT) に記載する各パラメータ詳細は以下のようになっています。
この中から表示したい項目を選びプロンプトをカスタマイズします。

パラメータ内容サンプル
%Mホスト名localhost.localdomain
%mホスト名localhost
%nユーザ名root
%#ユーザ種別#(root)
% (root以外)
%yログイン端末名pts/0
%lログイン端末名pst/0 (tty*の場合はtty省略)
%?直前のコマンドの戻り値0
%h
%!
コマンド実行 (history) 数1
%d
%/
カレントディレクトリ/root/currentdir
%~カレントディレクトリ~/currentdir
%Cカレントディレクトリcurrentdir
%c
%.
カレントディレクトリcurrentdir ($HOMEは~)
%D日付16-03-07
書式)yy-mm-dd
%W日付03/07/16
書式)mm/dd/yy
%w日付Mon 07
書式)day dd
%*時間01:23:45
書式)hh:mm:ss
%T時間01:23
書式)hh:mm
%t
%@
時間01:23PM
書式)hh:mm(am/pm format)

zsh プロンプト概要まとめ

「%」や {} が連続しているため、何かの呪文のように見えてしまい抵抗があると思いますが、中身はとても単純です。

これらを踏まえ、次項でこのプロンプトに Git の情報を表示させたいと思います。

zsh プロンプトに Git の情報を表示する

はじめに

zsh のプロンプトに Git の情報を表示するためには、zsh 4.3.10 以上である事が必須となるので、ターミナル上から zsh のバージョンを確認しておきます。

zsh のバージョンを確認(ターミナル)

$ zsh --version

vcs_info の宣言と設定

バージョン管理システムから情報を自動的に取得するために vcs_info を宣言します。

.zshrc

autoload -Uz vcs_info

次に、vcs_info から取得した情報をカスタマイズします。各項目の詳細はソースのコメントを参考にしてください。

.zshrc

zstyle ':vcs_info:git:*' check-for-changes true #formats 設定項目で %c,%u が使用可
zstyle ':vcs_info:git:*' stagedstr "%F{green}!" #commit されていないファイルがある
zstyle ':vcs_info:git:*' unstagedstr "%F{magenta}+" #add されていないファイルがある
zstyle ':vcs_info:*' formats "%F{cyan}%c%u(%b)%f" #通常
zstyle ':vcs_info:*' actionformats '[%b|%a]' #rebase 途中,merge コンフリクト等 formats 外の表示

プロンプト表示直前に上記で設定した vcs_info を呼び出します。

.zshrc

precmd () { vcs_info }

これでで ${vcs_info_msg_0_} に先ほど zstyle で設定したメッセージが表示されます。

今回はデフォルトのプロンプトを [ユーザー名@ホスト名] とし、git の管理下に移動した際にデフォルトのプロンプトの後にブランチ名を表示したいと思います。

PROMPT='%{$fg[red]%}[%n@%m]%{$reset_color%}'
PROMPT=$PROMPT'${vcs_info_msg_0_} %{${fg[red]}%}%}$%{${reset_color}%} '

以上で git の管理下のフォルダに移動した際のプロンプトは [ユーザー名@ホスト名](ブランチ名) $ が表示されるようになり、

通常時
(ブランチ名)「シアン」で表示
add されていないファイルがある場合
+(ブランチ名)「マゼンタ」で表示
commit されていないファイルがある
!(ブランチ名)「グリーン」で表示

と状態によってプロンプトの表示が切り替わるようになります。


結果

img_terminal-zsh-prompt-customize02

zsh プロンプトに Git の情報を表示するまとめ

最後に今回の設定をまとめた .zshrc サンプルコードを掲載しておきます。

# VCSの情報を取得するzsh関数
autoload -Uz vcs_info
autoload -Uz colors # black red green yellow blue magenta cyan white
colors

# PROMPT変数内で変数参照
setopt prompt_subst

zstyle ':vcs_info:git:*' check-for-changes true #formats 設定項目で %c,%u が使用可
zstyle ':vcs_info:git:*' stagedstr "%F{green}!" #commit されていないファイルがある
zstyle ':vcs_info:git:*' unstagedstr "%F{magenta}+" #add されていないファイルがある
zstyle ':vcs_info:*' formats "%F{cyan}%c%u(%b)%f" #通常
zstyle ':vcs_info:*' actionformats '[%b|%a]' #rebase 途中,merge コンフリクト等 formats 外の表示

# %b ブランチ情報
# %a アクション名(mergeなど)
# %c changes
# %u uncommit

# プロンプト表示直前に vcs_info 呼び出し
precmd () { vcs_info }

# プロンプト(左)
PROMPT='%{$fg[red]%}[%n@%m]%{$reset_color%}'
PROMPT=$PROMPT'${vcs_info_msg_0_} %{${fg[red]}%}%}$%{${reset_color}%} '

# プロンプト(右)
RPROMPT='%{${fg[red]}%}[%~]%{${reset_color}%}'

まとめ

普段使っているターミナルのプロンプトをカスタマイズするだけで、無機質な CUI がかわいく見えてきたりします。

黒い画面が苦手な方も、プロンプトのカスタマイズはとても簡単ですので、自分好みのカラーに変えてみたり日付や時刻を表示して楽しんでみてください。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents