ディレクトリ移動と爆速にするzshの設定

みなさん cdしていますか? 私はしています。

ところで普段からzshを使ってcdをすると、補完とかを使ってそこそこ快適にできますが、それでも「普段使うあのディレクトリにパット移動したい…」 などのケースが出てくると思います。

大体この際に対応は、zshにpecoとfast_cdあたりを組み合わせて行う運用ですが、 この場合は fast_cdが覚えているディレクトリ数が少ないため 頑張って移動しようとしても、候補のディレクトリが4つとかいう悲しい状態になります。

ということで、zshを書いていきましょう。 まずは、移動したディレクトリを覚える設定を書きます

export dirfile="$HOME/.dirfile"

function cd {
    builtin cd "$@"
    echo $PWD >>| $dirfile
}       

zshのcdのhookを使えという声もありますが、まずは無難にcdしたら $dirfile に設定しているファイルに、ディレクトリパスを追記していきます。

ちなみに、このファイルを活用すると、コマンド一発で直前のディレクトリに移動するものを書けます。

function hd {
    cd $(cat $dirfile | tail -1)
}

こうしておくと、複数端末を開いてエイヤする際にかなり便利です。

ちなみに $dirfile にゴミがたまってきたら、次のコマンドでuniqにします

function dirfileuniq {
    local new_dirfile=$(cat $dirfile | sort -rn | uniq)
    echo $new_dirfile >| $dirfile
}

はい。そしてディレクトリの移動ですが、どこかの記事で見たpecoの活用術の設定を活用します。

function peco-dir-jmp
{
    which peco z > /dev/null
    if [ $? -ne 0 ]; then
        echo "Please install peco and z"
        return (1)
    fi
    local res=$(cat $dirfile | sort -rn | uniq | peco)
    if [ -n "$res" ]; then
        BUFFER+="cd $res"
        zle accept-line
        else
            return 1
        fi
 }
zle -N peco-dir-jmp
bindkey '^[pz' peco-dir-jmp

こうしておくと、 Ctrl-pzでよしなにディレクトリ移動が可能となります。 便利でしたね。現場からは以上です