我在这个网站上搜索如何更改Sublime Text 3中某些特定单词的颜色,但在没有替换tmlanguage文件的情况下找不到它。
我喜欢改变true
(使其变为绿色)和false
(使其变为红色)或类似$this
之类的颜色。
我对PHP和JS范围特别感兴趣,因为我实际上并没有使用任何其他语言。我尝试了PersistentRegexHighlight插件,但我对结果并不满意。单词在文件打开时没有着色,它使用高亮,所以我不能只改变文本颜色。
我读了一些关于更改PHP.tmlanguage文件的答案,但是这样做,我将在未来的版本中放弃任何更改,对吧?我想在用户目录中制作另一个PHP.tmlanguage会将它“添加”到主要的一个,就像键绑定文件一样,但是没有。
你知道怎么做吗?
谢谢。
答案 0 :(得分:21)
用户目录中您自己的PHP.tmlanguage
无效,因为编辑.tmlanguage
文件是一种描述语言和设置范围的方法,而不是突出显示术语的方法。因此,您需要执行其他操作才能在编辑器窗口中突出显示这些内容。
突出显示在.tmTheme
文件中完成。在文件中,您可以使用.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>
如您所见,现在true
和false
都位于同一范围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>
无法在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&amp; ;罂粟花“。在此主题中,您将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
,则可以在false.constant.language
文件中使用.tmTheme
,其设置将同时应用于JS和PHP false
。