我正在寻找文件中与二维模式匹配的行。
例如,给定以下输入文件:
aaaba
aabaa
aaaba
aaaaa
aaaaa
我想使用类似的模式
ab
ba
ab
匹配前 3 行。理想情况下,我希望能够用该模式进行替换,例如,将其替换为
ba
ab
ba
答案1
这不能仅通过正则表达式来实现。你需要一个像捕获组,而是捕获列,然后捕获相应的原子以供调用。对于您的示例,您能做的最好的事情就是在后续行上匹配每一行
/ab\ze.*\n.*ba.*\n.*ab/
这样,不仅匹配与块的行本身匹配的行,而且匹配包含块文本的所有出现,尽管不只是具有相同的垂直对齐方式,并且仅突出显示第一行的匹配项。我的搜索突出显示插件也提供此功能(映射到{Visual}*
)。
如果这还不够(您可以使用标志/c
来:substitute
手动验证和确认每个匹配),您必须构建自己的搜索(和替代)基础设施,即/
、n
/N
和的等价物:s
,并在 Vimscript 中对块对齐进行额外的断言。