如何突出显示升华文本(textmate)中的PHP方法调用

如何突出显示升华文本(textmate)中的PHP方法调用,php,regex,syntax-highlighting,sublimetext3,textmate,Php,Regex,Syntax Highlighting,Sublimetext3,Textmate,我使用Sublime Text 3作为PHP编辑器,我一直在自定义PHP.tmLanguage文件以包含更多语法范围,现在我不知道如何捕获类方法调用 $html=新html(“hr”); $html->output_ml(“moo”); 输出\u ml当前声明为scopevariable.other.property.php 我想添加一个专门与类方法调用相关的作用域,但在tmLanguage文件中定义regex时遇到了问题 我试过了 <dict> <key>ma

我使用Sublime Text 3作为PHP编辑器,我一直在自定义PHP.tmLanguage文件以包含更多语法范围,现在我不知道如何捕获类方法调用

$html=新html(“hr”);
$html->output_ml(“moo”);
输出\u ml当前声明为scopevariable.other.property.php 我想添加一个专门与类方法调用相关的作用域,但在tmLanguage文件中定义regex时遇到了问题

我试过了

<dict>
    <key>match</key>
    <string>(?i)\$[a-z_][a-z0-9_]*-&gt;([a-z_][a-z_0-9]*)\s*\(</string>
    <key>name</key>
    <string>meta.method-call.php</string>
</dict>

比赛
(?i)\$[a-z\][a-z0-9\]*-([a-z\][a-z\[0-9]*)\s*\(
名称
meta.method-call.php

你非常接近,我只是调整了一些东西:

(?i:(?!\$[a-z_][a-z0-9_]*-&gt;)([a-z_][a-z_0-9]*)\s*\()
我做的第一件事是将整个表达式包装在“不区分大小写”中修饰符,所以没有遗漏任何东西。可能没有必要,但不管怎样。第二,更重要的是,我把你的第一组放在括号外,并使它们成为一个负前瞻。这样,它们匹配类名和箭头,但不报告它-基本上说“只要我们在前面,就要匹配前面的一切,但不要匹配我们。”

现在,您将拥有一个只与方法名称匹配的范围


现在,我不明白为什么你必须这么做。我维护a和a,所以我有很多在Sublime Text和TextMate中定义范围的经验。据我所知,PHP
.tmLanguage
已经包含函数调用的范围。我无论如何都不是PHP专家,但我知道基本知识,所以我举了三个例子不同的PHP函数调用:

绿色突出了多种语言的函数调用。在最前面的例子中, BZYQuux被限定为<代码>元函数调用.Obj.php < /C> >,在中间的例子中,它是“代码>元函数调用。static .php < /代码>,而在底部它只是代码>元函数调用。PHP<代码>。我不明白你在哪里。ing

variable.other.property.php
from

但是,如果我去掉上面函数调用后的括号:

我从上到下得到以下作用域:
variable.other.property.php
aha!)、
constant.other.class.php
、以及
constant.other.php
。如果我把paren放回原处,并在函数名的末尾添加一个或三个空格,它们仍然以绿色突出显示为函数


因此,虽然我们今天在正则表达式上玩得很开心,但最终你的工作已经完成了。如果你想做更多的范围搜索,我强烈推荐这个插件,正如它的名字所暗示的那样,它总是在底部栏中列出当前光标位置的完整范围(如果你愿意,可以通过命令面板将其关闭)。如果我收到将配色方案的突出显示扩展为新语言的请求,我只需打开尽可能多的代码,并用鼠标四处移动,查看不同的范围,然后根据需要编辑主题以更正颜色,或者为全新的范围添加新的颜色。我然后扫描
.tmLanguage
文件(之后)看看我是否遗漏了什么


祝你工作顺利!

那么到目前为止你都尝试了些什么呢?我编辑了这篇文章,将我尝试过的内容包括在内