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>"
我的问题是关于 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>"