我很长一段时间是Vimmer。但是,我一直切换到shell进行搜索。这避免了我使用quickfix功能。
切换到shell的主要原因是当我在Vim内部使用grep(使用:grep
)时,我无法跟进进度。
因为我搜索的代码库通常很宽,所以我非常感谢您的反馈。
它让我有机会在显示完整结果之前发现我的搜索表达式错误。
这允许我取消搜索,优化表达式,然后重新启动搜索。
任何提示如何在Vim内重现这种模式都将不胜感激。
答案 0 :(得分:1)
您是否熟悉ack.vim?它不使用quickfix窗口,但在拆分中使用单独的缓冲区。然而,它更快的结果回到了vim框架。
答案 1 :(得分:1)
我没有看到与你相同的vim行为。当我运行:grep
时,我仍然会在搜索完成之前在vim中查看结果(不在quickfix中)(但在搜索完成之前我无法执行任何操作)。
我甚至尝试过不使用vim设置或插件:
gvim -u NONE -U NONE
如果那不是您的行为,请检查您的grepprg
。我的默认是:
:verbose set grepprg
grepprg=grep -n $* /dev/null
当我使用run grep -e "score" -R /etc
时,我在vim中看到了这个输出:
:!grep -n -e "score" -R /etc /dev/null 2>&1| tee /tmp/voLcaNS/232
您的系统可能缺少tee
或者您的vim不使用它(我在Ubuntu 10.10上使用的是Vim 7.2)。 tee
获取传递给它的文本并将其写入文件和stdout。
如果您正在寻找一种方法让quickfix更新您的搜索结果并让您在搜索时不阻止vim,那么您可以编写一个脚本:
cgetfile
)中的文件(你可以告诉vim用--remote-expr
从另一个进程做一些事情)您可以尝试我的AsyncCommand plugin来启动您的代码。它执行上述操作,但它仅在搜索完成时加载文件。
答案 2 :(得分:0)
在在线文档中查看:vimgrep
。它显示正在搜索的文件名并随时更新。
答案 3 :(得分:0)
这可能是由于grep
和tee
之间的缓冲,而不是vim本身。要测试此理论,请从命令行运行grep并通过tee管道输出(即grep <pattern> <files> | tee temp.out
)。如果它与你在vim中观察到的行为相同,那么就会发生缓冲。
要解决此问题,请在Ubuntu 10.10上安装expect(sudo apt-get install expect-dev
),并将grepprg安装到unbuffer grep -n $* /dev/null
。 (见Turn off buffering in pipe)。
答案 4 :(得分:0)
有三种方法可以在整个项目中进行搜索。
系统命令grep(快速,但与Ouickfix列表不兼容)
=>$ grep -n Example *
Vim内部grep(缓慢,但有强大的模式支持)
:vim[grep] /{pattern}/[g][j] {file} ...
系统插件确认(完美)
1安装确认
brew install ack
2将以下配置添加到.vimrc
:set grepprg=ack\ --nongroup\ --column\ $*
:set grepformat=%f:%l:%c:%m
3然后您可以使用grep在vim中调用ack,如
:grep "object\." app/**/*.rb