我想要一个 VIM 正则表达式来选择性地查找成对的单词。它们可以用其他词分隔,但它们必须在同一行。例如,如果我想匹配 open 和 close 那么这些应该匹配:
open foo close
open close
foo
这些不应该匹配:
open foo
open
foo close
close
我曾尝试使用前瞻和后瞻来匹配单词,但我似乎无法找到正确的组合。
我知道如何为单个字符执行此操作,但文字让我完全迷失了方向。
这是一个尝试:
s/\(\(open\)\@=.*\(close\)\@=\)*
对于同样的事情,但使用 'a' 和 'c' 而不是 'open' 和 'close' 我可以这样做:
s/^\(a[^ac]*c\|[^ac]\)*$
这将选择所有这些行(和一个空行):
acabcacabbbbcbbb
ac
abc
b
但不会选择
acbbc
ab
bc
a
c
这是我正在寻找的功能,但有文字。
任何帮助将不胜感激。
谢谢!纳楚姆
编辑:我正在编写一个缩进脚本,这会有所帮助。相反,我最终搜索并将单词转换为单个字母。然后我使用我已经熟悉的方法来匹配单个字符。至少它会在第一次转换完成后缩短代码。