日常は GUI でほとんどのオペレーションを行ってますが、アプリ開発時のバージョン管理は、CUI の方が学習コストも低く扱いやすいので、GUI と CUI を行ったり来たりしながら作業を行っています。
今回、zsh のプロンプトに Git ブランチを表示したかったので、そのカスタマイズ方法をメモしておきます。
目次
- zsh プロンプト概要
- zsh プロンプトに Git の情報を表示する
- まとめ
zsh プロンプト概要
はじめに
zsh のプロンプトを変更するため、ホーム直下にある .zshrc ファイルを開きます。
この .zshrc ファイルで以下のようなプロンプトの定義(各パラメータの詳細は後述)を行います。PROMPT は画面左端、RPROMPT は画面右端に出力されるプロンプト変数です。
.zshrc
[code]
PROMPT=’%{$fg[red]%}[%n@%m]%{$reset_color%}’
RPROMPT=’%{${fg[red]}%}[%~]%{${reset_color}%}’
[/code]
.zshrc を変更・保存した後にはターミナルで source ~/.zshrc コマンドを実行し、ソースファイルをリロードします。
ターミナル
[code]
$ source ~/.zshrc
[/code]
結果
色の変更
最初に、カラー変更を行うため、colors を呼び出しておきます。
.zshrc
[code]
autoload -Uz colors
colors
[/code]
%{$fg[色番号]%} と %{$reset_color%} で囲まれた部分に「色番号(名称)」のカラーが適用されます。
.zshrc
[code]
PROMPT=’%{$fg[red]%}[%n@%m]%{$reset_color%}’
[/code]
今回の PROMPT の例では [%n@%m] を「red(赤)」で表示する、と言う意味になります。
また、$fg (ForeGround)の部分を $bg (BackGround) とすることで、背景色を変更することも可能です。
.zshrc
[code]
PROMPT=’%{$bg[red]%}[%n@%m]%{$reset_color%}’
[/code]
プロンプトで使用できる色は以下の通りです。
色の番号・名称・サンプル一覧
番号 | 名称 | サンプル |
---|---|---|
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 のバージョンを確認(ターミナル)
[code]
$ zsh –version
[/code]
vcs_info の宣言と設定
バージョン管理システムから情報を自動的に取得するために vcs_info を宣言します。
.zshrc
[code]
autoload -Uz vcs_info
[/code]
次に、vcs_info から取得した情報をカスタマイズします。各項目の詳細はソースのコメントを参考にしてください。
.zshrc
[code]
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 外の表示
[/code]
プロンプト表示直前に上記で設定した vcs_info を呼び出します。
.zshrc
[code]
precmd () { vcs_info }
[/code]
これでで ${vcs_info_msg_0_} に先ほど zstyle で設定したメッセージが表示されます。
今回はデフォルトのプロンプトを [ユーザー名@ホスト名] とし、git の管理下に移動した際にデフォルトのプロンプトの後にブランチ名を表示したいと思います。
[code]
PROMPT=’%{$fg[red]%}[%n@%m]%{$reset_color%}’
PROMPT=$PROMPT’${vcs_info_msg_0_} %{${fg[red]}%}%}$%{${reset_color}%} ‘
[/code]
以上で git の管理下のフォルダに移動した際のプロンプトは [ユーザー名@ホスト名](ブランチ名) $ が表示されるようになり、
- 通常時
- (ブランチ名) が「シアン」で表示
- add されていないファイルがある場合
- +(ブランチ名) が「マゼンタ」で表示
- commit されていないファイルがある
- !(ブランチ名) が「グリーン」で表示
と状態によってプロンプトの表示が切り替わるようになります。
結果
zsh プロンプトに Git の情報を表示するまとめ
最後に今回の設定をまとめた .zshrc サンプルコードを掲載しておきます。
[code]
# 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}%}’
[/code]
まとめ
普段使っているターミナルのプロンプトをカスタマイズするだけで、無機質な CUI がかわいく見えてきたりします。
黒い画面が苦手な方も、プロンプトのカスタマイズはとても簡単ですので、自分好みのカラーに変えてみたり日付や時刻を表示して楽しんでみてください。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。