我正在使用Sublime Text 2/3在Typescript和Javascript中进行编码。

但是,当对象的键也是有效的关键字名称时,即使只是键,它也会像关键字一样突出显示。

例子:

var test = { do: 'hello world' };

有没有办法不像关键字那样突出显示这种键?

最佳答案

语法高亮显示由tmLanguage文件控制。
在ST3中,这些文件保存在.cache文件中。

因此,请按照下列步骤。

  • 打开Tools -> Command Pallet,然后使用“程序包管理器”安装PackageResourceViewer
  • 在命令面板中,选择PackageResourceViewer: Open Resource
  • 在显示的面板中选择JavaScript
  • 在显示的面板中选择JavaScript.tmLanguage

  • 现在,将为您显示语言定义文件。

    对于您的情况,请搜索do,直到找到它位于名为keyword.control.js的关键字列表中为止
        <dict>
            <key>match</key>
            <string>\b(break|case|catch|continue|default|do|else|finally|for|goto|if|import|package|return|switch|throw|try|while)\b</string>
            <key>name</key>
            <string>keyword.control.js</string>
        </dict>
    

    将字符串do标记为JavaScript Control关键字后,该指令将在您为配色方案选择的.tmTheme文件中得到遵守。

    如果我们以与上述相同的方式使用PackageResourceViewer打开Amy.tmTheme.cache文件并搜索control,我会找到此指令:
        <dict>
            <key>name</key>
            <string>Control keyword</string>
            <key>scope</key>
            <string>keyword.control</string>
            <key>settings</key>
            <dict>
                <key>foreground</key>
                <string>#80A0FF</string>
            </dict>
        </dict>
    

    也就是说,如果我选择使用Amy主题,则当.tmLanguage文件将字符串标识为keyword.control(控制关键字)时,该主题应应用提供的语法突出显示。

    那么,这一切告诉我们什么呢?
    如果希望始终将字符串do设置为而不是作为控制关键字,则需要构建一组新的正则表达式(regex)测试集,而不是JavaScript.tmLanguage中的测试集。如果您可以提出一个新的正则表达式来应用您想要应用的规则,则可以将其添加到.tmLanguage文件中,并突出显示所需的语法。

    我会强烈建议,建议您先将JavaScript.tmLanguage文件保存到User文件夹中,以便使用副本进行操作,下次ST3升级时,所做的更改将不会被丢弃。

    现在开始编辑.tmLanguage文件,直到获得所需的行为。
    在我看来,您的新正则表达式应在关键字和而不是标记(如:)之后立即查找尾随的keyword.control.js。敲打自己的想法。如果您将副本保存到User文件夹中,那么一切都会变得很糟糕,可能是删除.tmLanguage文件并重新启动ST,然后还原到Package文件夹中的默认.tmLanguage文件。可能发生的最坏情况是您浪费了几个小时。但是,如果您“破解”正确的正则表达式模式,则您将拥有自己的.tmLanguage文件,其中包含您喜欢的语言定义,每种颜色配置都将尊重该定义,并且每天的编码体验中都会消除烦恼,从而给您带来无穷的欢乐。永远是“好东西(TM)”。

    希望这一切都有道理。大声喊出来,否则,我会努力做得更好。

    09-18 06:28