更改崇高文本中特定单词的颜色 3.


Change color of specific words in sublime text 3

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

我喜欢的是改变true(使其绿色(和false(使其成为红色(或类似$this的颜色。

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

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

你知道怎么做吗?

谢谢。

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

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

1.PHP.tm语言

据我所知,也许我错了,不可能为语法定义创建"补丁"文件。你不能创建一个扩展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.tmTheme复制到ST3/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文件,因此最好重新启动它(并选择菜单"首选项"→"配色方案"→"用户"→"Slush & Poppies"。在此主题中,您将true以绿色突出显示,false以红色突出显示。当然,您可以编辑所需的任何配色方案,而不仅仅是这个。

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