Changing/Creating VSCode 编辑器中元素的作用域

Changing/Creating a scope for an element in VSCode editor

正在尝试更改我的编辑器的颜色,但我注意到一些元素共享相同的范围(无论如何都会产生相同的颜色)。

我想知道是否有办法“创建”一个新的作用域,并为其分配一个特定的关键字(比如在 lua 中为“local”添加一个新的作用域)。

下面是“local”和“nil”共享相同作用域的示例:

local nil

感谢您的宝贵时间

语法贡献

你想做的是贡献一个语法使用,VSCode提供,贡献点。语法贡献点为:contributes.grammars

贡献点数是 VS 代码扩展清单 的一部分。 VS-Code 扩展清单是 package.json 位于 VS-Code 扩展或主题的根目录中。您不能从 ./.vscode/settings.json 文件贡献语法。



在扩展清单中定义语法

在这种情况下,您将做出的贡献类型如下:

"grammars": []

这是在 VS-Code 扩展的清单中定义语法的示例


    /* 
      Grammars are defined in the Extension Manifest (package.json), 
      inside of the contributions property.  
    */

{
  "name": "language-latex",
  "description": "LaTex Language Support",
  "version": "0.0.1",
  "publisher": "someone",
  "engines": {
    "vscode": "0.10.x"
  },
  "categories": ["Programming Languages", "Snippets"],
  "contributes": {
    "languages": [
      {
        "id": "latex",
        "aliases": ["LaTeX", "latex"],
        "extensions": [".tex"]
      }
    ],
    "grammars": [
      {
        "language": "latex",
        "scopeName": "text.tex.latex",
        "path": "./syntaxes/latex.tmLanguage.json"
      }
    ],
    "snippets": [
      {
        "language": "latex",
        "path": "./snippets/snippets.json"
      }
    ]
  }
}

最初作为贡献示例的一部分创作@ VSCode 的 URL:https://code.visualstudio.com/api/references/extension-manifest#combining-extension-contributions

注意到清单中的语言是如何定义的了吗?这是因为这个例子定义了 Language Latex。听起来您想在现有语言之上贡献语法,在这种情况下您可能不需要定义新语言。我在这个答案的底部发布了三个指向官方 VSCode 文档的链接。您将需要阅读这三个链接,以便您可以准确地决定您的扩展程序需要什么。如何填写您的扩展清单将取决于您要定义的语法。这听起来可能很复杂,但是一旦掌握了它,您就会发现这很容易。

注意:许多高级 VSCode 功能,例如主题、扩展、贡献、任务、配置调试器(您不能只在 settings.json 文件中设置布尔值的东西), 使用相同类型的方法来使用这些功能。比如创建一个主题,你也贡献了主题,也就是说你学会了如何贡献一个语法,你也就知道如何创建一个主题了。请访问下面的贡献 Link 以了解更多信息(大约有 20 种不同的贡献类型可供阅读)。


就语法部分而言,您需要提供 3 个特定值,方法是将它们分别分配给右侧 属性:

  1. grammars.language 属性
  2. grammars.scopeName 属性
  3. grammars.pathname 属性

该路径将使用如下所示的 json 文件:

"./syntaxes/<Your-language>.tmLanguage.json"

它是一个转换为 JSON 格式的 TextMate 文件,可以位于您的 VSCode 文件中,或 VSCode 存储库中(搜索 VSCode 存储库。它应该在您输入时弹出。)

这里是Link到VSCode Repository


For more information about Grammar Contributions visit this link: https://code.visualstudio.com/api/references/contribution-points#grammar-example


For more information about Contributions in general visit this link: https://code.visualstudio.com/api/references/contribution-points


For more information about the VSCode Extension Manifest visit this link: https://code.visualstudio.com/api/references/extension-manifest#combining-extension-contributions




关于此答案的任何问题,应在属于此答案的评论部分提出。


(将编辑并删除此行,以及 6 月 21 日以上的行 @ 11:59pm UTC)