fd를 사용하여 홈 폴더의 모든 디렉터리를 나열합니다.

fd를 사용하여 홈 폴더의 모든 디렉터리를 나열합니다.

cd저는 홈 폴더의 어떤 디렉터리 로든 빠르게 이동하는 쉘 함수를 사용하고 프로그래밍하려고 합니다 .fdfzf

이것이 내가 지금까지 가지고 있는 것입니다

function fdcd() {
  cd "$(fd --type d --ignore-file ~/.config/fd/ignore --hidden | fzf)"
}

여기에는 두 가지 문제가 있습니다.

1) 내 홈 폴더의 모든 디렉토리가 아니라 현재 작업 디렉토리에 포함된 디렉토리만 나열합니다.

2) 이것이 내 쉘의 버그인지는 모르겠지만 이 명령을 사용한 후에 내 쉘 프롬프트가 새 디렉토리로 즉시 업데이트되지 않습니다. 대신 업데이트하기 전에 명령(빈 디렉토리라도)을 실행해야 합니다. 짜증난다.

도움을 주시면 감사하겠습니다.

답변1

fdcd() {
  local dir
  dir=$(
    cd &&
      fd -0 --type d --ignore-file ~/.config/fd/ignore --hidden |
      fzf --read0
  ) && cd ~/$dir
}

reset-prompt프롬프트가 자동으로 업데이트되지 않는 이유는 줄 편집기에 들어간 후에나 zle 위젯이 명시적으로 다시 그리기( / clear-screen위젯) 를 요청하거나 무효화 후 반환될 때만 프롬프트가 다시 계산되고 다시 그려진다는 점에 유의하세요 . display( zle -I) 또는 쉘이 일부 비동기 이벤트를 처리할 때.

따라서 fdcd함수를 사용자 정의 위젯이나 사용자 정의 위젯의 일부로 호출하려는 경우 zle디렉터리 변경 사항을 프롬프트에 반영하려면 프롬프트를 다시 계산하도록 요청해야 합니다.

fdcd() {
  local dir
  dir=$(
    cd &&
      fd ${NUMERIC:+-d$NUMERIC} -0 --type d \
        --ignore-file ~/.config/fd/ignore --hidden |
      fzf --read0
  ) && cd ~/$dir || return
  if zle; then
    # allow fdcd to run inside and outside zle
    zle reset-prompt
  fi
}
zle -N fdcd
bindkey '\es' fdcd

$NUMERIC여기에서는 검색 깊이를 제한 하기 위해 매개변수도 사용됩니다 . 예를 들어 검색을 깊이 2로 제한하려면 Alt++를 입력할 수 있습니다.2 AltS

관련 정보