vim零宽断言
a\zsbc 表示查找前面有字符a的字符串bc
ab\zec 表示查找字符串ab,ab后面有字符c
查找bc 但是有条件\zs,a在bc的前面,查找ab也有条件\ze,c在ab的后面
举例: 看看下面的字符串,就能找到符合条件的字符串.
abc bcd abd abcd
可惜正则表达式\zs,\ze 只是存在匹配,vim中相当于\@<=,\@=, 不存在匹配只能用\@<!,\@! 了.
扩展
\@= 正向,零宽在后断言-存在 foo\(bar\)\@= 等价于 foo\ze\(bar\)
\@<= 正向,零宽在前断言-存在 \(foo\)\@<=bar 等价于 \(foo\)\zsbar
下面取反就不能用\zs,\ze了, 只能用\@<!, \@!
\@! 负向,零宽在后断言-排除 foo\(bar\)\@! 查找foo, 后面不能有bar
\@<! 负向,零宽在前断言-排除 \(foo\)\@<!bar 查找bar, 前面不能有foo
foobar
foo bar
有用的例子:查找等号但不查找双等号
= == ===
当我们看代码时, 有时候对一个变量有多次引用, 我们想区分那些是赋值(=), 哪些是判断(==)
这就需要查找等号但不查找双等号. 高亮也是一样
查找=号, 但不查找==.
vim 高亮语法是: /=\@<!==\@!
/ :查找
=\@<! :前面不匹配=
= :查=
=\@! :后面不匹配=