12

当我:Files在 fzf.vim 中使用时,它会搜索当前目录和子目录中的文件。当前工作目录是固定的。在下面的屏幕截图中,它是浅蓝色的。有没有办法动态更改运行 FZF 的工作目录?例如,如果我只是删除“Documents”路径,那么 FZF 从 ~ 而不是 ~/Documents 开始。

这样的功能在 Emacs helm 包中是可能的,它通过 helm-execute-persistent-action 来实现。

在此处输入图像描述

4

2 回答 2

8

:chdir您可以使用或熟悉的:cd命令更改当前 vim 当前的工作目录。有关:h cd更多信息,请参阅。

如果您不想更改 vim 的工作目录而只想 fzf 使用不同的目录,您可以:h fzf#run使用自定义dir选项运行 fzf ( )。

~/.vimrc这是我在我的目录中打开文件的示例映射/.vim

nnoremap <leader>fv :call fzf#run({'options': '--reverse --prompt "VimFiles"', 'down': 20, 'dir': '~/.vim/', 'sink': 'e' })<CR>

对于动态路径,您添加一个将路径作为参数的命令,请确保使用完成作为文件来完成路径的制表符。有关文件完成的更多信息,请参阅此答案

sink选项告诉找到匹配项时要做什么/执行什么。并且e用于编辑主窗口。

于 2019-11-30T16:56:27.027 回答
0

这不可能。同时,作者提出了一种解决方法。看看这里:

如果您了解 fzf 到底是什么以及它是如何工作的(它是一个在 Vim 之外运行的通用的、上下文无关的文本过滤器),您就会意识到这不是我们可以用 fzf 轻松实现的东西。但是您可以尝试使用--expect选项或reload绑定。我认为这是我们目前能做的最好的:

" Reloading source on CTRL-P. Requires fd command.
function! Foo(dir)
  let tf = tempname()
  call writefile(['.'], tf)

  call fzf#vim#files(a:dir, {'source': 'fd', 'options': ['--bind', printf('ctrl-p:reload:base="$(cat %s)"/..; echo "$base" > %s; fd . "$base"', shellescape(tf), shellescape(tf))]})
endfunction

command! -nargs=* Foo call Foo(<q-args>)

https://github.com/junegunn/fzf.vim/issues/338#issuecomment-623087034

于 2020-09-29T10:49:21.307 回答