:vimgrep [search text] %
and copen提供了一个清晰的列表,显示缓冲区中所有的[搜索文本]。
有没有一种方法可以在结果中包括每个匹配行之前和之后的行?我正在研究使用折叠来实现这一点,但还没有想出来...
:vimgrep [search text] %
and copen提供了一个清晰的列表,显示缓冲区中所有的[搜索文本]。
有没有一种方法可以在结果中包括每个匹配行之前和之后的行?我正在研究使用折叠来实现这一点,但还没有想出来...
可以发现
:nu[mber]与
:print`相同,但会在每行前加上行号。 - undefined:vimgrep
也需要匹配上下文行。将“匹配上下文”的功能嵌入搜索正则表达式中会很困难,而且仍然无法折叠。:grep
而不是 :vimgrep
,则可以指定上下文(-C NUM
),但这样做不会自动折叠。:autocmd QuickFixCmdPost
后处理快速修复结果,但获取和折叠这些行并不简单。foldutil插件可以折叠缓冲区,只留下与搜索模式匹配的区域展开。
通常情况下,它非常灵活,能够以各种方式折叠内容。您特定的使用情况将按照以下方式进行:
:FoldNonMatching <pattern> <number-of-context-lines>
:FoldNonMatching \<function\> 3
请务必阅读文档,以了解插件所能提供的全部功能。
如果您想在单独的窗口中显示带有上下文的搜索结果,可以执行以下操作:
:grep -C 1 MYSEARCH % # search with 1 line of context
:cw # open the quickfix window
如果您不想看到由:grep
打开的第一个窗口,可以使用:silent grep [...]
。
您将没有折叠,但除此之外它会完成工作!
:cdo
和:nu[mber]
或:p[rint]
来打印两行上下文,就像这样::vimgrep "search pattern" %|cdo -2,+2print
E16: 无效范围:-2,+2print
。要忽略无效行并打印可用内容:。:vimgrep "search pattern" *|cdo execute max([1, (line('.') - 2)]) . ',' . min([line('$'), (line('.') + 2)]) 'print'
:set conceallevel=2 concealcursor=nc
隐藏文件名。How to format Vim quickfix entries?
vimgrep
多行匹配非常简单
.*
匹配整行\n
匹配换行符()?
使换行符可选,以防它位于文件的开头或结尾。转义后的完整命令如下:
:vimgrep "\(.*\n\)\?.*search pattern.*\(\n.*\)\?" *