本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

贡献积分

贡献点 是你在 贡献领域package.json 扩展清单。您的扩展注册 贡献点 以扩展 Visual Studio Code 中的各种功能。以下是所有可用的 贡献点 列表:

贡献.认证

贡献一个认证提供者。这将为您的提供者设置一个激活事件,并在您的扩展功能中显示。

{
  "contributes": {
    "authentication": [
      {
        "label": "Azure DevOps",
        "id": "azuredevops"
      }
    ]
  }
}

贡献了 breakpoints

通常调试器扩展还会有一个贡献了 breakpoints条目,其中扩展列出了可以设置断点的语言文件类型。

{
  "贡献": {
    "断点": [
      {
        "语言": "javascript"
      },
      {
        "语言": "javascriptreact"
      }
    ]
  }
}

贡献颜色

贡献新的主题颜色。这些颜色可以被扩展在编辑器装饰器和状态栏中使用。一旦定义,用户可以在 中自定义颜色工作区颜色定制设置和用户主题可以设置颜色值。

{
  "contributes": {
    "colors": [
      {
        "id": "superstatus.error",
        "description": "Color for error message in the status bar.",
        "defaults": {
          "dark": "errorForeground",
          "light": "errorForeground",
          "highContrast": "#010203",
          "highContrastLight": "#feedc3"
        }
      }
    ]
  }
}

颜色默认值可以为浅色、深色和高对比度主题定义,并且可以引用现有颜色或颜色十六进制值

扩展程序可以消耗新的和现有的主题颜色主题颜色应用程序编程接口:

常量 错误颜色 = 新的 vscode.主题颜色('superstatus.error');

贡献命令

