gemを作っていて複数環境でテストを実行したり、Railsのアップデート作業中で複数のGemfileがリポジトリに含まれる事がある。
そういう時にGemfileを高速で切り替えられるようにするためのpecoの設定を作ってみた。
function swgemfile() {
local gemfile=$(find . \( -name "Gemfile*" -or -name "*.gemfile" \) -not -name "*.lock" -maxdepth 2 | peco)
if [ -n "$gemfile" ]; then
local gemfile_fullpath=$(echo ${gemfile} | ruby -r pathname -ne 'puts Pathname(Dir.pwd).join($_)')
touch .envrc
sed -i -e '/BUNDLE_GEMFILE/d' .envrc
echo "export BUNDLE_GEMFILE=${gemfile_fullpath}" >> .envrc
direnv allow .
direnv reload
else
sed -i -e '/BUNDLE_GEMFILE/d' .envrc
direnv allow .
direnv reload
fi
}
alias swg=swgemfile
BUNDLE_GEMFILEの対象をpecoで選択するのだが全体の環境変数を弄ると他のディレクトリで作業する時問題になるのでdirenvを使うようにしている。
ついでに今利用しているgemfileをプロンプトに出せるようにもしてみた。
if type ruby > /dev/null 2>&1; then
BUNDLE_GEMFILE_PROMPT_="%{$fg_bold[blue]%}gemfile:(%{$fg[green]%}\$(echo \$BUNDLE_GEMFILE | ruby -r pathname -ne 'begin puts Pathname(\$_).relative_path_from(Pathname(Dir.pwd)); rescue; end')%{$fg_bold[blue]%})%{$reset_color%} "
fi
超読み辛いw
追記:
Macだとgnu-sed入れてgsedを使うようにしないとバックアップファイルが出来てしまうので注意。