:vimgrep [search text] %
字符串和copen给予缓冲区中所有[搜索文本]的列表。有没有一种方法可以在结果中包括每一行之前和之后的行,有一个匹配?我在寻找折叠来实现这一点,但还没有弄清楚,但.
h9a6wy2h1#
这里有一些类似的东西::g/[search text]/-1,+1nu,它将显示[search text]上下的上下文,沿着显示该行的行号。你可以使用:lnum快速跳转到那里,其中lnum是行号。一般来说,我不会这样做-我只会在quickfix列表上按回车键跳转并查看结果。
9vw9lbht2#
为了出现在quickfix窗口中,:vimgrep也需要匹配上下文行,在搜索正则表达式中建立“上下匹配”是很困难的,而且你仍然没有折叠。如果使用:grep而不是:vimgrep,可以指定上下文(-C NUM),但这也不会自动折叠。另一个选择是对quickfix结果进行后处理(通过:autocmd QuickFixCmdPost),但是获取和折叠这些行并不是小事。到目前为止,我看到的最接近的解决方案是Folding with Regular Expression Vim Tips Wiki页面上描述的fold表达式。这仅适用于当前缓冲区,但它可以快速设置并启用(一级或二级)上下文折叠。
:vimgrep
:grep
-C NUM
:autocmd QuickFixCmdPost
b4lqfgs43#
foldutil插件可以折叠缓冲区,只留下与搜索模式匹配的区域展开。一般来说,它非常灵活,能够以各种方式折叠东西。您的特定用例将像这样工作:
:FoldNonMatching <pattern> <number-of-context-lines>
字符串比如说,
:FoldNonMatching \<function\> 3
型请务必阅读文档以了解插件可以提供的所有功能。
pb3skfrl4#
要在单独的窗口中显示搜索和上下文,您可以执行以下操作:
:grep -C 1 MYSEARCH % # search with 1 line of context :cw # open the quickfix window
字符串如果你不想看到:grep打开的第一个窗口,你可以使用:silent grep [...]。你不会有折叠,但否则它会做的工作!
:silent grep [...]
7jmck4yq5#
不需要外部grep,你可以用:cdo和:nu[mber]或:p[rint]打印两行上下文,如下所示:
:cdo
:nu[mber]
:p[rint]
:vimgrep "search pattern" %|cdo -2,+2print
字符串如果结果位于文件的开头或结尾,您将看到E16: Invalid range: -2,+2print . To ignore invalid lines and print whatever's available:
E16: Invalid range: -2,+2print
:vimgrep "search pattern" *|cdo execute max([1, (line('.') - 2)]) . ',' . min([line('$'), (line('.') + 2)]) 'print'
型
:set conceallevel=2 concealcursor=nc
vimgrep多行匹配很简单,
vimgrep
.*
\n
()?
对于转义,完整的命令是:
:vimgrep "\(.*\n\)\?.*search pattern.*\(\n.*\)\?" *
型但是the quickfix list will not display multi-line entries,这是个死胡同。
5条答案
按热度按时间h9a6wy2h1#
这里有一些类似的东西::g/[search text]/-1,+1nu,它将显示[search text]上下的上下文,沿着显示该行的行号。你可以使用:lnum快速跳转到那里,其中lnum是行号。一般来说,我不会这样做-我只会在quickfix列表上按回车键跳转并查看结果。
9vw9lbht2#
为了出现在quickfix窗口中,
:vimgrep
也需要匹配上下文行,在搜索正则表达式中建立“上下匹配”是很困难的,而且你仍然没有折叠。如果使用
:grep
而不是:vimgrep
,可以指定上下文(-C NUM
),但这也不会自动折叠。另一个选择是对quickfix结果进行后处理(通过
:autocmd QuickFixCmdPost
),但是获取和折叠这些行并不是小事。到目前为止,我看到的最接近的解决方案是Folding with Regular Expression Vim Tips Wiki页面上描述的fold表达式。这仅适用于当前缓冲区,但它可以快速设置并启用(一级或二级)上下文折叠。
b4lqfgs43#
foldutil插件可以折叠缓冲区,只留下与搜索模式匹配的区域展开。
一般来说,它非常灵活,能够以各种方式折叠东西。您的特定用例将像这样工作:
字符串
比如说,
型
请务必阅读文档以了解插件可以提供的所有功能。
pb3skfrl4#
要在单独的窗口中显示搜索和上下文,您可以执行以下操作:
字符串
如果你不想看到
:grep
打开的第一个窗口,你可以使用:silent grep [...]
。你不会有折叠,但否则它会做的工作!
7jmck4yq5#
不需要外部grep,你可以用
:cdo
和:nu[mber]
或:p[rint]
打印两行上下文,如下所示:字符串
如果结果位于文件的开头或结尾,您将看到
E16: Invalid range: -2,+2print
. To ignore invalid lines and print whatever's available:型
附加参考信息
:set conceallevel=2 concealcursor=nc
How to format Vim quickfix entries?Vimgrep多行匹配
vimgrep
多行匹配很简单,.*
拾取整条线\n
用于换行符()?
使换行符可选,以防它位于文件的开头或结尾。对于转义,完整的命令是:
型
但是the quickfix list will not display multi-line entries,这是个死胡同。