【问题标题】:Change / Add syntax highlighting for a language in Sublime 2/3在 Sublime 2/3 中更改/添加语言的语法突出显示
【发布时间】:2013-08-06 17:28:11
【问题描述】:

我想在 Sublime 2/3 中更改/添加语言的语法突出显示。

例如,我希望关键字 this 在 JavaScript 中着色。

我该怎么做?

我知道C:\Program Files\Sublime Text 3\Packages 中有一个偏好 JavaScript 文件,但我不知道要更改什么,或者我是否必须在此文件夹 %APPDATA%\Sublime Text 3 的某处创建一个新的 JavaScript 偏好文件。

【问题讨论】:

    标签: syntax-highlighting sublimetext3


    【解决方案1】:

    语法突出显示由您使用的主题控制,可通过 Preferences -> Color Scheme 访问。主题通过使用范围来突出显示不同的关键字、函数、变量等,范围由语言目录/包中的.tmLanguage 文件中包含的一系列正则表达式定义。例如,JavaScript.tmLanguage 文件将范围 source.jsvariable.language.js 分配给 this 关键字。由于 Sublime Text 3 使用 .sublime-package zip 文件格式来存储所有默认设置,因此编辑单个文件不是很简单。

    不幸的是,并非所有主题都包含所有范围,因此您需要尝试不同的主题才能找到看起来不错的主题,并为您提供所需的突出显示。 Sublime Text 中包含许多主题,更多主题可通过Package Control 获得,我强烈建议您安装这些主题(如果您还没有安装)。确保您关注ST3 directions

    碰巧,我开发了Neon Color Scheme,可通过Package Control 获得,您可能想看看。我的主要目标,除了试图使广泛的语言看起来尽可能好之外,是尽可能多地识别不同的范围——比标准主题中包含的范围要多得多。例如,虽然 JavaScript 语言的定义不如 Python 的那么全面,但 Neon 仍然比 MonokaiSolarized 等一些默认语言具有更多的多样性。

    我应该注意我使用了@int3h 的Better JavaScript 语言定义来制作这张图片,而不是Sublime 附带的那个。它可以通过 Package Control 安装。

    更新

    最近我发现了另一种 JavaScript 替代语言定义 - JavaScriptNext - ES6 Syntax。它比基础 JavaScript 甚至更好的 JavaScript 拥有更多的作用域。在相同的代码上看起来像这样:

    另外,由于我最初写了这个答案,@skuroda 已经通过包控制发布了PackageResourceViewer。它允许您无缝地查看、编辑和/或提取部分或整个.sublime-package 包。因此,如果您选择,您可以直接编辑 Sublime 包含的配色方案。

    另一个更新

    随着几乎所有默认软件包on Github 的发布,变化迅速而激烈。旧的 JS 语法已被完全重写,以包含 JavaScript Next ES6 语法的最佳部分,现在尽可能完全兼容 ES6。 已经进行了许多其他更改,以涵盖角落和边缘情况,提高一致性,并使其整体变得更好。新语法已包含在(目前)最新的dev build 3111 中。

    如果您想在当前 beta build 3103 中使用任何新语法,只需将 Github 存储库克隆到某个地方并将 JavaScript(或您想要的任何语言)链接到您的 Packages目录 - 通过选择 Preferences -> Browse Packages... 在您的系统上找到它。然后,只需在原始 repo 目录中不时做一个git pull 以刷新任何更改,您就可以享受最新最好的!我应该注意,回购使用新的.sublime-syntax 格式而不是旧的.tmLanguage 格式,因此它们不适用于 3084 之前的 ST3 版本或 ST2(在这两种情况下,您都应该升级到最新的 beta或无论如何开发构建)。

    我目前正在调整我的 Neon 颜色方案以处理新 JS 语法中的所有新范围,但大多数应该已经涵盖。

    【讨论】:

    • 我安装了 Package Control 和您的 Better JavaScript。我怎样才能将方案设置为您的方案?它未在配色方案下列出。
    • 您是否也通过 Package Control 安装了“Neon Theme”?一旦你有,去Preferences -> Color Scheme -> Neon Theme并选择Neon
    • 如果您通过 Package Control 安装软件包,它们会自动存储在正确的位置,在本例中为 %APPDATA%\Sublime Text 3\Installed Packages\Neon Theme.sublime-package。选择上面的菜单选项也会自动更新您的Packages\User\Preferences.sublime-settings 文件。
    • @MattDMo -- 哇,这非常彻底。我只是想为类似 XML 的标记做一些语法颜色和编辑强化。但是在弄清楚如何开始使用超级简单的东西时遇到了一些麻烦。我可以从哪里开始进行逆向工程,或者更好的是,获取有关创建逆向工程的教程。
    • @nmz787 如果您想要的只是.sublime-syntax 文件,那么只需下载它并将其复制到~/.config/sublime-text-3/Packages/User。然后它会出现在 Sublime 窗口右下角的语法菜单中,可以单独使用(它会说“SystemVerilog”),也可以在User 子菜单下使用,具体取决于您的设置。如果你想要整个包,请确保 Package Control 已正确安装,打开命令面板,输入 pci,回车,搜索 SystemVerilog,然后点击进入。你不应该重命名任何文件或任何东西——你为什么要这样做?
    【解决方案2】:

    我终于找到了自定义给定主题的方法。

    转到C:\Program Files\Sublime Text 3\Packages,然后将Color Scheme - Default.sublime-package 复制+ 重命名为Color Scheme - Default.zip。然后解压并复制主题,你想更改为%APPDATA%\Sublime Text 3\Packages\User。 (就我而言,All Hallow's Eve.tmTheme)。

    然后您可以使用任何文本编辑器打开它并更改/添加一些内容,例如在 JavaScript 中更改 this

    <dict>
        <key>name</key>
        <string>Lang Variable</string>
        <key>scope</key>
        <string>variable.language</string>
        <key>settings</key>
        <dict>
            <key>foreground</key>
            <string>#FF0000</string>
        </dict>
    </dict>
    

    这会将 JavaScript 文件中的 this 标记为红色。您可以在Preferences -&gt; Color Scheme -&gt; User -&gt; &lt;Your Name&gt; 下选择您的主题。

    【讨论】:

    • 是的,当我们接近 Sublime Text 3 的勇敢新世界时,这是我们都需要习惯的笨重的解决方法。我相信不久就会有插件让我们更容易.sublime-package编辑...
    • 这个插件就在这里——它叫做PackageResourceViewer,可以通过包控制安装。它使使用 Sublime Text 3 .sublime-package 文件变得更加容易,如果您打算对 ST3 进行任何类型的自定义,我强烈推荐它。
    • 您在哪里找到这些规则的参考资料?
    • ^ 他们说的。此外,我不明白您何时/何地在代码中“选择”“this”关键字,为什么这只会给“this”关键字着色。你能解释一下吗?
    【解决方案3】:

    使用通过 Package Control 安装的 PackageResourceViewer 插件(如 MattDMo 所述)。这允许您通过简单地在 Sublime Text 中打开并保存文件来覆盖压缩资源。它只会自动将编辑过的资源保存到 %APPDATA%/Roaming/Sublime Text 3/Packages/ 或 ~/.config/sublime-text-3/Packages/。

    特定于op,安装插件后,执行PackageResourceViewer: Open Resource命令。然后选择JavaScript,然后选择JavaScript.tmLanguage。这将在编辑器中打开一个 xml 文件。您可以编辑任何语言定义并保存文件。这将在用户目录中写入 JavaScript.tmLanguage 文件的覆盖副本。

    同样的方法可以用来编辑系统中任何语言的语言定义。

    【讨论】:

    • 我没有看到任何关于颜色的内容。但是,您的答案最接近我的需要。相反,我根据this SublimeText forum post 编辑了 Monokai.tmTheme,以使 JSON 语法突出显示工作。
    • 此答案中的具体说明用于编辑语言定义。虽然这不会让您直接编辑配色方案的颜色,但它可以让您更改如何找到某些类型的范围,从而更改配色方案如何解释(和颜色)语言。该插件将在 Sublime 中打开任何类型的资源,因此您可以使用相同的工具直接编辑配色方案。例如,我喜欢 Tomorrow Night 配色方案,所以我会使用这个插件打开 Tomorrow-Night.tmTheme 来编辑该配色方案。
    【解决方案4】:

    “this”已经在 J​​avascript 中着色。

    查看->语法->并选择要突出显示的语言。

    【讨论】:

    • 正是我想要的:View -&gt; Syntax -&gt; Open all with current extension as... 设置例如*.stan 带有 C++ 语法着色的文件。
    【解决方案5】:

    这是我的食谱

    注意:这并不是 OP 所要求的。这些说明将帮助您更改定义语法匹配规则的项目(cmets、关键字等)的颜色。例如,使用这些指令进行更改,使所有代码 cmet 都变为蓝色而不是绿色。

    我相信 OP 正在询问如何将 this 定义为在 JavaScript 源文件中找到时要着色的项目。

    1. 安装包:PackageResourceViewer

    2. Ctrl+Shift+P > [PackageResourceViewer: Open Resource] > [Color Scheme - Default] > [Marina.sublime-color-scheme](或任何你使用的配色方案)

    3. 上述命令将打开一个新选项卡到文件“Marina.sublime-color-scheme”。

      • 对我来说,这个文件位于我的漫游配置文件 %appdata% (C:\Users\walter\AppData\Roaming\Sublime Text 3\Packages\Color Scheme - Default\) 中。
      • 但是,如果我在 Windows 资源管理器 中浏览到该路径,[Color Scheme - Default] 不是 [Packages] 目录的子目录。我怀疑PackageResourceViewer 正在做一些虚拟化。

    可选步骤: 在新的配色方案选项卡上:Ctrl+Shift+P > [Set Syntax: JSON]

    1. 搜索您要更改的规则。我想让 cmets 可见,所以我搜索了“Comment

      • 我在"rules" 部分找到了它
     "rules":
        [
            {
                "name": "Comment",
                "scope": "comment, punctuation.definition.comment",
                "foreground": "var(blue6)"
            },
    
    1. 搜索字符串"blue6": 以查找颜色变量定义部分。我在"variables" 部分找到了它。

    2. 使用http://hslpicker.com/ 之类的工具选择新颜色。

    3. 要么定义一个新的颜色变量,要么覆盖blue6 的颜色设置。

      • 警告:覆盖 blue6 将影响该配色方案中所有其他也使用 blue6(“标点符号”“访问器”)的文本元素。
    4. 保存您的文件,更改将立即应用于任何打开的文件/选项卡。

    注意事项

    Sublime 将处理任何这些颜色样式。可能更多。

    hsla = 色相、饱和度、亮度、alpha rgba = 红、绿、蓝、阿尔法

    hsla(151, 100%, 41%, 1) - 最后一个参数是 alpha 级别(透明度) 1 = 不透明,0.5 = 半透明,0 = 全透明

    hsl(151, 100%, 41%) - 没有 alpha 通道

    rgba(0, 209, 108, 1) - 带有 alpha 通道的 rgb

    rgb(0, 209, 108) - 没有 alpha 通道

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多