zshでGitのリモートリポジトリのホスト名を表示する
zsh ではvcs_info
を使用して作業中のリポジトリの情報を表示することができる。「zsh vcs_info」でググるといろいろと出てくるが、私は以下の記事をベースに設定を行って、少しずつアップデートしている。
zsh の vcs_info に独自の処理を追加して stash 数とか push していない件数とか何でも表示する(記事は 4 年ほど前のものだが、zsh 自体がそんなにアップデートしているわけでもないので、今でも十分通用する)
最近になってgithub.com
とgitlab.com
のどちらも使用するようにしたので、リモートリポジトリを間違えないようにホスト名を表示できるように修正した。
リモートリポジトリのホスト名を取得する
git ls-remote --get-url
でリモートリポジトリの URL を取得できる。この URL は.git/config
に記載されているものが表示されるようになっている。たぶんgit remote add origin REMOTE_REPOSITORY
で設定したものと同じになるはず。リモートが複数設定されている場合にどうなるか未確認だが自分のユースケースではそれはあまりないので、気にせず使っている。
[email protected]: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}"
最終的にはこんな感じで表示される。
出力結果が長い
ホスト名が出るのは良いが、ちょっと長いので短くしたい。ここで以前書いたホスト名を短くする手法を使う。SSH_CONFIG を使用して git のリポジトリ URL を短縮する
# gh = [email protected]
git remote rm origin
git remote add origin gh:kawaken/dotfiles
git branch -u origin/master
シンプルな表示になった。