vim + fzf.vim - 在 :Files 中指定项目根目录

vim + fzf.vim - specify project root in :Files

我的问题是关于 vim-projectroot with fzf.vim

的用法

我有一个键映射,可以像这样在项目根目录下打开 :Files

nnoremap <leader>t :ProjectRootExe Files<CR>

但问题是它正在干扰 set autochdir。除非我强制使用 :e/:sp/:vsp 的新会话,否则当前目录与 先前的 目录保持相同。

所以我想像这样将目录作为第二个参数传递给 :Files path

function Guess()
  return projectroot#guess()
endfunction

nnoremap <leader>t :Files Guess()<CR>

但是由于显而易见的原因,我无法弄清楚我无法使用该用法。我如何在 vim 映射中指定它应该将命令与函数的输出结合起来?

我想要的是:Files output_of_Guess()被调用。

Vim的求值规则与大多数编程语言不同。您需要使用 :execute 来评估变量(或表达式);否则,它是从字面上理解的;即 Vim 使用函数名称本身作为参数。

nnoremap <leader>t :execute 'Files ' . Guess()<CR>

映射的替代方法是使用 :help :map-expr;这基本上是 :execute 内置于 :map:

的变体中
nnoremap <expr> <leader>t ':Files ' . Guess() . "\<lt>CR>"