【问题标题】:How to Highlight PHP Method Calls in Sublime Text (textmate)如何在 Sublime Text 中突出显示 PHP 方法调用 (textmate)
【发布时间】:2014-09-16 14:19:01
【问题描述】:

我使用 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>

【问题讨论】:

  • 那么到目前为止你尝试过什么?
  • 我编辑了帖子以包含我尝试过的内容

标签: php regex syntax-highlighting sublimetext3 textmate


【解决方案1】:

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

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

我做的第一件事是将整个表达式包装在“不区分大小写”修饰符中,这样就不会遗漏任何东西。可能没有必要,但无论如何。其次,更重要的是,我选取了括号外的第一组,并将它们设为负前瞻。这样,它们匹配类名和箭头,但不报告 - 基本上是说“匹配我们前面的任何东西,只要我们存在于它前面,但不要匹配我们。”

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

Demo


现在,这就是我不明白的 - 为什么你必须这样做。我同时维护一个language syntax 和一个color scheme,所以我在Sublime Text 和TextMate 的范围界定方面有很多经验。据我所知,PHP .tmLanguage 已经包含函数调用的范围。我无论如何都不是 PHP 专家,但我知道基础知识,所以我做了三个不同 PHP 函数调用的示例:

Green 突出显示了不同语言的大量函数调用。在上面的示例中,baz_quux 的作用域为 meta.function-call.object.php,在中间的示例中为 meta.function-call.static.php,在底部为 meta.function-call.php。我不明白你从哪里得到variable.other.property.php

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

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


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

祝你工作顺利!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多