ターミナルのプロンプトにgitの差分(diff)のステップ数を表示させたい
そもそもターミナルのプロンプトって?
「プロンプト」はターミナルの中でuser_name@host_name ~ %
で表示される、ユーザーにコマンドを入力するための待ち受け状態を示すテキストのこと。
なぜ差分(diff)を表示させたいのか
開発をしていると知らず知らずのうちにdiffが肥大化することがあり、大量の差分を持ったプルリクエストを作ってしまいます。肥大化する前に先輩エンジニアにレビューしてもらう環境を整えようとdiffを表示させてみます。
先に結果
以下のように表示させました。
差分がない時
差分が存在する時
方法
イケてないかと思いますが、目的は達成しています。以下のように~/.zshrc
を編集しました。
autoload -Uz vcs_info setopt prompt_subst # gitのブランチ名等表示 zstyle ':vcs_info:git:*' check-for-changes true zstyle ':vcs_info:git:*' stagedstr "%F{yellow}!" zstyle ':vcs_info:git:*' unstagedstr "%F{red}+" zstyle ':vcs_info:*' formats "%F{green}%c%u[%b]%f" zstyle ':vcs_info:*' actionformats '[%b|%a]' precmd () { vcs_info # git diff --shortstatのinsertion, deletionを抽出して表示する export GIT_DIFF_INSERTION='' export GIT_DIFF_DELETION='' if [ -n "$(git status --short 2>/dev/null)" ];then git_diff_stat=$(git diff --shortstat) if [[ $git_diff_stat == *insertion* ]];then export GIT_DIFF_INSERTION=+$(echo $git_diff_stat | sed -E 's/.*, (.*) insertion.*/\1/') fi if [[ $git_diff_stat == *deletion* ]];then export GIT_DIFF_DELETION=-$(echo $git_diff_stat | sed -E 's/.*, (.*) deletion.*/\1/') fi fi } PROMPT='%n@%m %c'\$vcs_info_msg_0_'' PROMPT=${PROMPT}' %F{green}${GIT_DIFF_INSERTION}%F{red}${GIT_DIFF_DELETION} %f$ '
おわりに
今回は若干無理やり感はありますが、ターミナルのプロンプトにgitの差分(diff)のステップ数を表示させてみました。 シェルスクリプト使うのはまだ不慣れなので、イケてるzshrcがかけるようになってきたら更新する予定です。