为一个由标题和(可选地)图标、类别和启用状态组成的命令贡献用户界面。启用状态通过when子句来表达。默认情况下,命令显示在命令面板中(⇧⌘P(Windows, Linux Ctrl+Shift+P),但它们也可以显示在其他菜单中。

贡献命令的显示取决于包含它的菜单。例如,命令面板会在命令前加上它们的类别,允许轻松分组。然而, 命令面板 不显示图标或禁用的命令。另一方面,编辑器上下文菜单显示禁用的项目,但不显示类别标签。

注意: 当一个命令被调用(通过键绑定、命令面板、任何其他菜单或编程方式)时,VS Code 会发出一个激活事件 onCommand:${命令}输入:.

注意: 当使用 产品图标 中的图标时,设置 将禁用图标。 正确的语法是"图标": " $(book)"

命令示例

{
  "contributes": {
    "commands": [
      {
        "command": "extension.sayHello",
        "title": "Hello World",
        "category": "Hello",
        "icon": {
          "light": "path/to/light/icon.svg",
          "dark": "path/to/dark/icon.svg"
        }
      }
    ]
  }
}

请参阅命令扩展指南,以了解更多有关在 VS Code 扩展中使用命令的信息。

命令扩展点示例

命令图标规格

  • 尺寸:图标应为16x16,带有1像素的填充(图像为14x14),并居中。
  • 颜色:图标应使用单一颜色。
  • 格式:建议图标使用SVG格式,但接受任何图像文件类型。

命令图标

贡献配置

贡献将暴露给用户的设置。用户可以在设置编辑器中或直接编辑settings.json文件来设置这些配置选项。

本节可以是一个对象,代表一个类别设置,也可以是一个对象数组,代表多个类别设置。如果有多个类别设置,设置编辑器将在该扩展的目录中显示一个子菜单,并且标题键将被用作子菜单项名称。

配置示例

{
  "contributes": {
    "configuration": {
      "title": "Settings Editor Test Extension",
      "type": "object",
      "properties": {
        "settingsEditorTestExtension.booleanExample": {
          "type": "boolean",
          "default": true,
          "description": "Boolean Example"
        },
        "settingsEditorTestExtension.stringExample": {
          "type": "string",
          "默认""Hello World"
          "描述""字符串示例"
        }
      }
    }
  }
]

配置扩展点示例

您可以通过以下方式从您的扩展中读取这些值vscode.workspace.getConfiguration('myExtension')输入:.

配置方案

您的配置条目既用于在JSON编辑器中编辑设置时提供智能感知,也用于定义它们在设置用户界面中的显示方式。

设置用户界面截图带编号

标题

标题1️⃣️ 一个类别的标题是用于该类别的标题。

{
  "配置": {
    "标题": "GitMagic"
  }
}

对于具有多个设置类别的扩展,如果某个类别的标题与扩展的显示名称相同,则设置UI将把这个类别视为“默认类别”,忽略订单该类别的字段并将其设置放在主要扩展标题下。

对于两者标题显示名称字段,像“扩展”、“配置”和“设置”这样的词是多余的。

  • "标题": "GitMagic"
  • "标题": "GitMagic 扩展"
  • "title": "GitMagic 配置"
  • "title": "GitMagic 扩展配置设置"

属性

属性2️⃣ 在你的配置对象将形成一个字典,其中键是设置ID,值提供有关该设置的更多信息。尽管一个扩展可以包含多个类别的设置,但每个扩展的设置仍然必须具有其唯一的ID。一个设置ID不能是另一个设置ID的完整前缀。

没有明确属性的订单 字段将按字典顺序出现在设置界面中 (而不是它们在清单中列出的顺序)。

设置标题

在设置用户界面中,多个字段将用于为每个设置构建显示标题。您的键中的大写字母用于表示单词的断开。

显示单类别和默认类别配置的标题

如果配置有一个类别设置,或者该类别具有与扩展显示名称相同的标题,则对于该类别中的设置,设置界面将使用设置ID和扩展名字字段以确定显示标题。

例如,对于设置IDgitMagic.blame.dateFormat和扩展名作者名.gitMagic,因为设置ID的前缀与扩展名称的后缀匹配,git魔法 显示标题中的设置 ID 将被移除: "归咎: 日期格式"。

显示多类别配置的标题

如果配置有多个类别的设置,并且该类别没有与扩展的显示名称相同,则对于该类别内的设置,设置UI将使用设置ID和类别身份证字段以确定显示标题。

例如,对于设置IDcss.completion.completePropertyWithSemicolon和类别ID层叠样式表,因为设置ID的前缀与类别ID的后缀匹配,层叠样式表 部分的设置 ID 将从设置界面中移除,生成的设置标题将是 "完成: 用分号完成属性"。

配置属性模式

配置键使用JSON Schema的超集进行定义

描述 / markdown描述

你的描述3️⃣ 标题后出现,输入字段前出现,布尔值除外,描述将用作复选框的标签。6️⃣

{
  "gitMagic.blame.heatMap.enabled": {
    "description": "指定是否在 gutter blame 注释中提供热图指示器"
  }
}

如果你使用markdown描述而不是描述, 您的设置描述将被解析为设置用户界面中的Markdown。

{
  "gitMagic.blame.dateFormat": {
    "markdownDescription": "指定如何格式化绝对日期(例如使用`${date}`令牌)在 gutter blame 注释中。请参阅 [Moment.js 文档](https://momentjs.com/docs/#/displaying/format/) 以了解有效的格式"
  }
}

对于markdown描述为了添加换行符或多个段落,请使用字符串输入:将段落分开,而不是仅仅输入:\n输入:.

类型

条目类型数字4️⃣字符串5️⃣布尔6️⃣ 可以直接在设置界面对其进行编辑。

{
  "gitMagic.views.pageItemLimit": {
    "type": "number",
    "default": 20,
    "markdownDescription": "指定分页显示每个视图列表中的项目数量。使用0表示无限制"
  }
}

如果设置为多行文本输入,字符串设置可以渲染。"editPresentation": "multilineText"在配置条目上。

对于布尔条目,markdown描述(或描述如果markdown描述未指定) 将用作复选框旁边的标签。

{
  "gitMagic.blame.compact": {
    "type": "boolean",
    "description": "指定是否将匹配的相邻 gutter blame 注释进行压缩(去重)"
  }
}

一些对象数组类型设置将渲染在设置用户界面中。简单的数组数字字符串,或布尔将被渲染为可编辑列表。具有该类型属性的对象字符串数字整数,和/或布尔将被渲染为可编辑的键值网格。对象设置也应该有附加属性设置为任一, 或者一个具有适当类型属性,用于在用户界面中渲染。

如果一个对象数组 类型设置也可以包含其他类型,如嵌套对象、数组或 null,则该值不会在设置界面中显示,只能通过直接编辑 JSON 进行修改。用户将看到一个链接到 在 settings.json 中编辑,如上图所示。8️⃣

订单

这两个类别及其内部设置可以接受整数订单类型属性,它提供了有关它们与其他类别和/或设置的排序方式的参考。

如果两个类别有订单属性,具有较低顺序号的类别会优先显示。如果某个类别没有指定顺序号订单属性,它出现在赋予了该属性的类别之后。

如果同一类别内的两个设置有订单属性,具有较低顺序号的设置会优先处理。如果在相同类别中没有另一个设置被赋予订单属性,它将在该类别中设置该属性的设置之后显示。

如果两个类别有相同的订单属性值,或者在相同类别内的两个设置具有相同的订单属性值,然后它们将在设置用户界面中按升序字典顺序排序。

枚举 / 枚举描述 / markdown枚举描述 / 枚举项目标签

如果你提供一个项目数组枚举7️⃣ 属性,设置界面将渲染一个包含这些项目的下拉菜单。

您还可以提供一个枚举描述属性,一个与长度相同的字符串数组枚举财产。枚举描述属性在下拉菜单底部的设置用户界面中提供描述,对应于每个枚举 项目。
你也可以使用 markdown枚举描述而不是枚举描述,您的描述将被解析为Markdown。markdown枚举描述优先于枚举描述.
要自定义设置用户界面中的下拉选项名称,您可以使用 枚举项标签输入:.

示例:

{
  "settingsEditorTestExtension.enumSetting": {
    "type": "string",
    "enum": ["first", "second", "third"],
    "markdownEnumDescriptions": [
      "The *first* enum",
      "The *second* enum",
      "The *third* enum"
    ],
    "enumItemLabels": ["1st", "2nd", "3rd"],
    "default": "first",
    "description": "Example setting with an enum"
  }
}

上面示例枚举设置的设置用户界面截图

弃用消息 / markdown弃用消息

如果你设置弃用消息,或markdown弃用消息, 设置将带有你指定的消息的警告下划线。此外,除非用户进行了配置,否则该设置将从设置用户界面中隐藏。如果你设置markdown弃用消息在设置悬停或问题视图时,Markdown将不会被渲染。如果你同时设置这两个属性,弃用消息将在悬停和问题视图中显示,并且markdown弃用消息将在设置用户界面中以Markdown渲染。

示例:

{
  "json.colorDecorators.enable": {
    "type": "boolean",
    "description": "启用或禁用颜色装饰器",
    "markdownDeprecationMessage": "**已弃用**:请改用 `#editor.colorDecorators#`。”",
    "deprecationMessage": "已弃用:请改用 editor.colorDecorators。”"
  }
}

其他 JSON Schema 属性

您可以使用任何验证 JSON 模式属性来描述配置值的其他约束:

  • 默认用于定义属性的默认值
  • 最小值最大用于限制数值
  • 最大长度最小长度用于限制字符串长度
  • 图案用于限制字符串符合给定的正则表达式
  • 模式错误信息用于在模式不匹配时提供定制错误信息。
  • 格式用于限制字符串到已知格式,例如日期时间IPV4电子邮件, 和统一资源标识符
  • 最大项目数最小项限制数组长度
  • 编辑演示文稿用于控制在设置编辑器中字符串设置是显示单行输入框还是多行文本区域

不支持的JSON模式属性

在配置部分不支持:

  • $ref定义配置模式需要自包含,并且不能假设聚合设置JSON模式文档的外观。

有关这些和其他功能的更多详细信息,请参阅JSON Schema 参考

范围

一个配置设置可以具有以下可能的作用域之一:

  • 申请- 针对所有 VS Code 实例的设置,只能在用户设置中配置。
  • 机器- 仅能在用户设置或远程设置中设置的特定机器设置。例如,不应在不同机器之间共享的安装路径。这些设置的值将不会被同步。
  • 机器可覆盖的- 机器特定的设置,可以被工作区或文件夹设置覆盖。这些设置的值不会被同步。
  • Windows- Windows(实例)特定的设置,可以在用户、工作区或远程设置中进行配置。
  • 资源- 资源设置,适用于文件和文件夹,并且可以在所有设置级别进行配置,甚至可以配置文件夹设置。
  • 语言可覆盖- 资源设置可以在语言级别上被覆盖。

配置作用域决定了用户何时可以通过设置编辑器访问设置,以及该设置是否适用。如果无范围声明,缺省值是Windows输入:.

以下是内置Git扩展的示例配置范围:

{
  "contributes": {
    "configuration": {
      "title": "Git",
      "properties": {
        "git.alwaysSignOff": {
          "type": "boolean",
          "scope": "resource",
          "default": false,
          "description": "%config.alwaysSignOff%"
        },
        "git.ignoredRepositories": {
          "type": "array",
          "default": [],
          "scope": "window",
          "description": "%config.ignoredRepositories%"
        },
        "git.autofetch": {
          "type": ["boolean", "string"],
          "enum": [true, false, "all"],
          "scope": "resource",
          "markdownDescription": "%config.autofetch%",
          "default": false,
          "tags": ["usesOnlineServices"]
        }
      }
    }
  }
>}

你可以看到git.始终签署资源作用域并且可以设置为用户、工作区或文件夹级别,而被忽略的仓库列表Windows范围在 VS Code Windows或工作区(可能是多根)上具有更全局的应用。

忽略同步

你可以设置忽略同步为了防止设置与用户的设置同步。这对于不是特定于用户设置的情况很有用。例如,远程隧道访问.机器名称设置不是用户特定的,不应被同步。请注意,如果您已经设置了范围机器机器可覆盖的, 不论 的值如何,设置都不会同步忽略同步输入:.

{
  "contributes": {
    "configuration": {
      "properties": {
        "remoteTunnelAccess.machineName": {
          "type": "string",
          "default": "",
          "ignoreSync": true
        }
      }
    }
  }
}

链接到设置

您可以通过在markdown类型的属性中使用此特殊语法来插入另一个设置的链接,该链接将在设置用户界面中显示为可点击的链接:`#目标设置ID#`这将起作用markdown描述markdown枚举描述,和markdown弃用消息示例:

  "files.autoSaveDelay": {
    "markdownDescription": "控制脏编辑器在毫秒后自动保存的延迟。仅在 `#files.autoSave#` 设置为 `afterDelay` 时适用。",
    // ...
  }

在设置用户界面中,这被渲染为:

设置链接示例

contributes.configurationDefaults

为其他已注册的配置提供默认值,并覆盖它们的默认值。

以下示例覆盖了默认行为文件.自动保存设置为在焦点更改时自动保存文件。

"配置默认值": {
      "文件.自动保存": "失去焦点时保存"
}

您还可以为提供的语言贡献默认的编辑器配置。例如,以下片段为 贡献了默认的编辑器配置。输入:markdown语言:

{
  "contributes": {
    "configurationDefaults": {
      "[markdown]": {
        "editor.wordWrap": "on",
        "editor.quickSuggestions": {
          "comments": "off",
          "strings": "off",
          "other": "off"
        }
      }
    }
  }
}

贡献.自定义编辑器

自定义编辑器contribution point 是你的扩展如何向 VS Code 传达它提供的自定义编辑器。例如,VS Code 需要知道你的自定义编辑器处理哪些类型文件,以及如何在任何用户界面中识别你的自定义编辑器。

这是一个基本的自定义编辑器 贡献于 自定义编辑器扩展示例

"贡献": {
  "自定义编辑器": [
    {
      "视图类型": "catEdit.catScratch",
      "显示名称": "猫抓",
      "选择器": [
        {
          "文件名模式": "*.cscratch"
        }
      ],
      "优先级": "默认"
    }
  ]
}

自定义编辑器是一个数组,因此您的扩展可以贡献多个自定义编辑器。

  • 视图类型- 您自定义编辑器的唯一标识符。

    这是 VS Code 将自定义编辑器贡献绑定在一起的方式package.json在代码中实现您的自定义编辑器。这必须在所有扩展中唯一,因此不能使用通用的视图类型例如预览确保使用您扩展的独特ID,例如"viewType": "myAmazingExtension.svgPreview"输入:.

  • 显示名称- 在 VS Code 的用户界面中标识自定义编辑器的名称。

    显示名称在 VS Code UI 中显示给用户,例如 视图:重新打开 下拉菜单。

  • 选择器- 指定自定义编辑器适用于哪些文件。

    选择器 是一个或多个 通配符模式 的数组。这些通配符模式会与文件名进行匹配,以确定是否可以为这些文件使用自定义编辑器。一个 文件名模式例如*.png将为所有PNG文件启用自定义编辑器。

    您还可以创建更具体的模式,以匹配文件或目录名称,例如**/ translations/*.json输入:.

  • 优先级-(可选)指定何时使用自定义编辑器。

    优先级控制在打开资源时使用自定义编辑器的时间。可能的值是:

    • "默认"- 尽量为每个符合自定义编辑器的文件使用自定义编辑器选择器如果一个文件有多个自定义编辑器,用户将需要选择他们想要使用的自定义编辑器。
    • "选项"- 不要默认使用自定义编辑器,而是允许用户切换到它或将其配置为默认编辑器。

您可以在自定义编辑器扩展指南中了解更多信息。

贡献者.调试器

为 VS Code 贡献一个调试器。调试器贡献具有以下属性:

  • 类型是一个用于在启动配置中识别此调试器的独特ID。
  • Tab是此调试器在用户界面中的用户可见名称。
  • 程序实现 VS Code 调试协议的调试适配器的路径,针对实际的调试器或运行时。
  • 运行时如果调试适配器的路径不是可执行文件,而是需要运行时。
  • 配置属性是此调试器的启动配置参数模式。请注意,JSON模式构造$ref定义不支持。
  • 初始配置列出用于填充初始 launch.json 的启动配置。
  • 配置片段列出在编辑 launch.json 时通过 IntelliSense 可用的启动配置。
  • 变量介绍替换变量并将其绑定到由调试器扩展实现的命令。
  • 语言那些可以被认为是“默认调试器”的语言。

调试器示例

{
  "贡献": {
    "调试器": [
      {
        "类型": "节点",
        "标签": "节点调试",

        "程序""./out/node/nodeDebug.js"
        "运行时""node"

        "languages": ["javascript", "typescript", "javascriptreact", "typescriptreact"],

        "configurationAttributes": {
          "launch": {
            "required": ["program"],
            "properties": {
              "program": {
                "type": "string",
                "description": "The program to debug."
              }
            }
          }
        },

        "initialConfigurations": [
          {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "program": "${workspaceFolder}/app.js"
          }
        ],

        "configurationSnippets": [
          {
            "label": "Node.js: Attach Configuration",
            "description": "A new configuration for attaching to a running node program.",
            "body": {
              "type": "node",
              "request": "attach",
              "name": "${2:Attach to Port}",
              "port": 9229
            }
          }
        ],

        "variables": {
          "PickProcess": "extension.node-debug.pickNodeProcess"
        }
      }
    ]
  }
}

要完整地了解如何整合一个调试器,前往调试器扩展

贡献。语法

为一种语言贡献一个 TextMate 语法。你必须提供语言这个语法适用于 TextMate范围名称对于语法和文件路径。

注意: 包含语法的文件可以是JSON(文件名以.json结尾)或XML plist格式(所有其他文件)。

语法示例

{
  "contributes": {
    "grammars": [
      {
        "language": "markdown",
        "scopeName": "text.html.markdown",
        "path": "./syntaxes/markdown.tmLanguage.json",
        "embeddedLanguages": {
          "meta.embedded.block.frontmatter": "yaml"
        }
      }
    ]
  }
}

参阅语法高亮指南,以了解更多关于如何注册与语言关联的 TextMate 语法,从而获得语法高亮。

语法扩展点示例

贡献的图标

提交一个新的图标ID,以及一个默认图标。然后,图标ID可以被扩展(或任何依赖该扩展的其他扩展)在任何地方使用。主题图标可以使用新的ThemeIcon("iconId")Markdown字符串中 ($(图标ID)),并且作为某些贡献点的图标。

{
  "contributes": {
    "icons": {
      "distro-ubuntu": {
        "description": "Ubuntu icon",
        "default": {
          "fontPath": "./distroicons.woff",
          "fontCharacter": "\\E001"
        }
      },
      "distro-fedora": {
        "description": "Ubuntu icon",
        "default": {
          "fontPath": "./distroicons.woff",
          "fontCharacter": "\\E002"
        }
      }
    }
  }
}

贡献者.图标主题

为 VS Code 贡献一个文件图标主题。文件图标显示在文件名旁边,指示文件类型。

您必须指定一个id(在设置中使用)、一个标签和文件图标定义文件的路径。

文件图标主题示例

{
  "contributes": {
    "iconThemes": [
      {
        "id": "my-cool-file-icons",
        "label": "Cool File Icons",
        "path": "./fileicons/cool-file-icon-theme.json"
      }
    ]
  }
}

文件图标主题扩展点示例

请参阅文件图标主题指南,了解如何创建文件图标主题。

contributes.json验证

贡献一个特定类型的验证模式输入:json文件。对不起,我无法处理这个请求。 value 可以是扩展中包含的模式文件的本地路径或远程服务器 URL,例如 json schema store

{
  "贡献": {
    "JSON验证": [
      {
        "文件匹配": ".jshintrc",
        "网址": "https://json.schemastore.org/jshintrc"
      }
    ]
  }
}

贡献键绑定

贡献一个键绑定规则,定义当用户按下一组键时应调用什么命令。请参阅键绑定主题,其中详细解释了键绑定。

提交一个键绑定将使默认键盘快捷键显示您的规则,并且每个命令的用户界面表示现在将显示您添加的键绑定。 当然,当用户按下键组合时,命令将被调用。

注意: 由于 VS Code 在 Windows、macOS 和 Linux 上运行,而这些操作系统上的修饰键有所不同,您可以使用 "key" 来设置默认的键组合,并用特定的平台覆盖它。

注意: 当通过快捷键或命令面板调用命令时,VS Code 将发出一个激活事件 onCommand:${命令}输入:.

键绑定示例

定义 Ctrl+F1 在 Windows 和 Linux 以及 Cmd+F1 在 macOS 上触发 "extension.sayHello"命令:

{
  "contributes": {
    "keybindings": [
      {
        "command": "extension.sayHello",
        "key": "ctrl+f1",
        "mac": "cmd+f1",
        "when": "editorTextFocus"
      }
    ]
  }
}

键绑定扩展点示例

贡献的语言

贡献编程语言的定义。这将引入一种新语言或丰富 VS Code 对语言的了解。

主要影响贡献的语言是:

  • 定义一个语言ID可以在 VS Code API 的其他部分中重复使用,例如vscode.TextDocument.languageId关于语言激活事件。
    • 你可以贡献一个易于阅读的使用别名字段。列表中的第一个项目将被用作可读标签。
  • 关联文件名扩展名 (扩展), 文件名 (文件名),文件名 通配符 (文件名模式), 以特定行(如哈希行)开头的文件 (第一行), 和媒体类型到那里语言ID输入:.
  • 为贡献的语言贡献一组声明性语言特性。在语言配置指南中了解更多关于可配置编辑功能的信息。
  • 贡献一个图标,如果主题中没有该语言的图标,可以作为文件图标主题使用。

语言示例

{
  "contributes": {
    "languages": [
      {
        "id": "python",
        "extensions": [".py"],
        "aliases": ["Python", "py"],
        "filenames": [],
        "firstLine": "^#!/.*\\bpython[0-9.-]*\\b",
        "configuration": "./language-configuration.json",
        "icon": {
          "light": "./icons/python-light.png",
          "暗色": "./icons/python-dark.png"
        }
      }
    ]
  }
}

贡献.menus

为编辑器或资源管理器贡献一个菜单项用于命令。菜单项定义包含所选时应调用的命令和该项应显示的条件。后者是通过定义的 子句,使用键绑定 当子句上下文

一个命令属性表示在选择菜单项时要运行哪个命令。A子菜单属性指示在此位置渲染哪个子菜单。

当声明一个命令菜单项,也可以使用 来定义一个替代命令输入:alt-属性。当按住Alt键打开菜单时,它将显示和调用。在Windows和Linux系统上Shift键也有同样的效果,这在Alt键会触发Windows菜单栏的情况下很有用。

最后,一个属性定义了菜单项的排序和分组。导航组是特殊的,因为它将始终被排序到菜单的顶部/开头。

注意 条款适用于菜单和启用条文到指令。启用适用于所有菜单和甚至键绑定,当……仅适用于单个菜单。

目前,插件作者可以贡献到:

  • 命令面板- 全局命令面板
  • 评论/评论/标题- 评论标题菜单栏
  • 评论/评论/上下文- 评论上下文菜单
  • 评论/评论线程/标题- 评论线程标题菜单栏
  • 评论/评论线程/上下文- 评论线程上下文菜单
  • 调试/调用栈/上下文- 调试调用堆栈查看上下文菜单
  • 调试/调用栈/上下文内联- 调试调用堆栈视图内联操作
  • 调试/工具栏- 调试视图工具栏
  • 调试/变量/上下文- 调试变量视图上下文菜单
  • 编辑/上下文- 编辑器上下文菜单
  • 编辑器/行号/上下文- 编辑器行号上下文菜单
  • 编辑/标题- 编辑器标题菜单栏
  • 编辑/标题/上下文- 编辑器标题上下文菜单
  • 编辑/标题/运行- 在编辑器标题菜单栏上运行子菜单
  • 探索者/上下文- 接索者视图上下文菜单
  • 扩展/上下文- 扩展视图上下文菜单
  • 文件/新建文件 - 文件菜单和欢迎页面中的新文件项目
  • 交互/工具栏- 交互式Windows工具栏
  • 交互/单元/标题- 交互式Windows单元标题菜单栏
  • 笔记本/工具栏- 笔记本工具栏
  • 笔记本/单元格/标题- 笔记本单元格标题菜单栏
  • 笔记本/单元格/执行- 笔记本单元格执行菜单
  • scm/标题 - SCM 标题菜单
  • scm/资源组/上下文 - SCM 资源组 菜单
  • scm/资源文件夹/上下文 - SCM 资源文件夹 菜单
  • scm/资源状态/上下文 - SCM 资源 菜单
  • scm/更改/标题 - SCM更改标题 菜单
  • scm/仓库 - SCM 仓库菜单
  • scm/源代码控制- SCM 源代码控制菜单
  • 终端/上下文终端上下文菜单
  • 终端/标题/上下文终端标题上下文菜单
  • 测试/项目/上下文- 测试浏览器项目上下文菜单
  • 测试/项目/排水沟- 考试项目的排水沟装饰菜单
  • 时间线/标题- 时间线视图标题菜单栏
  • 时间线/项目/上下文- 时间轴视图项目上下文菜单
  • 触控栏- macOS 触摸栏
  • 查看/标题 - 查看标题菜单
  • 查看/项目/上下文 - 查看项目上下文菜单
  • 网页视图/上下文 - 任何 网页视图 上下文菜单
  • 任何贡献的子菜单

注释 1: 当从(上下文)菜单调用命令时,VS Code 会尝试推断当前选择的资源,并在调用命令时将其作为参数传递。例如,资源浏览器中的菜单项会传递所选资源的 URI,而编辑器中的菜单项会传递文档的 URI。

注释2: 菜单项贡献的命令 编辑器/行号/上下文还传递行号。此外,这些项目可以引用编辑器行号上下文密钥在他们的条款,例如通过使用不在操作符以测试它与扩展管理的数组值上下文键。

除了标题,贡献的命令还可以指定 VS Code 在调用菜单项以按钮形式显示时将显示的图标,例如在标题菜单栏上。

这是一个命令菜单项:

{
  "contributes": {
    "menus": {
      "editor/title": [
        {
          "when": "resourceLangId == markdown",
          "command": "markdown.showPreview",
          "alt": "markdown.showPreviewToSide",
          "group": "navigation"
        }
      ]
    }
  }
}

菜单扩展点示例

同样地,这里是一个命令菜单项添加到特定视图中。下面的示例对终端等任意视图都有贡献:

{
  "contributes": {
    "menus": {
      "view/title": [
        {
          "command": "terminalApi.sendText",
          "when": "view == terminal",
          "group": "navigation"
        }
      ]
    }
  }
}

将一个菜单项添加到view/title,当view == terminal时,终端打开时将在面板上执行一个操作。

这是一个子菜单项:

{
  "contributes": {
    "menus": {
      "scm/title": [
        {
          "submenu": "git.commit",
          "group": "2_main@1",
          "when": "scmProvider == git"
        }
      ]
    }
  }
}

菜单扩展点示例(子菜单)

命令面板菜单项的上下文特定可见性

当在中注册命令时package.json,它们将自动显示在命令面板中 (⇧⌘P(Windows, Linux Ctrl+Shift+P)。为了允许对命令可见性进行更多控制,有命令面板菜单项。它允许您定义一个 条件以控制命令是否应在 命令面板 中显示。

下面的片段使“Hello World”命令仅在编辑器中选择某内容时在命令面板中可见:

{
  "commands": [
    {
      "command": "extension.sayHello",
      "title": "Hello World"
    }
  ],
  "menus": {
    "commandPalette": [
      {
        "command": "extension.sayHello",
        "when": "editorHasSelection"
      }
    ]
  }
}

分组排序

菜单项可以被分组。它们按字典顺序排序,有以下默认规则。 您可以将菜单项添加到这些组中,或在其中添加新的菜单项组,可以放在上面、下面或中间。

编辑上下文菜单有这些默认组:

  • 导航- 导航在所有情况下,团队都是第一位的。
  • 1_修改- 该组接下来,并包含修改您代码的命令。
  • 9_剪切复制粘贴- 第二个默认组,带有基本编辑命令。
  • z_命令- 最后一个默认组,带有打开命令面板的条目。

菜单组排序

资源管理器上下文菜单有这些默认组:

  • 导航- 与 VS Code 跨导航相关的命令。在所有情况下,此组命令优先。
  • 2_工作区- 与工作区操作相关的命令。
  • 3_比较- 与差异编辑器中比较文件相关的命令。
  • 4_搜索- 与搜索视图中搜索相关的命令。
  • 5_剪切复制粘贴- 与文件剪切、复制和粘贴相关的命令。
  • 6_复制路径- 与复制文件路径相关的命令。
  • 7_修改- 与文件修改相关的命令。

编辑标签上下文菜单有这些默认组:

  • 1_关闭- 与关闭编辑器相关的命令。
  • 3_预览- 与固定编辑相关的命令。

编辑标题菜单有这些默认组:

  • 导航- 与导航相关的命令。
  • 1_运行- 与运行和调试编辑器相关的命令。
  • 1_差值- 与使用 diff 编辑器相关的命令。
  • 3_打开- 与打开编辑器相关的命令。
  • 5_关闭- 与关闭编辑器相关的命令。

导航1_运行主要编辑器标题区域显示。其他组显示在次要区域 - 在请输入具体的网页文本内容,以便我进行翻译。菜单。

终端标签上下文菜单有这些默认组:

  • 1_创建- 与创建终端相关的命令。
  • 3_运行- 与在终端中运行/执行某些内容相关的命令。
  • 5_管理- 与终端管理相关的命令。
  • 7_配置- 与终端配置相关的命令。

终端上下文菜单有这些默认组:

  • 1_创建- 与创建终端相关的命令。
  • 3_编辑- 与文本、选择或剪贴板操作相关的命令。
  • 5_清除- 与清除终端相关的命令。
  • 7_杀- 与关闭/终止终端相关的命令。
  • 9_配置- 与终端配置相关的命令。

时间轴视图项目上下文菜单具有这些默认组:

  • 内联- 重要或频繁使用的时间轴项目命令。以工具栏形式呈现。
  • 1_操作- 与时间线项目操作相关的命令。
  • 5_副本- 与复制时间轴项目信息相关的命令。

扩展视图上下文菜单有这些默认组:

  • 1_副本- 与复制扩展信息相关的命令。
  • 2_配置- 与配置扩展相关的命令。

组内排序

组内的顺序取决于标题或顺序属性。菜单项的组内顺序通过附加@<数字>到组标识符如下所示:

{
  "editor/title": [
    {
      "when": "editorHasSelection",
      "command": "extension.Command",
      "group": "myGroup@1"
    }
  ]
}

贡献问题匹配器

贡献问题匹配器模式。这些贡献在输出面板运行器和终端运行器中都有效。以下是在扩展中为gcc编译器贡献问题匹配器的示例:

{
  "contributes": {
    "problemMatchers": [
      {
        "name": "gcc",
        "owner": "cpp",
        "fileLocation": ["relative", "${workspaceFolder}"],
        "pattern": {
          "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
          "file": 1,
          "line": 2,
          "column": 3,
          "severity": 4,
          "message": 5
        }
      }
    ]
  }
}

这个问题匹配器现在可以用于一个任务.json通过名称引用文件$gcc例如,看起来像这样:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build",
      "command": "gcc",
      "args": ["-Wall", "helloWorld.c", "-o", "helloWorld"],
      "problemMatcher": "$gcc"
    }
  ]
}

另见: 定义问题匹配器

贡献.问题模式

贡献命名的问题模式,这些模式可以用于问题匹配器(见上文)。

贡献产品图标主题

为 VS Code 贡献一个产品图标主题。产品图标是指在 VS Code 中使用的所有图标,不包括文件图标和来自扩展的图标。

您必须指定一个id(在设置中使用)、一个标签和图标定义文件的路径。

产品图标主题示例

{
  "contributes": {
    "productIconThemes": [
      {
        "id": "elegant",
        "label": "优雅图标主题",
        "path": "./producticons/elegant-product-icon-theme.json"
      }
    ]
  }
}

产品图标主题扩展点示例

请参阅产品图标主题指南,了解如何创建产品图标主题。

贡献的资源标签格式化器

贡献资源标签格式化器,以指定如何在工作台的各个方面显示URI。例如,这里是如何贡献一个用于具有特定方案的URI的格式化器的示例。远程中心输入:

{
  "contributes": {
    "resourceLabelFormatters": [
      {
        "scheme": "remotehub",
        "formatting": {
          "label": "${path}",
          "separator": "/",
          "workspaceSuffix": "GitHub"
        }
      }
    ]
  }
}

这意味着所有具有方案的URI远程中心将通过仅显示来呈现路径URI 的段和分隔符将输入:/. 工作区具有远程中心URI 的标签将带有 GitHub 后缀。

贡献语义标记修饰符

贡献新的语义标记修饰符,可以通过主题规则进行突出显示。

{
  "contributes": {
    "semanticTokenModifiers": [
      {
        "id": "native",
        "description": "Annotates a symbol that is implemented natively"
      }
    ]
  }
}

查看语义突出显示指南以了解更多关于语义突出显示的信息。

贡献语义标记作用域

贡献语义标记类型和修改符与作用域之间的映射,作为备用或支持特定语言的主题。

{
  "contributes": {
    "semanticTokenScopes": [
      {
        "language": "typescript",
        "scopes": {
          "property.readonly": ["variable.other.constant.property.ts"]
        }
      }
    ]
  }
}

查看语义突出显示指南以了解更多关于语义突出显示的信息。

贡献语义标记类型

贡献新的语义标记类型,可以通过主题规则进行突出显示。

{
  "贡献": {
    "语义标记类型": [
      {
        "id": "模板类型",
        "超级类型": "类型",
        "描述": "一种模板类型。"
      }
    ]
  }
}

查看语义突出显示指南以了解更多关于语义突出显示的信息。

贡献片段

贡献特定语言的片段。语言 属性是 语言标识符路径 是相对于片段文件的相对路径,该文件在 VS Code片段格式中定义了片段

下面的示例展示了为 Go 语言添加片段。

{
  "贡献": {
    "片段": [
      {
        "语言": "go",
        "路径": "./片段/go.json"
      }
    ]
  }
}

贡献子菜单

贡献一个子菜单作为占位符,然后可以贡献菜单项。子菜单需要一个Tab将在父菜单中显示。

除了标题,命令还可以定义 VS Code 在编辑器标题菜单栏中显示的图标。

{
  "contributes": {
    "submenus": [
      {
        "id": "git.commit",
        "label": "提交"
      }
    ]
  }
}

子菜单扩展点示例

贡献任务定义。

贡献并定义了一个对象字面量结构,允许在系统中唯一标识一个贡献的任务。任务定义至少包括一个类型属性,但它通常定义额外的属性。例如,一个代表 package.json 文件中脚本的任务定义如下所示:

{
  "taskDefinitions": [
    {
      "type": "npm",
      "required": ["script"],
      "properties": {
        "script": {
          "type": "string",
          "description": "The script to execute"
        },
        "path": {
          "type": "string",
          "description": "The path to the package.json file. If omitted the package.json in the root of the workspace folder is used."
        }
      }
    }
  ]
}

任务定义使用JSON模式语法必需的属性财产。类型属性定义了任务类型。如果上面的示例:

  • "类型": "npm"将任务定义与npm任务关联
  • "required": [ "脚本" ]定义了脚本将以下属性设为必填。路径属性是可选的。
  • "属性" : { ... }定义了附加属性及其类型。

当扩展实际创建一个任务时,它需要传递一个任务定义符合 package.json 文件中定义的任务。对于npm示例:在 package.json 文件中为测试脚本创建任务如下所示:

 任务 = 新的 vscode.任务({ 类型: 'npm', 脚本: 'test' }, ....);

贡献。终端

为 VS Code 贡献终端配置文件,允许扩展处理终端配置文件的创建。当定义时,配置文件应在创建终端配置文件时显示。

{
  "activationEvents": ["onTerminalProfile:my-ext.terminal-profile"],
  "contributes": {
    "terminal": {
      "profiles": [
        {
          "title": "来自扩展的配置文件",
          "id": "my-ext.terminal-profile"
        }
      ]
    }
  }
}

当定义时,该配置文件将在终端配置文件选择器中显示。当激活时,通过返回终端选项来处理配置文件的创建:

vscode.Windows.注册终端配置提供程序('my-ext.terminal-profile', {
  提供终端配置(
    令牌: vscode.取消令牌
  ): vscode.提供者结果<vscode.终端选项 | vscode.扩展终端选项> {
    返回 { 名称: '扩展中的配置', 壳路径: 'bash' };
  }
});

贡献主题。

为 VS Code 贡献一个颜色主题,定义工作区颜色和编辑器中语法标记的样式。

您必须指定一个标签,无论是暗色主题还是亮色主题(使 VS Code 的其余部分更改以匹配您的主题),以及文件的路径(JSON 格式)。

主题示例

{
  "contributes": {
    "themes": [
      {
        "label": "Monokai",
        "uiTheme": "vs-dark",
        "path": "./themes/monokai-color-theme.json"
      }
    ]
  }
}

颜色主题扩展点示例

请参阅颜色主题指南了解如何创建颜色主题。

贡献的类型脚本服务器插件

贡献 TypeScript 服务器插件 以增强 VS Code 的 JavaScript 和 TypeScript 支持:

{
  "contributes": {
    "typescriptServerPlugins": [
      {
        "name": "typescript-styled-plugin"
      }
    ]
  }
}

上面的示例扩展贡献了typescript-styled-plugin这将为JavaScript和TypeScript添加styled-component的IntelliSense。此插件将从扩展中加载,并且必须像普通NPM一样进行安装。依赖在扩展中:

{
  "依赖项": {
    "typescript-styled-plugin": "*"
  }
}

当用户使用 VS Code 的 TypeScript 版本时,TypeScript 服务器插件会加载所有 JavaScript 和 TypeScript 文件。如果用户使用的是工作区版本的 TypeScript,则不会激活,除非插件明确设置"enableForWorkspaceTypeScriptVersions": true输入:.

{
  "contributes": {
    "typescriptServerPlugins": [
      {
        "name": "typescript-styled-plugin",
        "enableForWorkspaceTypeScriptVersions": true
      }
    ]
  }
}

插件配置

扩展可以通过 VS Code 内置的 TypeScript 扩展提供的 API 向贡献的 TypeScript 插件发送配置数据:

// 在你的 VS Code 扩展中

export async function activate(context: vscode.ExtensionContext) {
  // Get the TS extension
  const tsExtension = vscode.extensions.getExtension('vscode.typescript-language-features');
  if (!tsExtension) {
    return;
  }

  await tsExtension.activate();

  // Get the API from the TS extension
  if (!tsExtension.exports || !tsExtension.exports.getAPI) {
    return;
  }

  const api = tsExtension.exports.getAPI(0);
  if (!api) {
    return;
  }

  // 配置 'my-typescript-plugin-id' 插件
  api.configurePlugin('my-typescript-plugin-id', {
    someValue: process.env['SOME_VALUE']
  });
}

TypeScript服务器插件通过一个接收配置数据onConfigurationChanged方法:

// 在你的TypeScript插件中

导入 * 作为 ts_module 'typescript/lib/tsserverlibrary';

export = function init({ typescript }: { typescript: typeof ts_module }) {
  return {
    create(info: ts.server.PluginCreateInfo) {
      // Create new language service
    },
    onConfigurationChanged(config: any) {
      // Receive configuration changes sent from VS Code
    }
  };
};

此 API 允许 VS Code 扩展将 VS Code 设置与 TypeScript 服务器插件同步,或动态更改插件的行为。请参阅 TypeScript TSLint 插件 lit-html 扩展,以了解此 API 在实际中的使用方法。

贡献.视图

向 VS Code 贡献视图。您必须指定视图的标识符和名称。您可以贡献到以下视图容器:

  • 探险者: 在活动栏中查看容器
  • scm源代码管理 (SCM) 视图容器在活动栏中
  • 调试在活动栏中运行和调试视图容器
  • 测试测试视图容器在活动栏中
  • 自定义视图容器 由扩展提供。

当用户打开视图时,VS Code 将会触发一个激活事件.onView:${viewId}输入:在查看:节点依赖例如下面的)。您还可以通过提供来控制视图的可见性上下文值。图标当标题无法显示时(例如将视图拖动到活动栏时),将使用指定的标题。上下文标题当视图移出其默认视图容器并需要额外上下文时使用。

{
  "contributes": {
    "views": {
      "explorer": [
        {
          "id": "nodeDependencies",
          "name": "Node Dependencies",
          "when": "workspaceHasPackageJSON",
          "icon": "media/dep.svg",
          "contextualTitle": "Package Explorer"
        }
      ]
    }
  }
}

视图扩展点示例

视图的内容可以通过两种方式填充:

贡献视图容器

贡献一个视图容器,自定义视图可以贡献到该容器中。你必须为视图容器指定一个标识符、标题和图标。目前,你可以将它们贡献到活动栏 (活动栏) 和面板 (面板)。以下示例展示了如何包资源管理器视图容器是如何贡献到活动栏的,以及视图是如何贡献到活动栏的。

{
  "contributes": {
    "viewsContainers": {
      "activitybar": [
        {
          "id": "package-explorer",
          "title": "Package Explorer",
          "icon": "resources/package-explorer.svg"
        }
      ]
    },
    "views": {
      "package-explorer": [
        {
          "id": "package-dependencies",
          "name": "Dependencies"
        },
        {
          "id": "package",
          "name": "Outline"
        }
      ]
    }
  }
}

自定义视图容器

图标规格

  • 尺寸:图标应为24x24并居中。

  • 颜色:图标应使用单一颜色。

  • 格式:建议图标使用SVG格式,但接受任何图像文件类型。

  • 州:所有图标继承以下状态样式:

    不透明度
    默认 60%
    悬停 100%
    活跃 100%

欢迎贡献视图

欢迎贡献内容到自定义视图。欢迎内容仅适用于空树视图。如果树没有子项且没有TreeView.消息通常情况下,任何单独占一行的命令链接都会显示为一个按钮。你可以通过指定视图来定义欢迎内容应该应用于哪个视图。视图属性。欢迎内容的可见性可以通过上下文值。要显示的欢迎内容设置为目录财产。

{
  "contributes": {
    "viewsWelcome": [
      {
        "view": "scm",
        "contents": "In order to use git features, you can open a folder containing a git repository or clone from a URL.\n[Open Folder](command:vscode.openFolder)\n[Clone Repository](command:git.clone)\nTo learn more about how to use git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).",
        "when": "config.git.enabled && git.state == initialized && workbenchState == empty"
      }
    ]
  }
}

欢迎内容示例

多个欢迎内容项可以贡献到一个视图中。当这种情况发生时,来自 VS Code 核心的内容会优先显示,其次是来自内置扩展的内容,最后是来自所有其他扩展的内容。

贡献。指导手册

示例扩展

贡献入门指南以显示在“入门”页面上。入门指南在安装您的扩展时会自动打开,并提供一种方便的方法向用户介绍您的扩展的功能。

指南包括标题、描述、id和一系列步骤。此外,一个条件可以设置为根据上下文密钥隐藏或显示引导。例如,一个在Linux平台上解释设置的引导可以被提供。何时:"是Linux"仅在 Linux 机器上出现。

每个操作指南的步骤都有一个标题、描述、ID、媒体元素(图像或Markdown内容)以及一个可选的事件集,这些事件将导致该步骤被检查(在下面的示例中显示)。步骤描述是Markdown内容,并支持**加粗**下划线,和``代码``渲染以及链接。类似于走查,可以根据上下文键隐藏或显示步骤。

由于SVGs能够缩放并且支持VS Code的主题颜色,因此推荐用于图像。使用Visual Studio Code Color Mapper Figma插件可以轻松地在SVG中引用主题颜色。

{
  "contributes": {
    "walkthroughs": [
      {
        "id": "sample",
        "title": "Sample",
        "description": "A sample walkthrough",
        "steps": [
          {
            "id": "runcommand",
            "title": "Run Command",
            "description": "This step will run a command and check off once it has been run.\n[Run Command](command:getting-started-sample.runCommand)",
            "media": { "image": "media/image.png", "altText": "Empty image" },
            "completionEvents": ["onCommand:getting-started-sample.runCommand"]
          },
          {
            "id": "changesetting",
            "title": "Change Setting",
            "description": "This step will change a setting and check off when the setting has changed\n[Change Setting](command:getting-started-sample.changeSetting)",
            "media": { "markdown": "media/markdown.md" },
            "completionEvents": ["onSettingChanged:getting-started-sample.sampleSetting"]
          }
        ]
      }
    ]
  }
}

示例指南

完成事件

默认情况下,如果没有完成事件如果提供了事件,当点击其中任意一个按钮时,或打开该步骤时,该步骤将被勾选。如果需要更精细的控制,可以使用列表完成事件可以提供。

可用的完成事件包括:

  • onCommand:myCommand.id: 标记命令已运行的步骤。
  • onSettingChanged:mySetting.id: 在给定设置修改完成后勾选步骤。
  • 上下文:上下文键表达式: 当上下文键表达式为真时,勾选步骤。
  • 扩展已安装:myExt.id如果已安装指定的扩展,请勾选此步骤。
  • 在视图上:myView.id: 检查步骤,当给定视图变得可见时。
  • onLink:https://...: 在通过 Walkthrough 打开某个链接后,勾选该步骤。

一旦一个步骤被勾选,它将保持勾选状态,直到用户明确取消勾选该步骤或重置他们的进度(通过入门:重置进度命令)。