zshでGitのリモートリポジトリのホスト名を表示する

zshではvcs_infoを使用して作業中のリポジトリの情報を表示することができる。「zsh vcs_info」でググるといろいろと出てくるが、私は以下の記事をベースに設定を行って、少しずつアップデートしている。

zsh の vcs_info に独自の処理を追加して stash 数とか push していない件数とか何でも表示する(記事は4年ほど前のものだが、zsh自体がそんなにアップデートしているわけでもないので、今でも十分通用する)

最近になってgithub.comgitlab.comのどちらも使用するようにしたので、リモートリポジトリを間違えないようにホスト名を表示できるように修正した。

リモートリポジトリのホスト名を取得する

git ls-remote --get-urlでリモートリポジトリのURLを取得できる。このURLは.git/configに記載されているものが表示されるようになっている。たぶんgit remote add origin REMOTE_REPOSITORYで設定したものと同じになるはず。リモートが複数設定されている場合にどうなるか未確認だが自分のユースケースではそれはあまりないので、気にせず使っている。

git@github.com:kawaken/dotfilesという構成になっている場合が多いので、:@で分割してホスト名に該当しそうな箇所を拾っている。

hostname=$(git ls-remote --get-url | cut -d: -f1 | cut -d@ -f2)

プロンプトに表示する

自分の場合はhook_com[branch]の中に混ぜ込むようにしている。 https://github.com/kawaken/dotfiles/blob/master/zsh/vcs_info#L54

-    echo "%f${arrow}%F{cyan}${remote}%f${(j:/:)gitstatus}"
+    echo "%f${arrow}%F{cyan}${remote}(${hostname})%f${(j:/:)gitstatus}"

最終的にはこんな感じで表示される。

f:id:kentaro_kawano:20180926234632p:plain

出力結果が長い

ホスト名が出るのは良いが、ちょっと長いので短くしたい。ここで以前書いたホスト名を短くする手法を使う。SSH_CONFIGを使用してgitのリポジトリURLを短縮する

# gh = git@github.com
git remote rm origin
git remote add origin gh:kawaken/dotfiles
git branch -u origin/master

f:id:kentaro_kawano:20180926234611p:plain

シンプルな表示になった。