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

语言配置指南

贡献语言贡献点允许您定义语言配置,以控制以下声明性语言特性:

  • 评论切换
  • 括号的定义
  • 自动关闭
  • 自动环绕
  • 折叠
  • 单词模式
  • 缩进规则

这是一个语言配置示例,用于配置JavaScript文件的编辑体验。本指南解释了语言配置.json输入:

注意:如果您的语言配置文件名是或以语言配置.json, 你将在 VS Code 中获得自动完成和验证。

{
  "comments": {
    "lineComment": "//",
    "blockComment": ["/*", "*/"]
  },
  "brackets": [
    ["{", "}"],
    ["[", "]"],
    ["(", ")"]
  ],
  "autoClosingPairs": [
    { "open": "{", "close": "}" },
    { "open": "[", "close": "]" },
    { "open": "(", "close": ")" },
    { "open": "'", "close": "'", "notIn": ["string", "comment"] },
    { "open": "\"", "close": "\"", "notIn": ["string"] },
    { "open": "`", "close": "`", "notIn": ["string", "comment"] },
    { "open": "/**", "close": " */", "notIn": ["string"] }
  ],
  "autoCloseBefore": ";:.,=}])>` \n\t",
  "surroundingPairs": [
    ["{", "}"],
    ["[", "]"],
    ["(", ")"],
    ["'", "'"],
    ["\"", "\""],
    ["`", "`"]
  ],
  "folding": {
    "markers": {
      "start": "^\\s*//\\s*#?region\\b",
      "end": "^\\s*//\\s*#?endregion\\b"
    }
  },
  "wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)",
  "缩进规则": {
    "增加缩进模式": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
    "减少缩进模式": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
  }
}

评论切换

VS Code 提供了两个命令用于注释切换。切换行注释切换块注释。你可以指定注释.块注释评论.行评论控制 VS Code 应该如何注释掉行/块。

{
  "注释": {
    "行注释": "//",
    "块注释": ["/*", "*/"]
  }
}

括号的定义

当您将光标移动到此处定义的括号时,VS Code 将会高亮显示该括号及其匹配对。

