Shell

使用 fd 列出主文件夾中的所有目錄

  • February 11, 2020

我正在嘗試使用and程序編寫一個 shell 函式以快速cd進入我的主文件夾中的任何目錄。fd``fzf

這是我到目前為止所擁有的

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

這有兩個問題:

1)它只列出了我目前工作目錄中包含的目錄,而不是我的主文件夾中的每個目錄;

  1. idk 如果這是我的 shell 的錯,但是在我使用此命令後,我的 shell 提示符不會立即更新到新目錄,而是我必須先發出一個命令(甚至是空白命令)才能更新它,即惱人的。

任何幫助表示讚賞。

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

至於為什麼您的提示沒有自動更新,請注意,只有在您進入行編輯器或當 zle 小元件明確要求重繪(reset-prompt/clear-screen小元件)或在無效後返回時,才會重新計算和重新繪製提示顯示 ( zle -I) 或當 shell 處理一些非同步事件時。

因此,如果該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參數來限制搜尋的深度,因此您鍵入Alt++例如將搜尋限制為深度 2 2 AltS

引用自:https://unix.stackexchange.com/questions/565750