使用Sublime Text 2进行语法特定突出显示

时间:2012-02-18 23:39:48

标签: sublimetext

我想知道是否有一种方法可以为同一文件中的不同语言标签提供两种不同的标签颜色(美国的“颜色”)。

例如,假设我在同一个.cfm文件中有ColdFusion代码和HTML代码。我可以将ColdFusion标记设置为红色,将HTML标记设置为蓝色吗?

例如,让我们调用下面的文件 HelloWorld.cfm - 我可以用不同的方式为标签着色吗?

<cfset myvar = "hello, world" />
<html>
<head>
  <title>This is my title</title>
</head>
<body>

<div><cfoutput>#myvar#</cfoutput></div>

</body>
</html>

谢谢!

2 个答案:

答案 0 :(得分:21)

是的,只要您的已安装的语言定义可以将标记识别为具有不同的范围,您就可以编辑颜色方案以定位具有特定颜色和其他样式的范围。

在您的packages文件夹中,语言范围在已安装语言的.tmLanguage文件中定义,而样式在“color scheme - default”文件夹中的.tmTheme文件中定义。

如果您将光标放在标签内,并按 shift + ctrl + alt + p (在OSX中 shift - cmd -p 我认为状态栏将显示当前范围。您也可以使用以下命令通过控制台将其复制到剪贴板:

sublime.set_clipboard(view.syntax_name(view.sel()[0].b))

您可以使用此信息来创建样式,有点像css选择器,但使用XML。例如,我使用此Coldfusion package,我在自定义.tmTheme文件中显示了下面显示的范围选择器,以区分cf标记和HTML标记。

<dict>
    <key>name</key>
    <string>Tag name</string>
    <key>scope</key>
    <string>entity.name.tag</string>
    <key>settings</key>
    <dict>
        <key>background</key>
        <string>#D8D0B6</string>
        <key>fontStyle</key>
        <string>bold</string>
        <key>foreground</key>
        <string>#647A4F</string>
    </dict>
</dict>
<dict>
    <key>name</key>
    <string>CF tag name</string>
    <key>scope</key>
    <string>entity.name.tag.conditional.cfml, entity.name.tag.declaration.cfml, entity.name.tag.other, entity.name.tag.cf, entity.name.tag.inline.other.cfml</string>
    <key>settings</key>
    <dict>
        <key>background</key>
        <string>#D8D0B6</string>
        <key>fontStyle</key>
        <string>bold</string>
        <key>foreground</key>
        <string>#990033</string>
    </dict>
</dict>

有关scope selectors的更多信息。

答案 1 :(得分:4)

我已更新了ColdFusion.tmLanguage,因此您只需要定位entity.name.tag.cf为所有cf代码着色。您还可以分别针对entity.name.tag.cf.scriptentity.name.tag.cf.query定位特定代码,例如cfscriptcfquery。 HTH