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

phi*_*bar 3 php sublimetext

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

Sho*_*hon 5

重要的附录以答案为前缀

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

= = = =

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

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

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

您可以找到一个教程,其中介绍了在非官方的sublime文本文档中编写自己的语法定义的基本步骤.实际上,其中标题为" 微调匹配 "的部分解释了如何使用"捕获"来定义范围选择器,尤其是对于带有前缀的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..."
}
Run Code Online (Sandbox Code Playgroud)

分析上述含义:

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

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

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

"name"与以前相同,但作为先前指定的亚种,并"comment"提供您评论定义的重要性的选项.

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

因此,我们可以翻译模式:

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

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

问候,

aBath


小智 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>
Run Code Online (Sandbox Code Playgroud)

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