如何在 vim 中执行二维搜索?

如何在 vim 中执行二维搜索?

我正在寻找文件中与二维模式匹配的行。

例如,给定以下输入文件:

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 中对块对齐进行额外的断言。

相关内容