如何在vim中运行FZF在目录路径来自函数的目录中?

  • 本文关键字:函数 运行 FZF vim 路径 vim fzf
  • 更新时间 :
  • 英文 :


我想在自定义目录上运行fzf文件查找器(在vim中),但目录名称在运行时不同。

例如,vim是从项目目录的根目录启动的。子目录如下:

$ tree -ad
.
├── docs
├── .notes
│   ├── issue_a
│   └── new_feature
├── README
├── src
└── tests

每次创建分支时,我还在.notes/BRANCH_NAME中创建一个目录,用于存储注释、测试结果等。.notes目录本身被git忽略。

我想在.notes/BRANCH_NAME目录上运行FZF。分支名称将来自函数(例如使用https://github.com/itchyny/vim-gitbranch)。

我能够通过:FZF .notes.notes目录上运行fzf,但我不知道如何在.notes的分支目录上运行它。

谢谢!

编辑:添加了我尝试过的:

我尝试保存gitbranch#name()的输出到一个变量,然后用它来调用fzf#run(),但没有完全工作:

function! NotesDir()
let branch=gitbranch#name()
let ndir=".notes/" . branch
call fzf#run({'source': ndir})
endfunction
command! NotesDir call NotesDir()

当我在分支issue_a上运行:NotesDir时,我看到fzf窗口出现错误:

>   < [Command failed: .notes/issue_a]

.notes/issue_a表示ndir变量具有正确的notes目录路径,但我不知道如何将其传递给fzf。

查看fzf#run()的文档,看起来source可能是一个字符串,被解释为要执行的shell命令,或者是一个列表,按原样使用来填充插件的窗口。

所以你的错误是传递一个路径作为source,这被解释为一个外部命令,而不是一个外部命令或路径列表。

它还说你至少应该提供一个sink,但有些例子没有,所以YMMV。

如果我正确阅读了这一部分,下面的方法应该可以工作:

" with a string as external command
call fzf#run({'source': 'find ' .. ndir, 'sink': 'e'})
" with a list
let list = globpath('.', ndir, O, 1)
 ->map({ _, val -> val->fnamemodify(':.')})
call fzf#run({'source': list, 'sink': 'e'})

注意:我没有使用这个插件,所以没有测试。

最新更新