zsh로 프롬프트에 현재 분기 이름 표시

6475 단어 zshrcZsh
@hmmrjn 씨의 5분만에 터미널의 'MacBook:~ Taro$'을 보기 쉽게 절정하는 방법 을 바탕으로 프롬프트(bash)를 커스터마이즈하고 있었습니다만, 머신 환승을 계기로 zsh에 이사했으므로, 같은 커스터마이즈를 zsh에서도 실시했습니다.

완성품은 이쪽
현재 디렉토리와 (git 아래의 경우) 현재 분기를 표시합니다.


이전 준비



글꼴 설치



Menlo for Powerline.ttf을 다운로드하여 설치합니다.
디렉토리와 브랜치 이름 뒤의 오른쪽 삼각형 "▶︎"을 사용하고 싶기 때문입니다. 떨어진 .ttf 파일을 두 번 클릭하면 설치 프로그램이 시작됩니다.


글꼴 전환



설치가 끝나면 터미널 환경설정(⌘,)의 프로파일 > 텍스트 > 글꼴을 설치한 "Menlo for Powerline"으로 변경합니다.
변경되면 터미널을 다시 시작합니다.

.zshrc에 추가



.zshrc에 다음을 추가합니다.

.zshrc
autoload -Uz vcs_info
setopt prompt_subst

# vcs_info_msg_0_変数をどのように表示するかフォーマットの指定  %b: ブランチ名
zstyle ':vcs_info:git:*' formats '%b'
precmd () { vcs_info }

# プロンプトを見やすくする
export PROMPT='%K{250} %F{016}%C%k%K{118}%f%F{250}%f%F{016}%{${vcs_info_msg_0_}%f%k%F{118}%f $'

가 깨져 있지만 Menlo for Powerline이라면 “▶︎”처럼 표시됩니다.
우선 완성시키고 싶은 사람은 여기서 끝. 이하 해설입니다.

2행까지


autoload -Uz vcs_info
setopt prompt_subst
autoload 에서 $FPATH에 있는 내장 함수를 로드할 수 있습니다.-U 는 읽을 때 사용자가 정의한 alias를 무시하고 읽습니다. -z는 쉘을 명시 적으로 zsh로 읽습니다.

vcs_info는 버전 관리 시스템에서 정보를 가져오는 함수입니다. git 이외에 svn 등에서도 사용할 수 있습니다.autoload -Uz vcs_info 그냥 읽는 것만으로 실행하지 않습니다. 이번에는 나중의 행에서 프롬프트를 표시할 때마다 매번 실행하도록 설정하기 때문에 여기에서 실행할 필요가 없습니다.
setopt prompt_subst 하면 나중에 설정하는 PROMPT 변수 내에서 변수 전개하게 됩니다.

6행까지


zstyle ':vcs_info:git:*' formats '%b'
precmd () { vcs_info }
zstyle 에 git 정보가 들어있는 변수 vcs_info_msg_0_ 의 형식을 설정합니다. %b 는 현재 브랜치를 나타냅니다.
그 외에는 어느 버전 관리 시스템을 사용하고 있는지를 나타내는 %s 등도 있습니다. 자세한 내용은 The Z Shell Manual
precmd () {} 는 프롬프트를 표시할 때마다 실행하는 함수입니다. 여기서 git에서 정보를 얻는 vcs_info를 실행하여 프롬프트를 볼 때마다 변수 vcs_info_msg_0_의 내용을 최신으로 다시 씁니다.

9행


export PROMPT='%K{250} %F{016}%C%k%K{118}%f%F{250}%f%F{016}%{${vcs_info_msg_0_}%f%k%F{118}%f $'

PROMPT에 표시할 형식을 설정합니다.
${vcs_info_msg_0_} 에서, 먼저 형식을 지정한 vcs_info_msg_0_ 에 들어 있는 git 의 정보를 전개합니다.

또한 배경색은 %K{色番号} 에서 시작점을 지정하고 %k 에서 종료점을 지정합니다.
문자색은 %F{色番号} 로 시작점을 지정하고 %f 로 종료점을 지정합니다.

도시하면

오른쪽 삼각「▶︎」의 부분의 색은 %F{色番号} 로 지정하기 때문에, 문자색 지정이 약간 섞여 있습니다.

또한 {} 안에서 사용할 수 있는 색 번호는 for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [ $(($c%16)) -eq 15 ] && echo;done;echo 에서 확인할 수 있습니다.


해설은 이상입니다.
git하외 밖에서는 녹색의 배경이 나오지 않게 하고 싶다 (vcs_info_msg_0_에서 PROMPT를 조건 분기하면 아마 할 수 있다.)

마지막으로 코멘트를 끈적끈적 쓴 버전을 붙여 둡니다. (내 .zshrc 그대로)

.zshrc
#gitのブランチ名を表示する
autoload -Uz vcs_info
# vcs_info_msg_0_変数をどのように表示するかフォーマットの指定
## デフォルトのフォーマット
### %s: どのバージョン管理システムを使っているか(git, svnなど)
### %b: ブランチ名
zstyle ':vcs_info:git:*' formats '%b'
# プロンプトを表示する直前に毎回実行する
precmd () { vcs_info }

# ターミナルを見やすくする
# PROMPT変数内で変数展開する
setopt prompt_subst
## 使える色の確認は for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [ $(($c%16)) -eq 15 ] && echo;done;echo
## 背景色の変更 %K{色番号}で開始 %kで終了
## 文字色の変更 %F{色番号}で開始 %fで終了
export PROMPT='%K{250} %F{016}%C%k%K{118}%f%F{250}%f%F{016}%{${vcs_info_msg_0_}%f%k%F{118}%f $'

참고 링크


  • The Z Shell Manual (26.5 Gathering information from version control systems)
  • zsh compinit에 지정된 autoload 옵션 -Uz 정보
  • zsh 터미널에 리포지토리 정보 보기 - 사과의 저택
  • Zsh의 프롬프트의 색을 바꾼 이야기
  • 좋은 웹페이지 즐겨찾기