{
  "括号": [
    ["{", "}"
    ["[", "]"],
    ["(", ")"]
  ]
}

此外,当您运行 转到括号选择到括号 时,VS Code 将使用上面的定义来查找最近的括号及其匹配对。

自动关闭

当你输入'VS Code 会创建一对单引号,并将光标放在中间:'|'本节定义了这样的对。

{
  "autoClosingPairs": [
    { "open": "{", "close": "}" },
    { "open": "[", "close": "]" },
    { "open": "(", "close": ")" },
    { "open": "'", "close": "'", "notIn": ["string", "comment"] },
    { "open": "\"", "关闭": "\"", "不在": ["字符串"] },
    { "打开": "`", "关闭": "`", "不在": ["字符串", "注释"] },
    { "打开": "/**", "关闭": " * /", "不在": ["字符串"] }
  ]
}

不在某些代码范围内,按 key 可禁用此功能。例如,当您编写以下代码时:

// ES6的模板字符串
ES6的模板字符串;

单引号不会自动关闭。

不需要配对不在属性也可以使用更简单的语法:

{
  "自动闭合对">: [
    ["{", "}"],
    ["[", "]"]
  ]
}

用户可以使用以下选项调整自动关闭行为编辑器.自动关闭引号编辑器.自动关闭括号设置。

自动关闭之前

默认情况下,VS Code 只会在光标后有空格时自动关闭匹配的括号。所以当你输入{在下面的 JSX 代码中,您将无法获得自动关闭:

const Component = () =>
  <div className={>
                  ^ 不会 自动 关闭 默认  </
  div>

然而,此定义覆盖了该行为:

{
  "自动关闭之前": ";:.,=}])>` \n\t"
}

现在当你输入{就在...之前>, VS Code自动关闭它}输入:.

自动环绕

当你在 VS Code 中选择一段范围并输入一个开括号时,VS Code 会用一对括号包围所选内容。这个功能叫做自动包围,你可以在特定语言中定义自动包围的括号对:

{
  "括号对": [
    ["{", "}"
    ["[", "]"],
    ["(", ")"],
    ["\'", "\'"],
    ["\"", "\""],
    ["`", "`"]
  ]
}

用户可以调整自动环绕行为编辑器.自动包围设置。

折叠

在 VS Code 中,折叠可以基于缩进定义,或者由贡献的折叠范围提供程序定义:

  • 基于缩进的折叠与标记:如果给定语言没有可用的折叠范围提供者,或者用户已设置编辑器.折叠策略缩进, 基于缩进的折叠被使用。当一行的缩进比其后的零个或多个行更小时,折叠区域开始,当出现具有相同或更小缩进的行时,折叠区域结束。空行被忽略。 此外,语言配置可以定义开始和结束标记。这些被定义为开始结束正则表达式在折叠标记当找到匹配的行时,在这对之间会创建一个折叠范围。折叠标记必须是非空的,通常看起来像//#区域//#endregion输入:.

以下JSON创建折叠标记用于//#区域//#endregion输入:.

{
  "折叠": {
    "标记": {
      "开始": "^\\s*//\\s*#?区域\\b",
      "结束": "^\\s*//\\s*#?区域结束\\b"
    }
  }
}
  • 语言服务器折叠:语言服务器响应文本文档/折叠范围请求折叠范围列表,VS Code 会将这些范围渲染为折叠标记。在 编程语言特性 话题中了解更多关于 Language Server Protocol 的折叠支持。

单词模式

单词模式定义了在编程语言中什么是被视为一个单词。代码建议功能将使用此设置来确定单词的边界,如果单词模式已设置。请注意,此设置不会影响与单词相关的编辑命令,这些命令由编辑器设置控制。编辑器.单词分隔符输入:.

{
  "wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)"
}

缩进规则

缩进规则定义了当您键入、粘贴和移动行时,编辑器应如何调整当前行或下一行的缩进。

{
  "缩进规则": {
    "增加缩进模式": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
    "减少缩进模式": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
  }
}

例如,if (true) {比赛增加缩进模式,然后如果你在左括号按回车键{, 编辑器将自动缩进一次,你的代码将如下所示:

如果 () {
  控制台.记录();

此外增加缩进模式减少缩进模式还有另外两种缩进规则:

  • 缩进下一行模式 - 如果一行符合此模式,则仅在其后的下一行应缩进一次。
  • 未缩进的行模式- 如果某行符合此模式,则不应更改其缩进,也不应与其他规则进行比较。

如果编程语言没有设置缩进规则,编辑器将在行以左括号结束时进行缩进,并在您输入右括号时进行取消缩进。这里的括号由括号输入:.

请注意编辑器.粘贴时格式化设置由控制文档范围格式化编辑提供者并且不受自动缩进的影响。

进入规则

进入规则 定义了一组规则,这些规则将在 按回车键 时在编辑器中进行评估。

{
  "onEnterRules": [
    {
      "beforeText": "^\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async).*>:\\s*$",
      "action": { "indent": "indent" }
    }
  ]
}

当按回车键时,光标前、后或一行上的文本会与以下属性进行比较:

  • 之前文本(必填)。一个正则表达式,匹配光标前的文本(限制在当前行)。
  • 文本后匹配光标之后的文本(限于当前行)的正则表达式。
  • 上一行文本匹配光标上一行文本的正则表达式。

如果所有指定的属性都匹配,则该规则被认为匹配,并且不再进一步进入规则将被评估。一个进入规则可以指定以下操作:

  • 缩进(必填)。以下是其中一个无, 缩进, 凸出, 缩进凸出
    • 这意味着新行将继承当前行的缩进。
    • 缩进这意味着新行将相对于当前行缩进。
    • 凸出这意味着新行将相对于当前行取消缩进。
    • 缩进 凸出这意味着将插入两条新行,一条缩进,另一条不缩进。
  • 追加文本. 一个将在新行和缩进之后附加的字符串。
  • 移除文本从新行缩进中移除的字符数量。