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

Posted

技术标签:

【中文标题】更改崇高文本3中特定单词的颜色【英文标题】:Change color of specific words in sublime text 3 【发布时间】:2013-10-14 16:09:07 【问题描述】:

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

我想要更改true(使其变为绿色)和false(使其变为红色)或$this 之类的颜色。

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

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

你知道怎么做吗?

谢谢。

【问题讨论】:

【参考方案1】:

您自己在用户目录中的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 &amp; Poppies,您可以将其从ST3/Packages/Color Scheme - Default.sublime-package\Slush &amp; 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 &amp; 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 开头的所有范围。例如,如果您在 PHP.tmLanguage 中定义了false.constant.language.php,在 javascript.tmLanguage 中定义了false.constant.language.js,则可以在.tmTheme 文件中使用false.constant.language,其设置将同时应用于JS 和PHP false

【讨论】:

感谢您的精彩回答!它工作得很好。即使解决方案有一个主要的默认值,用户/PHP..tmLanguage 将覆盖任何 ST PHP.tmLanguage 未来的更新,所以我必须监控任何改进,但幸运的是,这并不经常。 通常我喜欢发明一些东西。抱歉,目前我无法为您的案例提供更好的配方,但我会将您的问题添加到我的收藏夹中,并会在不久的将来尝试发明更好的东西。 )))) 太好了,到时告诉我 ;-) @SergeyRonin 投票支持您超过 1000 名声望! (也是一个非常详细有用的答案) @Druzion 谢谢。 :)

以上是关于更改崇高文本3中特定单词的颜色的主要内容,如果未能解决你的问题,请参考以下文章

HTML:更改文本字符串中特定单词的颜色

更改 TextView 中一个单词的文本颜色

如何在文本视图中更改单个单词的文本大小和颜色[重复]

崇高文本中的 React.js 文件语法 3

动态地,在运行时,如何在 WPF 中更改文本框中某些单词的颜色?

qml中仅一个单词的文本颜色更改