当我在fzf.vim中使用:Files时,它会搜索当前目录和子目录中的文件。当前工作目录是固定的。在下面的屏幕截图中,它是浅蓝色的。有没有办法动态改变运行FZF的工作目录?例如,如果我只删除“文档”路径,那么FZF从~开始,而不是~/Documents。
这样的功能在Emacs helm包中是可能的,它允许通过helm-execute-persistent-action实现这一点。

发布于 2019-12-01 00:56:27
您可以使用:chdir或熟悉的:cd命令更改vim当前正在使用的工作目录。有关详细信息,请参阅:h cd。
如果你不想改变vim的工作目录,只想让fzf使用一个不同的目录,你可以使用一个定制的dir选项来运行fzf (:h fzf#run)。
这是我的~/.vimrc中的一个示例映射,用于打开/.vim目录中的文件:
nnoremap <leader>fv :call fzf#run({'options': '--reverse --prompt "VimFiles"', 'down': 20, 'dir': '~/.vim/', 'sink': 'e' })<CR>对于动态路径,您添加了一个将路径作为参数的命令,请确保将完成作为文件用于完成路径的制表符。有关文件完成的更多信息,请参阅此answer。
sink选项告诉在找到匹配项时要做什么/执行什么。e用于编辑主窗口。
发布于 2020-09-29 18:49:21
这是不可能的。同时,作者提出了一种变通方法。看看这里:
如果你理解了fzf到底是什么以及它是如何工作的(它是一个运行在Vim之外的通用的、上下文无关的文本过滤器),你就会意识到我们不能用fzf轻松地实现它。但是您可以尝试使用
--expect选项或reload绑定。我认为这是我们目前所能做的最好的事情:
“在CTRL-P上重新加载源。需要fd命令。函数!Foo(dir)让tf = tempname()调用writefile(‘.,tf)调用fzf#vim#files(a:dir,{'source':' fd ','options':'--bind',printf(’ctrl-p:reload:base=“$(cat%s)”/..;echo "$base“> %s;fd.."$base"',外壳转义(Tf),外壳转义(Tf)}) endfunction命令!-nargs=* Foo调用Foo()
https://github.com/junegunn/fzf.vim/issues/338#issuecomment-623087034
https://stackoverflow.com/questions/59111740
复制相似问题