가능하다면 디렉토리를 고급화하는 기능이 있나요?

가능하다면 디렉토리를 고급화하는 기능이 있나요?

아래 코드 조각을 사용하여 alt-h현재 디렉터리의 한 수준 뒤로 이동합니다(누름).

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

alt-b가능하다면 한 수준 앞으로 매핑하는 유사한 기능을 원합니다 . 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

디렉토리가 변경되지 않은 경우 0이 아닌 종료 상태를 반환하는지 확인하십시오 &&(이렇게 하면 경고음이나 다른 형태의 실패 피드백이 발생해야 함).

undo-up-dir더 이상 실행 취소할 수 없을 때에도 현재 디렉터리에 디렉터리가 하나만 있는지 확인하고 해당 디렉터리로 이동할 수 있도록 이를 확장할 수도 있습니다 .

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
}

관련 정보