我正在尝试为vim制作angularjs语法高亮文件。该文件的一部分是:
syn match ngMethods /\.[0-9A-Za-z_\-\$]\+\s*\((\|=\)/ contains=AngularMethods
syn keyword AngularMethods contained $addControl $anchorScroll $animate ...
syn match ngObjMethods /^\s*[0-9A-Za-z_\-\$]\+\s*:/ contains=AngularObjectMethods
syn keyword AngularObjectMethods contained compile controller link ...
等...
下面我有:
hi def link AngularMethods Function
hi def link AngularObjectMethods Function
第一个正则表达式(对于AngularMethods
)应该捕获如下$addControl
之类的内容:
myelement.$addControl()
myelement.$addControl = function ()
第二个正则表达式(AngularObjectMethods
)捕获compile
之类的内容:
compile : function () {}
AngularMethods
一个不起作用,但后一个起作用。有谁能看到这个问题?我也试过使用正则表达式:
/\.\zs[0-9A-Za-z_\-\$]\+\ze\s*\((\|=\)/
/\.[0-9A-Za-z_\-\$]\+\s*\((\|=\)\@=/
前者匹配确切的单词。后者是我在另一个语法文件中看到的。有任何想法吗?谢谢你的帮助!
修改
Kent(下面)关于该关键字是正确的。这揭示了真正的问题,即我有另一个正则表达式:
syn match ngProperties /\.[0-9A-Za-z_\-\$]\+\s*[^(=]/ contains=AngularProperties
syn keyword AngularProperties contained $attr $dirty $error ...
应该是ngMethods正则表达式的补充。如果我注释掉ngProperties
正则表达式,那么ngMethods
正则表达式就可以了。这意味着ngProperties
很糟糕。它应该包含$attr
之类的内容:
var myAttribute = element.$attr;
我会尽力解决这个问题。有人可以发布正确的正则表达式以防万一吗?
答案 0 :(得分:2)
正则表达式不是您的语法问题。
极有可能问题的原因是,iskeyword
选项没有美元($
)符号。
你可以测试的是:
$
移除contained $addControl $anchorScrol
,看看它是否有用或
set iskeyword+=$
,看它是否有效。