入门 Zed Industries 2026-09-14 17:42:20 · 0 阅读

第122章 Zed 编辑器原生支持 YAML:配置、Schema 与格式化指南

Zed 原生支持 YAML。

配置

你可以将 yaml-language-server 设置 添加到 Zed 的 settings.json 文件中,放置在 lsp 键下的 yaml-language-server 块中,从而配置相关选项。

支持使用相对路径配置自定义 YAML Schema。Zed 会以项目根目录为基准解析路径:

  "lsp": {
    "yaml-language-server": {
      "settings": {
        "yaml": {
          "keyOrdering": true,
          "format": {
            "singleQuote": true
          },
          "schemas": {
              "https://getcomposer.org/schema.json": ["/*"],
              "./schemas/kubernetes.yaml": "k8s/**/*.yaml",
              "~/global-schemas/docker-compose.yaml": "docker-compose*.yml"
          }
        }
      }
    }
  }

./ 开头的路径相对于 worktree 根目录解析;以 ~/ 开头的路径会展开为用户主目录。

注意,设置键名必须嵌套表示,因此 yaml.keyOrdering 应写成 {"yaml": { "keyOrdering": true }}

格式化

默认情况下,Zed 使用 Prettier 格式化 YAML 文件。

Prettier 格式化

可以自定义 Prettier 的格式化行为。例如,若要在 YAML 文件中使用单引号,请在 .prettierrc 配置文件中添加以下内容:

{
  "overrides": [
    {
      "files": ["*.yaml", "*.yml"],
      "options": {
        "singleQuote": false
      }
    }
  ]
}

yaml-language-server 格式化

若希望使用 yaml-language-server 而非 Prettier 来格式化 YAML,请在设置({#kb zed::OpenSettings})中的“Languages > YAML”部分进行配置,或将其添加到你的设置文件中:

  "languages": {
    "YAML": {
      "formatter": "language_server"
    }
  }

Schemas

默认情况下,yaml-language-server 会尝试为给定的 YAML 文件确定正确的 Schema,并从 Json Schema Store 中获取相应的 JSON Schema。

你可以通过 schemas 设置项(如上所示)或通过在 YAML 文件顶部使用 modeline 注释提供内联 Schema引用来覆盖自动检测的 Schema:

# yaml-language-server: $schema=https://www.schemastore.org/github-action.json
name: Issue Assignment
on:
  issues:
    types: [opened]

如有需要,你可以禁用从 JSON Schema 自动检测和获取 Schema 的功能:

  "lsp": {
    "yaml-language-server": {
      "settings": {
        "yaml": {
          "schemaStore": {
            "enable": false
          }
        }
      }
    }
  }

Custom Tags

Yaml-language-server 支持自定义标签,可在运行时将自定义应用程序功能注入到 YAML 文件中。

例如,Amazon CloudFormation YAML 使用了多个自定义标签。为支持这些标签,你可以在 settings.json 中添加以下内容:

  "lsp": {
    "yaml-language-server": {
      "settings": {
        "yaml": {
          "customTags": [
            "!And scalar",
            "!And mapping",
            "!And sequence",
            "!If scalar",
            "!If mapping",
            "!If sequence",
            "!Not scalar",
            "!Not mapping",
            "!Not sequence",
            "!Equals scalar",
            "!Equals mapping",
            "!Equals sequence",
            "!Or scalar",
            "!Or mapping",
            "!Or sequence",
            "!FindInMap scalar",
            "!FindInMap mapping",
            "!FindInMap sequence",
            "!Base64 scalar",
            "!Base64 mapping",
            "!Base64 sequence",
            "!Cidr scalar",
            "!Cidr mapping",
            "!Cidr sequence",
            "!Ref scalar",
            "!Ref mapping",
            "!Ref sequence",
            "!Sub scalar",
            "!Sub mapping",
            "!Sub sequence",
            "!GetAtt scalar",
            "!GetAtt mapping",
            "!GetAtt sequence",
            "!GetAZs scalar",
            "!GetAZs mapping",
            "!GetAZs sequence",
            "!ImportValue scalar",
            "!ImportValue mapping",
            "!ImportValue sequence",
            "!Select scalar",
            "!Select mapping",
            "!Select sequence",
            "!Split scalar",
            "!Split mapping",
            "!Split sequence",
            "!Join scalar",
            "!Join mapping",
            "!Join sequence",
            "!Condition scalar",
            "!Condition mapping",
            "!Condition sequence"
          ]
        }
      }
    }
  }

评论 (0)