11

我在这个网站上搜索如何更改 Sublime Text 3 中某些特定单词的颜色,但如果不替换 tmlanguage 文件就找不到它。

我想要的是改变颜色true(使其变为绿色)和false(使其变为红色)或类似$this.

我对 PHP 和 JS 范围特别感兴趣,因为我并没有真正使用任何其他语言。我尝试了PersistentRegexHighlight插件,但我对结果不太满意。打开文件时单词没有颜色,它使用突出显示,所以我不能只更改文本颜色。

我阅读了一些关于更改 PHP.tmlanguage 文件的答案,但是这样做,我会在未来的版本中放弃任何更改,对吧?我认为在用户目录中制作另一种 PHP.tmlanguage 会将其“添加”到主目录中,例如键绑定文件,但没有。

你知道怎么做吗?

谢谢你。

4

1 回答 1

21

您自己PHP.tmlanguage在用户目录中的内容不起作用,因为编辑.tmlanguage文件是描述语言和设置范围的一种方式,而不是突出显示术语的方式。因此,您需要额外的操作才能在编辑器窗口中突出显示这些内容。

突出显示在.tmTheme文件中完成。在文件中,您可以使用范围.tmLanguage,以便为适合范围的文本应用颜色。

1. PHP.tmLanguage

据我所知,也许我错了,不可能为语法定义创建一个“补丁”文件。你不能创建一个小补丁文件来扩展 PHP 语法。语法在一个文件中描述,因此 PHP 的所有范围必须在一个文件中描述。如果要为 PHP 语言添加、删除或更改某些内容,则需要编辑相应的文件,该文件必须包含整个 PHP 的语法定义。好消息是,可以将.tmLanguage文件复制到User目录并保持本机文件的安全。

让我们复制PHP.tmLanguage到您的User文件夹中并进行一些编辑。你可以在里面找到这些字符串:

<dict>
    <key>match</key>
    <string>(?i)\b(TRUE|FALSE|NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\b</string>
    <key>name</key>
    <string>constant.language.php</string>
</dict>

如您所见,现在truefalse都在同一个范围内,constant.language.php. 您可以通过从范围中删除它们并为它们添加两个单独的范围来更改它。

<dict>
    <key>match</key>
    <string>(?i)\b(NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\b</string>
    <key>name</key>
    <string>constant.language.php</string>
</dict>
<dict>
    <key>match</key>
    <string>(?i)\b(TRUE)\b</string>
    <key>name</key>
    <string>true.constant.language.php</string>
</dict>
<dict>
    <key>match</key>
    <string>(?i)\b(FALSE)\b</string>
    <key>name</key>
    <string>false.constant.language.php</string>
</dict>

2.主题修改

不可能在tmLanguage文件中设置颜色,因为它的目的是确定范围——语言元素。所有语法突出显示在.tmTheme文件中完成。所以我能想象的最好的事情是将当前主题文件复制到User目录并编辑它。

例如,如果您当前的主题是Slush & Poppies,您可以将其复制ST3/Packages/Color Scheme - Default.sublime-package\Slush & Poppies.tmThemeST3/User/Data/Packages/User目录并进行编辑。

搜索字符串,constant.language。它是这个块的一部分:

<dict>
    <key>name</key>
    <string>Built-in constant</string>
    <key>scope</key>
    <string>constant.language</string>
    <key>settings</key>
    <dict/>
</dict>

看起来Slush & Poppies没有着色常量的设置。但这不是问题。在下面的代码中,我编写了一个示例来帮助理解如何应用颜色设置。所以,让我们把上面的块改成这个:

<dict>
    <key>name</key>
    <string>Built-in constant</string>
    <key>scope</key>
    <string>constant.language</string>
    <key>settings</key>
    <dict/>
</dict>
<dict>
    <key>name</key>
    <string>TRUE</string>
    <key>scope</key>
    <string>true.constant.language</string>
    <key>settings</key>
    <dict>
        <key>foreground</key>
        <string>#008900</string>
    </dict>
</dict>
<dict>
    <key>name</key>
    <string>FALSE</string>
    <key>scope</key>
    <string>false.constant.language</string>
    <key>settings</key>
    <dict>
        <key>foreground</key>
        <string>#890000</string>
    </dict>
</dict>

重新启动 ST3(看起来 ST3.tmLanguage在运行时不会完全更新范围列表,因此最好重新启动它)并选择菜单“首选项”→“颜色方案”→“用户”→“雪泥和罂粟”。在这个主题中,您将true用绿色false突出显示并用红色突出显示。当然,你可以编辑任何你想要的配色方案,不仅仅是这个。

还有一件事,在.tmTheme文件中,您不能使用整个范围名称,而是它的一部分。例如,可以使用false.constant.language代替false.constant.language.php. 使用false.constant.language时,设置将应用到名称开头的所有作用域false.constant.language。例如,如果您false.constant.language.php在 PHP.tmLanguage 和false.constant.language.jsJavaScript.tmLanguage 中定义,则可以false.constant.language.tmTheme文件中使用,其设置将同时应用于 JS 和 PHP false

于 2013-10-08T02:22:13.667 回答