我想在自定义目录上运行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'})
注意:我没有使用这个插件,所以没有测试。