4

在 .vimrc 中定义以下内容或在 vim 命令行中执行:

syn match ndbMethods "[^. \t\n\r]\@<=[_a-z][_a-zA-Z0-9]*(\@="
hi ndbMethods guibg=#222222

在活动缓冲区中使用 C 风格的方法调用查看结果:

foo();

你会看到方法名的首字母不匹配。

其目的是让后向模式强制将行首、文字.或空格放在任何匹配方法的第一个字符之前。

奇怪的是,将其设为负前瞻 ( \@<!) 似乎可行!

有人会好心解释为什么这种向后看是不正确的吗?

4

1 回答 1

10

更新:f,向后看,您可能想要检查[. \t\n\r],而不是[^. \t\n\r]。因为目前,您说的是“符合这些字符之一的东西”,所以只有达到条件才o满足条件,因为f确实不是这些字符之一。因此,您必须取消否定字符类,或者如您所见,否定后视。

我想你也把你的术语弄糊涂了。

\@<=    positive lookbehind
\@<!    negative lookbehind
\@=     positive lookahead
\@!     negative lookahead
于 2012-08-27T17:27:02.080 回答