cd
저는 홈 폴더의 어떤 디렉터리 로든 빠르게 이동하는 쉘 함수를 사용하고 프로그래밍하려고 합니다 .fd
fzf
이것이 내가 지금까지 가지고 있는 것입니다
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