如何在Sublime Text(textmate)中突出显示PHP方法调用

时间:2014-09-16 14:19:01

标签: php regex syntax-highlighting sublimetext3 textmate

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

$html = new HTML("hr");
$html->output_ml("moo");

output_ml 目前被声明为范围 variable.other.property.php 我想添加一个专门用于类方法调用的范围,但是我在tmLanguage文件中定义正则表达式时遇到了问题。

我试过

<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>

1 个答案:

答案 0 :(得分:1)

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

(?i:(?!\$[a-z_][a-z0-9_]*-&gt;)([a-z_][a-z_0-9]*)\s*\()

我做的第一件事是将整个表达式包装在&#34;不区分大小写的&#34;修饰符,所以没有错过任何东西。可能没必要,但无论如何。其次,更重要的是,我把你的第一组在括号之外,并使它们成为负面的前瞻。通过这种方式,它们与班级名称和箭头相匹配,但不报告它 - 基本上说&#34;匹配我们前面的任何东西,只要我们存在于它前面,但不匹配我们&#34;

现在,您的范围只与方法的名称相匹配。

Demo


现在,这是我不能得到的 - 为什么你应该这样做。我同时保留了language syntaxcolor scheme,所以我在Sublime Text和TextMate中有很多经验。据我所知,PHP .tmLanguage已经包含了函数调用的范围。我不是任何PHP专家,但我知道基础知识,所以我做了三个不同PHP函数调用的例子:

PHP function calls

Green强调了各种语言的各种函数调用。在上面的示例中,baz_quux的范围为meta.function-call.object.php,在中间示例中为meta.function-call.static.php,而在底部则为meta.function-call.php。我不明白你从variable.other.property.php获得的地方。

但是,如果我在上面的函数调用后删除了括号:

PHP function calls, no parens

我从上到下得到以下范围:variable.other.property.php aha! ),constant.other.class.phpconstant.other.php。如果我把parens放回去,并在函数名结尾后添加一个或三个空格,它们仍然以绿色突出显示为函数。


所以,虽然今天我们对正则表达式有一些乐趣,但最终你的工作已经完成了。如果您要进行更多范围搜索,我强烈推荐使用ScopeAlways插件,就像其名称所暗示的那样,它始终列出底部栏中当前光标位置的完整范围(您可以如果你愿意,可以通过Command Palette关闭它。如果我要求扩展我的配色方案并突出显示为一种新语言,我只需打开尽可能多的代码,然后用鼠标查看,查看不同的范围,然后编辑我的主题以更正根据需要添加颜色,或为全新范围添加新颜色。我然后扫描.tmLanguage文件(在converting it to YAML之后),看看我是否遗漏了任何内容。

祝你工作顺利!