Bash
Zsh

よく作業するDirをBookmarkするshellスクリプト

More than 5 years have passed since last update.


はじめに

zshやbashで作業しているとよく移動するDirというのがあると思います。

また、久しぶりにLoginしたサーバでは、どこが大事なDirかを忘れてしまうこともあるかと思います。

そういうときに、よく使うDirをBookmark?しておくと便利です。


追記: 2014/3/20

@mollifier さんが作成したzshによるPluginは補完が効くので更に便利です!

よく使うディレクトリをブックマークする zsh のプラグイン


準備

下記のようなものを .zshrc.bashrcに書いておきます。

書いたら source ~/.zshrc などして読み込んでください。


.zshrc

BMRC=~/.bmrc

touch $BMRC

bmls() {
cat $BMRC | sort -n
}

bmvi() {
# open BMRC with EDITOR.
${EDITOR:-vi} $BMRC
}

bmadd() {
local bmdir=$PWD
local newid=$1

if __bm_path_list | grep -F -x "$bmdir" > /dev/null; then
echo "$bmdir is already in bm list" 1>&2
return 2
fi

if [ -n "$newid" ]; then
if
__bm_id_list | grep -F -x "$newid" > /dev/null; then
echo "$newid is already used as bm id" 1>&2
return 3
fi
fi

if [ -z $newid ]; then
local maxid
maxid=$(__bm_id_list | grep '^[0-9][0-9]*$' | sort -n -r | head -1)
if [ -n "$maxid" ] && [ "$maxid" -ge 1 ]; then
newid=$((maxid + 1))
else
newid=1
fi
fi

echo "$newid|$bmdir" >> $BMRC
}

bm() {
local bmid=$1
if [ -z "$bmid" ]; then
bmls
return
fi

local bmdir=$(__bm_get "$bmid")
if [ -z "$bmdir" ]; then
echo "$bmid is not in bm list" 1>&2
return 1
fi

cd "$bmdir"
}

__bm_get() {
escaped_bmid=$(echo "$1" | sed -e 's/[^a-zA-Z0-9<>]/\\&/g')
cat $BMRC | grep -E "^${escaped_bmid}\\|" | cut -d '|' -f 2 | head -n 1
}

__bm_path_list() {
cat $BMRC | cut -d '|' -f 2
}

__bm_id_list() {
cat $BMRC | cut -d '|' -f 1
}



使い方


現在のDirをBookmark?に登録

bmadd <name> で登録します。



% bmadd idea



Bookmark登録されているDirの一覧を表示

bmとだけ打つと一覧が表示されます。



% bm

doc|/Users/k_morishita/Documents
down|/Users/k_morishita/Downloads
idea|/Users/k_morishita/IdeaProjects


そのDirに移動

bm <name> で移動します。



% bm doc



Bookmarkを編集

仕組みは単に ~/.bmrc にテキストファイルとして保存してあるだけです。

bmviと打つとそのファイルを編集する vi が起動します。何をどうすれば良いかは見ればわかると思います。



% bmvi



さいごに

10年以上前に書いたShellスクリプトなので拙い感じがアリアリですが、動くには動くのでお試し下さい。