配置支持的语言

Zed 为其支持的每种编程语言提供了强大的自定义选项。本指南将引导您了解如何根据您的偏好和项目要求来定制您的编码体验。

Zed 的语言支持构建在两个主要技术之上

  1. Tree-sitter:这处理语法高亮和基于结构的特性,如大纲面板。
  2. 语言服务器协议 (LSP):这提供语义特性,如代码完成和诊断。

这些组件协同工作,提供 Zed 的语言能力。

在本指南中,我们将介绍

  • 特定于语言的设置
  • 文件关联
  • 使用语言服务器
  • 格式化和代码检查配置
  • 自定义语法高亮和主题
  • 高级语言特性

在本指南结束时,您应该知道如何在 Zed 中配置和自定义支持的语言。

有关 Zed 支持的语言及其具体配置的完整列表,请参阅我们的支持的语言页面。 为了更进一步,您可以探索开发自己的扩展来添加对其他语言的支持或增强现有功能。 有关创建语言扩展的更多信息,请参阅我们的语言扩展指南。

特定于语言的设置

Zed 允许您覆盖单个语言的全局设置。 这些自定义配置在您的 settings.json 文件中的 languages 键下定义。

这是一个特定于语言的设置的示例

"languages": {
  "Python": {
    "tab_size": 4,
    "formatter": "language_server",
    "format_on_save": "on"
  },
  "JavaScript": {
    "tab_size": 2,
    "formatter": {
      "external": {
        "command": "prettier",
        "arguments": ["--stdin-filepath", "{buffer_path}"]
      }
    }
  }
}

您可以为每种语言自定义各种设置,包括

这些设置允许您在不同的语言和项目中保持特定的编码风格。

文件关联

Zed 会根据文件扩展名自动检测文件类型,但您可以自定义这些关联以适应您的工作流程。

要设置自定义文件关联,请使用 settings.json 中的 file_types 设置

"file_types": {
  "C++": ["c"],
  "TOML": ["MyLockFile"],
  "Dockerfile": ["Dockerfile*"]
}

此配置告诉 Zed

  • .c 文件视为 C++ 而不是 C
  • 将名为“MyLockFile”的文件识别为 TOML
  • 将 Dockerfile 语法应用于任何以“Dockerfile”开头的文件

您可以使用 glob 模式进行更灵活的匹配,从而允许您处理项目中的复杂命名约定。

使用语言服务器

语言服务器是 Zed 智能编码功能的重要组成部分,提供诸如自动完成、转到定义和实时错误检查等功能。

什么是语言服务器?

语言服务器实现语言服务器协议 (LSP),该协议标准化编辑器和特定于语言的工具之间的通信。 这允许 Zed 支持多种编程语言的高级功能,而无需单独实现每个功能。

语言服务器提供的一些关键功能包括

  • 代码完成
  • 错误检查和诊断
  • 代码导航(转到定义、查找引用)
  • 代码操作(重命名、提取方法)
  • 悬停信息
  • 工作区符号搜索

管理语言服务器

Zed 简化了用户的语言服务器管理

  1. 自动下载:当您打开具有匹配文件类型的文件时,Zed 会自动下载相应的语言服务器。 对于已知文件类型,Zed 可能会提示您安装扩展。

  2. 存储位置

    • macOS:~/Library/Application Support/Zed/languages
    • Linux:$XDG_DATA_HOME/languages$FLATPAK_XDG_DATA_HOME/languages$HOME/.local/share
  3. 自动更新:Zed 会使您的语言服务器保持最新状态,确保您始终拥有最新的功能和改进。

选择语言服务器

Zed 中的某些语言提供多种语言服务器选项。 您可能安装了多个捆绑针对同一语言的语言服务器的扩展,这可能会导致功能重叠。 为了确保您获得您喜欢的功能,Zed 允许您确定使用哪些语言服务器以及按什么顺序使用。

您可以使用 language_servers 设置指定您的偏好

  "languages": {
    "PHP": {
      "language_servers": ["intelephense", "!phpactor", "..."]
    }
  }

在此示例中

  • intelephense 设置为主要语言服务器
  • phpactor 已禁用(注意 ! 前缀)
  • ... 扩展到为 PHP 注册的其余语言服务器

此配置允许您根据您的特定需求定制语言服务器设置,确保您获得最适合您开发工作流程的功能。

配置语言服务器

许多语言服务器接受自定义配置选项。 您可以在 settings.jsonlsp 部分中设置这些选项

  "lsp": {
    "rust-analyzer": {
      "initialization_options": {
        "check": {
          "command": "clippy"
        }
      }
    }
  }

此示例配置 Rust Analyzer 在保存文件时使用 Clippy 进行额外的代码检查。

嵌套对象

在 Zed 中配置语言服务器选项时,重要的是使用嵌套对象而不是点分隔的字符串。 这在使用更复杂的配置时尤其重要。 让我们看一个使用 TypeScript 语言服务器的实际示例

假设您要为 TypeScript 配置以下设置

  • 启用严格的空值检查
  • 将目标 ECMAScript 版本设置为 ES2020

以下是如何在 Zed 的 settings.json 中构造这些设置

"lsp": {
  "typescript-language-server": {
    "initialization_options": {
      // These are not supported (VSCode dotted style):
      // "preferences.strictNullChecks": true,
      // "preferences.target": "ES2020"
      //
      // These is correct (nested notation):
      "preferences": {
        "strictNullChecks": true,
        "target": "ES2020"
      },
    }
  }
}

启用或禁用语言服务器

您可以全局或按语言切换语言服务器支持

  "languages": {
    "Markdown": {
      "enable_language_server": false
    }
  }

