我希望VIM正则表达式可以选择性地查找单词对。它们可以用其他词分开,但它们都必须在同一条线上。 例如,如果我想匹配打开和关闭,那么这些应匹配:
open foo close
open close
foo
并且这些不匹配:
open foo
open
foo close
close
我尝试使用lookahead和lookbehind匹配单词,但我似乎无法找到合适的组合。
我知道如何为单个角色做这件事,但言语让我完全迷失了。
这是一次尝试:
s/\(\(open\)\@=.*\(close\)\@=\)*
对于同样的事情,但使用'a'和'c'而不是'open'和'close',我可以这样做:
s/^\(a[^ac]*c\|[^ac]\)*$
这将选择所有这些行(和一个空行):
acabcacabbbbcbbb
ac
abc
b
但不会选择
acbbc
ab
bc
a
c
这是我正在寻找的功能,但有文字。
非常感谢任何帮助。
谢谢! Nachum
编辑: 我正在编写一个缩进脚本,这会有所帮助。相反,我最终搜索并将单词转换为单个字母。然后我使用了我已经熟悉的方法来匹配单个字符。至少它会在第一次转换完成后缩短代码。
答案 0 :(得分:2)
只需搜索:
open.*close
答案 1 :(得分:0)
我相信这就是你要找的东西。
^((?!.*open|.*close).*|.*open.*close.*)$
分解为:
(?!.*open|.*close).*
- 除开启或关闭之外的任何内容
或
.*open.*close.*
- 包括开放和关闭的内容
我对vim并不熟悉,但是根据你所展示的内容,我认为你看起来就像是能够转换语法。