【发布时间】:2012-08-27 17:19:39
【问题描述】:
在 .vimrc 中定义以下内容或在 vim 命令行中执行:
syn match ndbMethods "[^. \t\n\r]\@<=[_a-z][_a-zA-Z0-9]*(\@="
hi ndbMethods guibg=#222222
在活动缓冲区中使用 C 风格的方法调用查看结果:
foo();
你会看到方法名的首字母不匹配。
其目的是让后向模式强制在任何匹配方法的第一个字符之前使用行首、文字 . 或空格。
奇怪的是,将其设为负前瞻 (\@<!) 似乎可行!
有人能解释一下为什么这个lookbehind是不正确的吗?
【问题讨论】:
-
vim 中有一个相当奇怪的特性:
[^\n]将匹配任何字符包括换行符。[\n]在集合内总是 为匹配添加换行符,无论您是否在开头有^。为避免混淆,请始终使用与[\n]等效的\_[]变体。
标签: regex vim syntax match lookbehind