はじめに
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スクリプトなので拙い感じがアリアリですが、動くには動くのでお試し下さい。