Vim 在缓冲区中搜索并显示';上下文';线

Vim 在缓冲区中搜索并显示';上下文';线,vim,Vim,copen给出了缓冲区中所有[搜索文本]的一个很好的列表。 有没有办法在结果中包含每一行之前和之后的匹配行?我正在寻找折叠来实现这一点,但还没有弄清楚,但 为了显示在quickfix窗口中,:vimgrep也需要匹配上下文行。将“上面和下面的匹配”构建到搜索正则表达式中会很困难,而且仍然没有折叠 如果使用:grep而不是:vimgrep,则可以指定上下文(-C NUM),但该上下文也不会自动折叠 另一种选择是对快速修复结果进行后处理(通过:autocmd QuickFixCmdPost),但获取

copen给出了缓冲区中所有[搜索文本]的一个很好的列表。

有没有办法在结果中包含每一行之前和之后的匹配行?我正在寻找折叠来实现这一点,但还没有弄清楚,但

为了显示在quickfix窗口中,
:vimgrep
也需要匹配上下文行。将“上面和下面的匹配”构建到搜索正则表达式中会很困难,而且仍然没有折叠

如果使用
:grep
而不是
:vimgrep
,则可以指定上下文(
-C NUM
),但该上下文也不会自动折叠

另一种选择是对快速修复结果进行后处理(通过
:autocmd QuickFixCmdPost
),但获取和折叠这些行并不是件小事


到目前为止,我看到的最接近的解决方案是Vim Tips Wiki页面上描述的折叠表达式。这仅适用于当前缓冲区,但它可以快速设置并启用(一级或两级)上下文折叠。

这里有一些类似的东西::g/[search text]/-1,+1nu将显示[search text]上方和下方的上下文以及该行的行号。之后可以使用:lnum快速跳转到那里,其中lnum是行号。一般来说,我不会这样做-我只需在快速修复列表上按enter键即可跳转并查看结果。

插件可以折叠缓冲区,只保留与搜索模式匹配的区域

一般来说,它非常灵活,能够以各种方式折叠东西。您的特定用例的工作方式如下:

:vimgrep [search text] %  
:折叠匹配
比如说,

:FoldNonMatching <pattern> <number-of-context-lines>
:FoldNonMatching\3

请务必阅读文档以了解插件所能提供的所有功能。

您为什么要这样做?也许有更好的方法。谢谢,wiki页面上的第一个示例就可以做到这一点(在修改foldlevel之后)。
:FoldNonMatching \<function\> 3