可能であれば、ディレクトリを拡張する機能はありますか?

可能であれば、ディレクトリを拡張する機能はありますか?

以下のコードスニペットを使用して、alt-h現在のディレクトリの1レベル後ろに移動します(押します)。

up-dir() { 
  cd ".."
  zle reset-prompt 
}
zle -N up-dir
bindkey "^[h" up-dir

alt-b可能であれば、1レベル前方にマッピングする同様の機能が必要です。cd -前に進むことがない場合は、前に進まないでください。

zsh 5.8を使用してください。

答え1

どうですか?

down-dir() {
  if [[ $OLDPWD == "$PWD"* ]]; then
    cd -
  else
    echo "previous dir is not below the current dir"
  fi
}

答え2

次のことができます。

up-dir() {
  set -o localoptions -o pushdsilent
  [[ $PWD != / ]] && pushd .. && zle reset-prompt
}

undo-up-dir() {
  set -o localoptions -o pushdsilent

  # pop a directory only if the current working directory matches
  # the "h"ead of the top ([1]) of the directory stack:
  [[ $dirstack[1]:h = $PWD ]] && popd && zle reset-prompt
}

zle -N up-dir
zle -N undo-up-dir
bindkey '^[h' up-dir
bindkey '^[b' undo-up-dir

ディレクトリが変更されていない場合は、ゼロ以外の終了ステータスを返すことを確認してください&&(これを行うと、ビープ音や他の形式の障害フィードバックが発生するはずです)。

undo-up-dir元に戻すことができなくなった場合でも、現在のディレクトリに1つのディレクトリしかないことを確認し、そのディレクトリに移動できるように拡張することもできます。

down-dir() {
  set -o localoptions -o pushdsilent

  # pop a directory only if the current working directory matches
  # the "h"ead of the top ([1]) of the directory stack:
  if [[ $dirstack[1]:h = $PWD ]]; then
    popd
  else
    local -a dirs
    dirs=(./*(N/Y2))
    (($#dirs)) || dirs=(./*(ND/Y2)) # try including hidden ones
    (($#dirs)) || dirs=(./*(N-/Y2)) # try including symlinks to dirs
    (($#dirs)) || dirs=(./*(DN-/Y2)) # symlinks and hidden included
    (($#dirs == 1)) && cd $dirs
  fi && zle reset-prompt
}

関連情報