当我:Files
在 fzf.vim 中使用时,它会搜索当前目录和子目录中的文件。当前工作目录是固定的。在下面的屏幕截图中,它是浅蓝色的。有没有办法动态更改运行 FZF 的工作目录?例如,如果我只是删除“Documents”路径,那么 FZF 从 ~ 而不是 ~/Documents 开始。
这样的功能在 Emacs helm 包中是可能的,它通过 helm-execute-persistent-action 来实现。
当我:Files
在 fzf.vim 中使用时,它会搜索当前目录和子目录中的文件。当前工作目录是固定的。在下面的屏幕截图中,它是浅蓝色的。有没有办法动态更改运行 FZF 的工作目录?例如,如果我只是删除“Documents”路径,那么 FZF 从 ~ 而不是 ~/Documents 开始。
这样的功能在 Emacs helm 包中是可能的,它通过 helm-execute-persistent-action 来实现。
: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
用于编辑主窗口。
这不可能。同时,作者提出了一种解决方法。看看这里:
如果您了解 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