0

我通常在多位置项目中工作,其中源文件分布在不同的服务器、数据库等之间。我通常所做的是将这些位置添加到 vim 的路径中,例如,我可以将“gf”添加到这些文件中。

当使用 ":vimgrep" 触发搜索以查找字符串时,是否可以以某种方式指定搜索不是在当前位置执行,而是在路径指定的所有级别执行?

我目前唯一的选择是

a) 创建一个包含指向不同源代码的符号链接的文件夹,然后从那里启动 vim

b) 在模式表达式之后手动将位置添加到 vimgrep 命令

4

1 回答 1

0

您可以实现类似searchsavvy 的 ListGrep 之类的东西,但不是在 each 上执行vimgrepadd ,而是a:list在路径中的每个元素上递归地执行它。大致是这样的:

...
call setqflist([])
for path in split(&path, ",")
    " Recursively (**) grep each path and add it to quickfix.
    exec 'silent! vimgrepadd/' . a:query . '/gj '. path .'/**'
endfor

或者,您可以使用该:grep命令(对于大树可能更快,但需要为带有空格的路径工作):

function! GrepInPath(query)
    exec ':grep '. a:query .' -R '. join(split(&path, ","), " ")
endf

(未经测试。)


如果我是你,我会在每次同步时生成所有文件的列表。您可以使用 csearch 并使用notgrep,它可以与Unite 的 file_list source一起使用。

于 2018-06-22T17:52:57.510 回答