cd
で複数階層上へ移動するために、
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
みたいな設定をしている方を見かけますが、個人的には以下の理由で使っていませんでした。
- AUTO_CDを使ってないので、階層を上るときだけ
cd
で始まらないから手に馴染まない。 -
cd ../../../hoge
みたいなのをどうにかはできない。 - ドットの数が増える分だけエイリアスを登録しないといけない。
ただ、やっぱりcd ../../..
…って毎度やるのは面倒なわけです。
そこで用意したのがこちら。
function replace_multiple_dots() {
local dots=$LBUFFER[-2,-1]
if [[ $dots == ".." ]]; then
LBUFFER=$LBUFFER[1,-3]'../.'
fi
zle self-insert
}
zle -N replace_multiple_dots
bindkey "." replace_multiple_dots
やっていることはZLEを利用して...
と、3回dotを入力した時点で、../..
に変換しているだけです。これなら、上記で上げていた不満点はすべて解消してくれます。
.を打つたびに../../../..
…って階層をさかのぼってくれるのは結構気持ちいいです。さらに、cd
以外のコマンドで使用できるのもポイント高いです。
って書いたところで、global aliasを使う手があったかもと気付いたのですが、有効なパス表示に変換しているのでTabで入力補完ができる分、こちらの方がよさそうです。
zplugから使えるようにプラグイン化もしてあるので、こちらもご利用ください。READMEは後で書きます。
試せていないですが他のプラグインマネージャでも動作すると思います。
momo-lab/zsh-replace-multiple-dots
using_zplug
zplug "momo-lab/zsh-replace-multiple-dots"