配置支持的语言
Zed 为其支持的每种编程语言提供了强大的自定义选项。本指南将引导您了解各种方式,以根据您的偏好和项目要求定制您的编码体验。
Zed 的语言支持基于两种主要技术
- Tree-sitter:处理语法高亮和基于结构的功能,例如大纲面板。
- 语言服务器协议 (LSP):提供语义功能,例如代码补全和诊断。
这些组件协同工作以提供 Zed 的语言功能。
在本指南中,我们将介绍
- 特定语言设置
- 文件关联
- 使用语言服务器
- 格式化和 linting 配置
- 自定义语法高亮和主题
- 高级语言功能
阅读本指南后,您应该了解如何在 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}"]
}
}
}
}
您可以为每种语言自定义各种设置,包括
tab_size:每个缩进级别的空格数formatter:用于代码格式化的工具format_on_save:保存时是否自动格式化代码enable_language_server:切换语言服务器支持hard_tabs:使用制表符而不是空格进行缩进preferred_line_length:推荐的最大行长soft_wrap:如何换行长代码行show_completions_on_input:输入时是否显示补全show_completion_documentation:是否在补全菜单中以内联和旁侧方式显示项目文档
这些设置允许您在不同语言和项目中保持特定的编码风格。
文件关联
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 简化了用户的语言服务器管理
-
自动下载:当您打开具有匹配文件类型的文件时,Zed 会自动下载相应的语言服务器。Zed 可能会提示您为已知文件类型安装扩展程序。
-
存储位置
- macOS:
~/Library/Application Support/Zed/languages - Linux:
$XDG_DATA_HOME/zed/languages、$FLATPAK_XDG_DATA_HOME/zed/languages或$HOME/.local/share/zed/languages
- macOS:
-
自动更新:Zed 会保持您的语言服务器最新,确保您始终拥有最新的功能和改进。
选择语言服务器
Zed 中的某些语言提供多个语言服务器选项。您可能安装了多个扩展程序,它们捆绑了针对相同语言的语言服务器,这可能导致功能重叠。为了确保您获得首选的功能,Zed 允许您确定使用哪些语言服务器以及以何种顺序使用。
您可以使用language_servers设置指定您的偏好
"languages": {
"PHP": {
"language_servers": ["intelephense", "!phpactor", "..."]
}
}
在此示例中
intelephense被设置为主语言服务器phpactor被禁用(注意!前缀)...扩展为为 PHP 注册的其他语言服务器
此配置允许您根据您的特定需求调整语言服务器设置,确保您获得最适合您开发工作流程的功能。
工具链
一些语言服务器需要配置当前“工具链”,即特定版本的编程语言编译器和/或解释器的安装,其中可能包含项目的完整依赖项集。Zed 认为工具链的一个示例是 Python 中的虚拟环境。并非 Zed 中的所有语言都支持工具链发现和选择,但对于支持的语言,您可以从工具链选择器(通过toolchain: select)指定工具链。要了解有关 Zed 中工具链的更多信息,请参阅toolchains。
配置语言服务器
许多语言服务器接受自定义配置选项。您可以在settings.json的lsp部分中设置这些选项
"lsp": {
"rust-analyzer": {
"initialization_options": {
"check": {
"command": "clippy"
}
}
}
}
此示例配置 Rust Analyzer 在保存文件时使用 Clippy 进行额外的 linting。
嵌套对象
在 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"
},
}
}
}
可能的配置选项
根据特定语言服务器的实现方式,它们可能依赖于 LSP 中指定的不同配置选项。
在语言服务器启动期间发送一次,需要服务器重新启动才能重新应用更改。
例如,rust-analyzer 和 clangd 仅依赖于这种配置方式。
"lsp": {
"rust-analyzer": {
"initialization_options": {
"checkOnSave": false
}
}
}
服务器可以多次查询。大多数服务器将仅依赖于这种配置方式。
"lsp": {
"tailwindcss-language-server": {
"settings": {
"tailwindCSS": {
"emmetCompletions": true,
},
}
}
}
除了与 LSP 相关的服务器配置选项外,Zed 中的某些服务器允许配置 Zed 启动二进制文件的方式。
如果 Zed 在您的路径中找到语言服务器,则会自动下载或启动它们。如果您希望指定一个明确的替代二进制文件,您可以在设置中指定
"lsp": {
"rust-analyzer": {
"binary": {
// Whether to fetch the binary from the internet, or attempt to find locally.
"ignore_system_version": false,
"path": "/path/to/langserver/bin",
"arguments": ["--option", "value"],
"env": {
"FOO": "BAR"
}
}
}
}
启用或禁用语言服务器
您可以全局或按语言切换语言服务器支持
"languages": {
"Markdown": {
"enable_language_server": false
}
}
这会禁用 Markdown 文件的语言服务器,这对于大型文档项目的性能很有用。您可以在~/.config/zed/settings.json中全局配置此设置,或在项目目录中的.zed/settings.json中配置。
格式化和 Linting
Zed 支持代码格式化和 linting,以保持一致的代码风格并尽早发现潜在问题。
配置格式化程序
Zed 支持内置和外部格式化程序。有关更多信息,请参阅formatter文档。您可以在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"
}
}
此示例使用 Prettier 格式化 JavaScript,使用语言服务器的格式化程序格式化 Rust,两者都设置为保存时格式化。
要禁用特定语言的格式化
"languages": {
"Markdown": {
"format_on_save": "off"
}
}
设置 Linting 工具
Zed 中的 Linting 通常由语言服务器处理。许多语言服务器允许您配置 Linting 规则
"lsp": {
"eslint": {
"settings": {
"codeActionOnSave": {
"rules": ["import/order"]
}
}
}
}
此配置设置 ESLint 在保存 JavaScript 文件时组织导入。
要在保存时自动运行 Linting 修复
"languages": {
"JavaScript": {
"formatter": {
"code_action": "source.fixAll.eslint"
}
}
}
集成格式化和 Linting
Zed 允许您在保存时同时运行格式化和 Linting。以下是一个示例,它使用 Prettier 进行格式化,使用 ESLint 进行 JavaScript 文件的 Linting
"languages": {
"JavaScript": {
"formatter": [
{
"code_action": "source.fixAll.eslint"
},
{
"external": {
"command": "prettier",
"arguments": ["--stdin-filepath", "{buffer_path}"]
}
}
],
"format_on_save": "on"
}
}
故障排除
如果您遇到格式化或 Linting 问题
- 检查 Zed 的日志文件以获取错误消息(使用命令面板:
zed: open log) - 确保外部工具(格式化程序、Linting 工具)已正确安装并在您的 PATH 中
- 验证 Zed 设置和特定语言配置文件(例如,
.eslintrc、.prettierrc)中的配置
语法高亮和主题
Zed 提供语法高亮和主题的自定义选项,允许您根据需要调整代码的视觉外观。
自定义语法高亮
Zed 使用 Tree-sitter 语法进行语法高亮。使用theme_overrides设置覆盖默认高亮。
此示例使注释倾斜并更改字符串的颜色
"theme_overrides": {
"One Dark": {
"syntax": {
"comment": {
"font_style": "italic"
},
"string": {
"color": "#00AA00"
}
}
}
}
选择和自定义主题
更改您的主题
- 使用主题选择器(cmd-k cmd-t|ctrl-k ctrl-t)
- 或在您的
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)
重命名符号
要在整个项目中重命名符号
- 将光标放在符号上
- 使用
editor: Rename Symbol命令(f2|f2) - 输入新名称并按 Enter
这些功能取决于每种语言的语言服务器的功能。
当重命名跨多个文件的符号时,Zed 将在多缓冲区中打开预览。这允许您在应用更改之前查看整个项目中的所有更改。要确认重命名,只需保存多缓冲区。如果您决定不继续重命名,您可以撤消更改或关闭多缓冲区而不保存。
悬停信息
使用editor: Hover命令显示光标下符号的信息。这通常包括类型信息、文档和相关资源的链接。
工作区符号搜索
workspace: Open Symbol命令允许您在整个项目中搜索符号(函数、类、变量)。这对于快速导航大型代码库非常有用。
代码补全
Zed 在您键入时提供智能代码补全建议。您可以使用editor: Show Completions命令手动触发补全。使用tab|tab或enter|enter接受建议。
诊断
语言服务器在您编码时提供实时诊断(错误、警告、提示)。使用diagnostics: Toggle命令查看项目的所有诊断。