在所有VI缓冲区中查找/Grep

10

我打开了许多缓冲区,需要一种简单的方法来搜索所有缓冲区中的正则表达式,并导航到搜索结果(快速列表?)

我知道可以使用:bufdo命令,在其中使用%s进行查找和替换,但我找不到一种只做简单搜索然后浏览结果的方法。

我找到了一些插件(例如buffergrep),但如果这个简单的任务不是通过vim技巧本身支持的话,我会感到惊讶.. 它支持吗?


可能是如何在Vim中搜索打开的缓冲区?的重复问题。 - Ciro Santilli OurBigBook.com
3个回答

4

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"

4

2
你能用它在缓冲区而不是文件中进行grep吗? - Samer Buna
3
文档建议使用 :call setqflist([]) | bufdo grepadd! something %,需要进行一些额外的工作来处理更多情况。 - ephemient
grepadd! 似乎可以解决问题。文档不够清晰,无法将其映射到所需的行为或回答诸如(语法元素是什么?和/或我可以使用除“%”之外的其他内容吗?)的问题。但在所有情况下,我现在有了一种实现我想要的方法,为此我感谢您! - Samer Buna
对于已经加载的缓冲区,使用 vimgrep 而不是 grep 是更好的解决方案。 - Bohr

2

我找到了一些插件(例如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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接