MANA-DOT

PIXEL ART, PROGRAMING, ETC.

zshプロンプトで今いるレポジトリに下線が出るようにした

zsh_repo

上記画像のように、zshのプロンプトのパス部分で今いる場所に下線を引きます。

この記事は こちら の記事の内容を参考にさせていただきました。

上記参考記事をみて、これは便利そうと思いはじめ丸写ししようと思ったのですが、 上記記事のやり方だと /home/repo/hoge/repo でrepoがレポジトリ名の場合に両方に下線を引いてしまいそうであったので、 内容を理解しながら自分で改良してみました。

autoload -Uz vcs_info
zstyle ':vcs_info:*' max-exports 3
zstyle ':vcs_info:*' formats '%s:%b ' '%r' '%R'

precmd () {
  LANG=en_US.UTF-8 vcs_info
  psvar=()
  [[ -n ${vcs_info_msg_0_} ]] && psvar[1]="$vcs_info_msg_0_"

  if [[ -z ${vcs_info_msg_1_} ]] || [[ -z ${vcs_info_msg_2_} ]]; then
    psvar[2]=$PWD
  else
    psvar[2]=`echo $vcs_info_msg_2_|sed -e "s#$vcs_info_msg_1_\\$##g"`
    psvar[3]="$vcs_info_msg_1_"
    psvar[4]=`echo $PWD|sed -e "s#^$vcs_info_msg_2_##g"`
  fi
}
PROMPT="%{${fg[green]}%}%1(v|%1v|)%{${fg[yellow]}%}%2v%U%3v%u%4v%{${reset_color}%}"
  1. vcs_info のformatsで指定したものは $vcs_info_msg_0_ などの変数に連番ではいります。(この時、max-exportsで指定した分だけはいらないことをはじめ知らなくて、結構つまった)
  2. それを、psvarによしなに加工して詰めてあげます。
  3. psvarの各要素の値はPROMPTの文字列中で、%1v などのようにして添字で参照できるため、あとは見栄えを整えてあげるだけです(%U...%u で下線を引く)。

僕の.zshrcなどはgithubにもあります。