Define the following in .vimrc or execute within vim command line:
syn match ndbMethods "[^. \t\n\r]\@<=[_a-z][_a-zA-Z0-9]*(\@="
hi ndbMethods guibg=#222222
View results with a C-style method call in the active buffer:
foo();
You will see the initial character of the method name is not matched.
The intention is for the lookbehind pattern to force a beginning of line, literal .
or whitespace to precede any matched method's first character.
Oddly enough, making this a negative lookahead (\@<!
) seems to work!
Would someone be kind enough to explain why this lookbehind is incorrect?
Updated: At f
, looking behind, you probably want to check for [. \t\n\r]
, not [^. \t\n\r]
. Because currently, you're saying "something that doesn't follow one of these characters", so only upon reaching the o
is that condition met, since f
is indeed not one of those characters. So you have to either un-negate the character class, or as you discovered, negate the lookbehind.
I think you're getting your terms confused, too.
\@<= positive lookbehind
\@<! negative lookbehind
\@= positive lookahead
\@! negative lookahead
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With