bash と zsh のプロンプトに git の branch 名を表示するアレやってみた。

シェアする

プロンプトに git のブランチ名表示するやつ、やろうやろうと思っていてやってなかったのだけど、ちょっとやる気出して設定してみたら結構便利だったのでメモ。

CentOS+Bash と Ubuntu+Zsh という二つの環境で設定した。

Sponsored Links

CentOS + Bash

よくあるサーバな環境。
bash-completion のインストールが必要だった。

$ sudo yum install bash-completion
$ vim ~/.bashrc
# 以下の文言を追加する。
if [ -f /etc/bash_completion ]; then
	. /etc/bash_completion
fi

if [ -f $BASH_COMPLETION_DIR/git ]; then
	export PS1='\[\033[01;32m\]\u@\h\[\033[01;33m\] \w$(__git_ps1) \[\033[01;34m\]\$\[\033[00m\] '
else
	export PS1='\[\033[01;32m\]\u@\h\[\033[01;33m\] \w \[\033[01;34m\]\$\[\033[00m\] '
fi

こんな感じ。

ryomatsu@vps ~/project/twitgaa (master) $ git branch
* master

Ubuntu + Zsh

自分のクライアントマシンは vm にいれた Ubuntu. こっちがメイン。zshでは特に追加で何かをインストールする必要は無いみたいだけど、古いzshだと動かなかった。。原因は気が向いたら調べる。

Zsh は左右別々にプロンプトを表示できるのだけどとりあえず右側に表示してみた。

autoload -U colors; colors
autoload -Uz VCS_INFO_get_data_git; VCS_INFO_get_data_git 2> /dev/null
compinit -u
# End of lines added by compinstall

PROMPT='[%n@%m] %(!.#.$) '
RPROMPT='[%~]'

function rprompt-git-current-branch {
	local name st color gitdir action
	if [[ "$PWD" =~ '/\.git(/.*)?$' ]]; then
		return
	fi
	name=`git rev-parse --abbrev-ref=loose HEAD 2> /dev/null`
	if [[ -z $name ]]; then
		return
	fi

	gitdir=`git rev-parse --git-dir 2> /dev/null`
	action=`VCS_INFO_git_getaction "$gitdir"` && action="($action)"

	st=`git status 2> /dev/null`
	if [[ "$st" =~ "(?m)^nothing to" ]]; then
		color=%F{green}
	elif [[ "$st" =~ "(?m)^nothing added" ]]; then
		color=%F{yellow}
	elif [[ "$st" =~ "(?m)^# Untracked" ]]; then
		color=%B%F{red}
	else
		color=%F{red}
	fi

	echo "$color$name$action%f%b "
}

# PCRE 互換の正規表現を使う
setopt re_match_pcre

# プロンプトが表示されるたびにプロンプト文字列を評価、置換する
setopt prompt_subst

RPROMPT='[`rprompt-git-current-branch`%~]'

表示はこんな感じ。

[ryomatsu@ubuntu.vbox] $ git branch      [master ~/project/twitgaa]
* master

ブランチ行ったり来たりよくするので便利だ。

参考URL

Sponsored Link

シェアする

フォローする