在Sublime Text 2中编辑php的配色方案

时间:2012-03-16 12:45:06

标签: php sublimetext

我想让$(美元符号)表示一个php变量在ST2中显示为它自己的颜色(#ff0000)。我一直在编辑自定义颜色方案文件,但似乎无法为此符号获得特殊颜色。

2 个答案:

答案 0 :(得分:5)

作为答案前缀的重要附录

以下说明假设一个人正在用JSON编写语法定义,然后使用PackageDev插件构建Plist xml文件(如下面链接的非官方sublime文档中所述)。 ST2从后面的文件中读取语法解析指令。

= = = =

我是从我第一次涉足这个领域向你汇报的,所以我可能会在接下来的一两点上弄错。

除非您的语法分析器将$定义为具有自己的范围选择器,否则您将无法通过颜色方案文件为该单独符号设置颜色。您可能已经知道,您可以通过选择它并按下选项+ command + p(非mac上的alt + super + p)来检查元素的范围选择器:它会在状态栏中报告信息。

我刚刚在自己的软件上检查了php语法解析器,并且$的范围与它前缀的字符串之间没有区别。因此,假设您的设置与我自己的一样,您需要编写自己的语法定义。这可以在现有的php语法文件中完成,也可以在新的定义文档中进行(当然是更安全的选项),您可以将其用作主要编辑文档。

您可以找到一个教程,其中介绍了在非官方的sublime文本文档中编写自己的语法定义的基本步骤。实际上,其中标题为“Fine Tuning Matches”的部分解释了如何使用“捕获”来定义范围选择器,尤其是对于带有前缀的dolla'符号。您可以参考文档以获取有关创建语法定义文件的详细信息以及所有这些,但是,为了巩固我对流程的理解并在此处提供答案,我将尽力解释JSON确定选择器。

这是您需要使用的正则表达式模式:

{ "match": "\\$([A-Za-z][A-Za-z0-9_]+)",
  "name": "keyword.syntaxTypeAbbreviation",
  "captures": {
    "1": { "name": "moreSpecific.selectorName.syntaxTypeAbbreviation " }
  },
  "comment": "Variables like $PARAM1, $TM_SELECTION..."
}

分析上述含义:

"match"给出正则表达式,用于标识要选择的字符串模式。除非我弄错了,否则它会写着“以'$'开头的任何字符串([后跟一个大写或小写字母]和[至少一个附加字母或数字]加上任何其他字符)”。 (Sublime Text使用oniguruma regex specifications。)

"name"提供在颜色方案文档中选择范围的字符串。在方案xml中,这对应于<key>name</key> <string>specific.selector.syntaxTypeAbbreviation</string>

"captures"(这是您的目标的关键元素)指定模式的子集,该子集将被赋予其自己的,更具体的范围选择器。括号内的每组正则表达式占据一个位置,整数("1",此处)指定要“捕获”哪些位置。当然,在我们的案例中,只有一个可捕获组。

"name"与之前相同,但作为前一个指定的亚种,"comment"为您提供了评论定义重要性的选项。

最后,重要的是要注意第一个范围选择器将设置整个字符串的颜色,第二个覆盖其前一个以提供不同的颜色以下字母和数字。也就是说,第一个选择器会让你为$着色,第二个选择器将是附加字符串的颜色。

因此我们可以翻译模式:

  

“以'$'开头的任何字符串([后跟一个大写或   小写字母]和[至少一个附加字母或数字]加   任何其他字符)将被命名为 NAME ,但第一组括号中的部分除外,该部分将被命名为 OTHERNAME

我希望这个解释至少对你来说是有用的,因为它对我来说是有用的。此外,我很感激大家纠正我确实犯过的任何错误。

此致

aBath

答案 1 :(得分:5)

在您的配色方案文件中:

<dict>
    <key>name</key>
    <string>Variable start</string>
    <key>scope</key>
    <string>punctuation.definition.variable</string>
    <key>settings</key>
    <dict>
        <key>fontStyle</key>
        <string>bold</string>
        <key>foreground</key>
        <string>#ff0000</string>
    </dict>
</dict>

注意:fontstyle = bold也是一个选项