使用 fd 列出主文件夹中的所有目录

使用 fd 列出主文件夹中的所有目录

我正在尝试使用和程序编写一个 shell 函数来快速cd进入我的主文件夹中的任何目录。fdfzf

这就是我到目前为止所拥有的

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

这有两个问题:

1)它只列出我当前工作目录中包含的目录,而不是我的主文件夹中的每个目录;

2)idk如果这是我的shell的错误,但是在我使用此命令后,我的shell提示符不会立即更新到新目录,而是我必须先发出一个命令(即使是空白命令)才能更新,这是恼人的。

任何帮助表示赞赏。

答案1

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

至于为什么提示没有自动更新,请注意,只有在进入行编辑器后,或者当 zle 小部件明确要求重绘(reset-prompt/ clear-screenwidgets)或在无效后返回时,才会重新计算和重新绘制提示。 display( 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 Alt+S例如将搜索限制为深度 2。

相关内容