任意のディレクトリに瞬間移動できるようにcdコマンドをラップする

任意のディレクトリに瞬間移動できるようにcdコマンドをラップする
TaKO8Ki
May 22, 2021

ふと、ディレクトリの移動をもっと快適にしたいと思ったので、自分好みにcdコマンドをラップしてみました。

cd

zz.luazoxideのように一度行ったことのあるディレクトリを記憶しておき、2回目以降は$ z fooのように実行すると「ディレクトリ名の一部が一致すれば最近アクセスしたディレクトリへ遷移できるというラッパー」も良さそうだったんですが、 foo以下のディレクトリが補完されて欲しい(正確にはfoo以下にどんなディレクトリがあるか分かり、そこに直接cdできて欲しい)という気持ちがあったので使うのはやめました。

最終的には以下のようにcdコマンドをラップすることにしました。 fdで特定ディレクトリ配下のディレクトリ一覧を取得して、それをfzfで曖昧検索し、そこにcdできるようになっています。

# requirements
# fd: https://github.com/sharkdp/fd
# fzf: https://github.com/junegunn/fzf
function cd() {
flag='-f'
if [ $# -eq 0 ]; then
builtin cd
elif [ $# -eq 1 ]; then
if [ $1 = "$flag" ]; then
dirs=$(fd --type d . $HOME | fzf)
if [ "$dirs" != '' ]; then
builtin cd "$dirs"
fi
else
builtin cd $1
fi
elif [ $2 = "$flag" ]; then
target=${1:-$HOME}
dirs=$(fd --type d . $target | fzf)
if [ "$dirs" != '' ]; then
builtin cd "$dirs"
fi
fi
}
view raw cd.sh hosted with ❤ by GitHub