LoginSignup
11
12

More than 5 years have passed since last update.

zshでdotを打った分だけ上の階層に行くもう一つの方法

Last updated at Posted at 2017-04-25

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"
11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12