有没有办法配置Vim grepprg选项,以避免等到外部工具完成搜索?

God*_*lle 9 vim grep

我很长一段时间都是Vimmer.但是,我一直切换到shell进行搜索.这避免了我使用quickfix功能.

切换到shell的主要原因是当我在Vim(with :grep)中使用grep时,我无法跟进进度.

因为我搜索的代码库通常很宽,所以我非常感谢您的反馈.

它让我有机会在显示完整结果之前发现我的搜索表达式是错误的.

这允许我取消搜索,优化表达式然后重新启动搜索.

任何提示如何在Vim内重现这种模式将不胜感激.

idb*_*rii 1

我没有看到与你相同的 vim 行为。当我运行 时:grep,在搜索完成之前我仍然会在 vim 中看到结果(而不是在快速修复中)(但在搜索完成之前我无法执行任何操作)。

我什至尝试不使用 vim 设置或插件:

gvim -u NONE -U NONE
Run Code Online (Sandbox Code Playgroud)

如果这不是您的行为,请检查您的grepprg. 我的是默认的:

:verbose set grepprg
grepprg=grep -n $* /dev/null
Run Code Online (Sandbox Code Playgroud)

当我使用 run 时,grep -e "score" -R /etc我在 vim 中看到以下输出:

:!grep -n -e "score" -R /etc /dev/null 2>&1| tee /tmp/voLcaNS/232
Run Code Online (Sandbox Code Playgroud)

可能是你的系统丢失tee或者你的 vim 不使用它(我在 Ubuntu 10.10 上使用 Vim 7.2)。tee获取传递给它的文本并将其写入文件和标准输出。


如果您正在寻找一种方法来让快速修复程序随您的搜索结果进行更新,并且让 vim 在您搜索时不会阻塞,那么您可以编写一个脚本:

  • 使用 grep 作为后台进程进行搜索并重定向到文件
  • 每隔一秒,直到 grep 完成,让 vim 在quickfix ( ) 中加载文件cgetfile(你可以使用 告诉 vim 从另一个进程执行某些操作--remote-expr

您可以尝试我的AsyncCommand 插件来启动您的代码。它执行上述操作,只不过它仅在搜索完成时加载文件。