这将禁用 Markdown 文件的语言服务器,这对于大型文档项目中的性能非常有用。 您可以在 ~/.zed/settings.json 中全局配置此选项,或者在项目目录中的 .zed/settings.json 中配置。

格式化和代码检查

Zed 提供对代码格式化和代码检查的支持,以保持一致的代码风格并尽早发现潜在问题。

配置格式化程序

Zed 支持内置和外部格式化程序。 在您的 settings.json 中全局或按语言配置格式化程序

"languages": {
  "JavaScript": {
    "formatter": {
      "external": {
        "command": "prettier",
        "arguments": ["--stdin-filepath", "{buffer_path}"]
      }
    },
    "format_on_save": "on"
  },
  "Rust": {
    "formatter": "language_server",
    "format_on_save": "on"
  }
}

此示例对 JavaScript 使用 Prettier,对 Rust 使用语言服务器的格式化程序,两者都设置为在保存时进行格式化。

要禁用特定语言的格式化

"languages": {
  "Markdown": {
    "format_on_save": "off"
  }
}

设置代码检查器

Zed 中的代码检查通常由语言服务器处理。 许多语言服务器允许您配置代码检查规则

"lsp": {
  "eslint": {
    "settings": {
      "codeActionOnSave": {
        "rules": ["import/order"]
      }
    }
  }
}

此配置设置 ESLint 以在保存时组织 JavaScript 文件的导入。

要在保存时自动运行代码检查器修复

"languages": {
  "JavaScript": {
    "code_actions_on_format": {
      "source.fixAll.eslint": true
    }
  }
}

集成格式化和代码检查

Zed 允许您在保存时运行格式化和代码检查。 这是一个使用 Prettier 进行格式化和 ESLint 进行代码检查 JavaScript 文件的示例

"languages": {
  "JavaScript": {
    "formatter": {
      "external": {
        "command": "prettier",
        "arguments": ["--stdin-filepath", "{buffer_path}"]
      }
    },
    "code_actions_on_format": {
      "source.fixAll.eslint": true
    },
    "format_on_save": "on"
  }
}

故障排除

如果您遇到格式化或代码检查问题

  1. 检查 Zed 的日志文件是否有错误消息(使用命令面板:zed: open log
  2. 确保外部工具(格式化程序、代码检查器)已正确安装并在您的 PATH 中
  3. 验证 Zed 设置和特定于语言的配置文件(例如,.eslintrc.prettierrc)中的配置

语法高亮和主题

Zed 提供语法高亮和主题的自定义选项,允许您定制代码的视觉外观。

自定义语法高亮

Zed 使用 Tree-sitter 语法进行语法高亮。 使用 experimental.theme_overrides 设置覆盖默认高亮。

此示例使注释变为斜体并更改字符串的颜色

"experimental.theme_overrides": {
  "syntax": {
    "comment": {
      "font_style": "italic"
    },
    "string": {
      "color": "#00AA00"
    }
  }
}

选择和自定义主题

更改您的主题

  1. 使用主题选择器 (cmd-k cmd-t|ctrl-k ctrl-t)
  2. 或在您的 settings.json 中设置它
"theme": {
  "mode": "dark",
  "dark": "One Dark",
  "light": "GitHub Light"
}

通过在 ~/.config/zed/themes/ 中创建一个 JSON 文件来创建自定义主题。 Zed 将自动检测并提供此目录中的任何主题。

使用主题扩展

Zed 支持主题扩展。 从扩展面板浏览和安装主题扩展 (cmd-shift-x|ctrl-shift-x)。

要创建您自己的主题扩展,请参阅开发主题扩展指南。

使用语言服务器功能

内联提示

内嵌提示在您的代码中以内联方式提供额外信息,例如参数名称或推断的类型。在您的 settings.json 中配置内嵌提示

"inlay_hints": {
  "enabled": true,
  "show_type_hints": true,
  "show_parameter_hints": true,
  "show_other_hints": true
}

有关特定于语言的内嵌提示设置,请参阅每种语言的文档。

代码操作

代码操作提供快速修复和重构选项。使用 editor: Toggle Code Actions 命令或点击光标旁边的灯泡图标(当有可用操作时)来访问代码操作。

转到定义和引用

使用这些命令来导航您的代码库

  • editor: Go to Definition (f12|f12)
  • editor: Go to Type Definition (cmd-f12|ctrl-f12)
  • editor: Find All References (shift-f12|shift-f12)

重命名符号

要在您的项目中重命名一个符号

  1. 将光标放在符号上
  2. 使用 editor: Rename Symbol 命令 (f2|f2)
  3. 输入新名称并按 Enter

这些功能取决于每种语言的语言服务器的功能。

当重命名跨越多个文件的符号时,Zed 将在多缓冲区中打开一个预览。 这允许您在应用更改之前查看整个项目中的所有更改。 要确认重命名,只需保存多缓冲区。 如果您决定不继续重命名,您可以撤消更改或关闭多缓冲区而不保存。

悬停信息

使用 editor: Show Hover 命令来显示光标下符号的信息。 这通常包括类型信息、文档以及指向相关资源的链接。

workspace: Open Symbol 命令允许您在整个项目中搜索符号(函数、类、变量)。 这对于快速导航大型代码库非常有用。

代码完成

在您键入时,Zed 提供智能代码完成建议。 您可以使用 editor: Show Completions 命令手动触发完成。 使用 tab|tabenter|enter 来接受建议。

诊断

语言服务器会在您编写代码时提供实时诊断(错误、警告、提示)。 使用 diagnostics: Toggle 命令查看项目的所有诊断信息。