現在のブランチ名をコマンド一発で入力する方法

gitを使うときは、bashrcからbash_completionを読み込んで、ブランチ名の補完などができるようにしているのですが、同じようなブランチ名が多くなったりすると、補完でもイライラするときがあって、

git pull origin hoge

みたいにやる時に面倒だなと思うことが多々ありました。
最近は補完候補表示の反応が遅くなってきて、補完だけではしんどいのでなんとかせねばと、現在いるブランチ名を補完じゃなくてコマンド一発で入力したいと思っていました。

とりあえず今いるブランチ名を取得するのは、

git symbolic-ref HEAD | cut -d/ -f 3

これでいける(cutの引数は環境によって違うかも)んだけど、これをどうやって入力ラインに補完すればよいのかさっぱり分からず。


Twitterで @hamaco さんにbind と READLINE_LINEとか使えばいけるよ、これでどや!って感じで教えてもらった(下記、実際は1行です)

bind -x '"\C-o": READLINE_LINE="$READLINE_LINE`git symbolic-ref HEAD | cut -d/ -f 3`";
 READLINE_POINT=${#READLINE_LINE}'
bind -x '"\C-o": READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}
`git symbolic-ref HEAD | cut -d/ -f 3` ${READLINE_LINE:${READLINE_POINT}}"'

bashでこのコマンドを一回実行すれば、以降は Ctrl + oでブランチ名が一発で入力されます。
自分は .bashrcの最後にこの行を記述していて、シェル起動時にこのコマンドが走るようにしています。


ただし・・・bash4以降だけど!!(CentOS5はbash3)


CentOS5でもやりたかったので、bash4をコンパイルしてインストール

wget http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz
tar -zxf bash-4.2.tar.gz
cd bash-4.2
./configure --prefix=/usr/local/bash --enable-readline
make
sudo make install

これで/usr/local/bash/bin/bashにプログラムがあるので、あとはログインシェルを変更

sudo vipw

で、該当ユーザの/bin/bashをusr/local/bash/bin/bashに変更するだけ。

もう一度ログインして、

echo $BASH_VERSION

として、バージョンが4になっているか確認すればOK