vim语法高亮:match,contains

时间:2013-09-03 00:50:11

标签: regex vim syntax-highlighting contains

我正在尝试为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;

我会尽力解决这个问题。有人可以发布正确的正则表达式以防万一吗?

1 个答案:

答案 0 :(得分:2)

正则表达式不是您的语法问题。

极有可能问题的原因是,iskeyword选项没有美元($)符号。

你可以测试的是:

  • $移除contained $addControl $anchorScrol,看看它是否有用

  • 执行:set iskeyword+=$,看它是否有效。