シェル プログラミング

フレームワークを使わずにzshをカスタマイズしてGitブランチ表示など見やすくする

2020-10-09

みなさんこんにちは、つるおです。
この記事ではMacのデフォルトシェルにもなったzshのプロンプトをカスタマイズして、Gitブランチの表示などをできるようにし、見やすいプロンプトにする方法を紹介します。
oh-my-shellやPreztoなどの設定フレームワークを使用すれば簡単に実現できますが、起動が遅くなったり会社や学校のパソコンでフォントの導入からしなければならなかったりするため、環境に依存せず設定できるzshrcで設定を書き換える方法を紹介します。

見よう見まねで設定する

私の環境では以下の画像のようなプロンプトにしています。
2行構成にしており、1行目は現在の日付と時刻を緑色で表示し、端末デバイス情報とホームディレクトリからのカレントディレクトリ情報を黄色で表示しています。
2行目はユーザー名とカレントディレクトリを白色で表示し、もしGit環境のあるディレクトリであればbranch名とリモートリポジトリとの同期状況を青色で表示、そして直前コマンドの返り値を赤色で表示しています。

Git補完が使えるように下準備

step
1
必要ファイルを設置するディレクトリを作成する

Git補完に必要なファイルを設置するディレクトリを作成します。
その場所は任意で、以下の通りの場所である必要はありません。

mkdir -p ~/.zsh/completion/

step
2
必要ファイルをダウンロードする

ステップ1で作成したディレクトリに補完に必要となるファイルをダウンロードします。

cd ~/.zsh/completion/
$ curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
$ curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
$ curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh

step
3
必要ファイルを規定の名前にリネームする

ステップ2でダウンロードした一部のファイルを、規定のファイル名に変更します。

$ mv git-completion.zsh _git

step
4
補完機能を有効化する

先ほどダウンロードとリネームした必要ファイルを読み込んで有効化します。
任意のエディタで ~/.zshrc を以下のように編集・追記してください。

$ vim ~/.zshrc

fpath=(~/.zsh/completion $fpath)
# 補完機能を有効化
autoload -U compinit
compinit -u

source ~/.zsh/completion/git-prompt.sh

上画像のプロンプトと全く同じようにする

任意のエディタで ~/.zshrc を以下のように編集・追記してください。

$ vim ~/.zshrc

fpath=(~/.zsh/completion $fpath)
# 補完機能を有効化
autoload -U compinit
compinit -u

source ~/.zsh/completion/git-prompt.sh

# promptで色を使う
setopt PROMPT_SUBST
# 右プロンプトを消す
setopt TRANSIENT_RPROMPT

precmd () {
    PROMPT="%F{green}%D %*%f %F{yellow}[%y]:%~%f
[%n@ %C]%F{cyan}$(__git_ps1)%f %F{red}<%?>%f $ "
}

GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto

設定ファイルを少しだけ説明

プロンプトについて

上記の設定ファイル内にあるようなプロンプトの設定は、日付やカレントディレクトリ・色といったような与えられたパラメーターで指定できます。
全パラメータ・色設定を列挙して設定方法を詳しく紹介してくださっているサイトを紹介します。
私も参考になりました!

https://www.sirochro.com/note/terminal-zsh-prompt-customize/

Gitの追加情報設定について

GIT_PS1_SHOWDIRTYSTATE=true

上記コードは、unstagedがある場合に「*」を表示し、stagedがある場合に「+」を表示するようにします。
unstagedはaddされていない変更がある状態で、stagedはcommitされていない変更がある状態です。

GIT_PS1_SHOWUNTRACKEDFILES=true

上記コードは、untrackedがある場合に「%」を表示するようにします。
untrackedはaddされていない新規ファイルがある状態です。

IT_PS1_SHOWSTASHSTATE=true

上記コードは、stashに何かある場合に「$」を表示するようにします。

GIT_PS1_SHOWUPSTREAM=auto

上記コードは、upstreamとの同期状況を表示するようにします。
同期している場合は「=]
進んでいる場合は「>」
遅れている場合は「< 」

-シェル, プログラミング

© 2020 とりあえずいろんな情報記(仮)