我打开了许多缓冲区,需要一种简单的方法来搜索所有缓冲区中的正则表达式,并导航到搜索结果(快速列表?)
我知道可以使用:bufdo
命令,在其中使用%s
进行查找和替换,但我找不到一种只做简单搜索然后浏览结果的方法。
我找到了一些插件(例如buffergrep),但如果这个简单的任务不是通过vim技巧本身支持的话,我会感到惊讶.. 它支持吗?
from :help grepadd
:grepa[dd][!] [arguments]
Just like ":grep", but instead of making a new list of
errors the matches are appended to the current list.
Example:
:call setqflist([])
:bufdo grepadd! something %
The first command makes a new error list which is
empty. The second command executes "grepadd" for each
listed buffer. Note the use of ! to avoid that
":grepadd" jumps to the first error, which is not
allowed with |:bufdo|.
An example that uses the argument list and avoids
errors for files without matches:
:silent argdo try
\ | grepadd! something %
\ | catch /E480:/
\ | endtry"
:grep
& 其他命令 将填充快速修复缓冲区,从而可以快速导航结果。
:call setqflist([]) | bufdo grepadd! something %
,需要进行一些额外的工作来处理更多情况。 - ephemientvimgrep
而不是 grep
是更好的解决方案。 - Bohr我找到了一些插件(例如buffergrep),但是如果vim没有本地支持这个简单任务,我会感到惊讶... 是吗?
据我所知,没有。而存在多个试图提供此功能的插件也证实了这一点...
你尝试过哪些插件,它们缺少了什么?
http://www.vim.org/scripts/script.php?script_id=2545
http://www.vim.org/scripts/script.php?script_id=2255
另外,为了确保你知道vimgrep,它是一个内部命令,可以将文件加载到缓冲区并对缓冲区进行搜索,在quickfix窗口中显示结果。我没有确认过,但我认为如果一个被搜索的文件已经在缓冲区中打开了,Vimgrep不会重新加载它,至少不会重新加载具有“nomodified”标志的文件。如果是这样,使用Vimgrep进行快速简便的缓冲区搜索的一种方法就是使用从:buffers命令输出的文件列表来创建Vimgrep。