语言服务器 LSP
这一章解决什么问题
帮助你理解 Zed 的 LSP(Language Server Protocol)工作机制,学会排查和配置语言支持。
资料来源
你会在什么时候用到它
- 某语言的代码补全/诊断不工作时
- 需要配置特定语言的行为时
- 想了解 Zed 如何提供智能编辑功能时
什么是 LSP
LSP(Language Server Protocol)是微软开发的标准协议,让编辑器(Client)和语言分析工具(Server)分离:
┌─────────────┐ LSP ┌─────────────────┐
│ Zed │ ←──────→ │ Language │
│ (Client) │ 标准协议 │ Server │
│ │ │ (TypeScript/ │
│ 编辑器界面 │ │ Rust/Python │
│ 补全/Diff │ │ 等分析工具) │
└─────────────┘ └─────────────────┘好处:一个语言服务器可以给多个编辑器用,Zed 不需要自己实现每种语言的分析。
Zed 的 LSP 支持
Zed 内置了许多语言服务器,开箱即用:
完全支持的语言
| 语言 | 语言服务器 | 功能 |
|---|---|---|
| TypeScript | typescript-language-server | 补全、诊断、格式化 |
| Rust | rust-analyzer | 补全、诊断、重构 |
| Python | pyright | 类型检查、补全 |
| Go | gopls | 补全、诊断、格式化 |
| JSON | json-language-server | 验证、补全 |
Zed 自动管理
Zed 会自动:
- 检测项目中的语言
- 下载对应的语言服务器
- 启动并连接
- 提供代码补全、诊断等功能
你通常不需要手动配置。
查看 LSP 状态
状态栏右下角显示当前文件使用的语言服务器:
- 显示语言名(如
TypeScript) - 如果有错误,会显示警告图标
配置语言服务器
基本配置
json
{
"languages": {
"TypeScript": {
"language_servers": ["typescript-language-server", "!vtsls"]
}
}
}! 前缀表示禁用某个语言服务器。
为语言服务器传递配置
json
{
"lsp": {
"rust-analyzer": {
"initialization_options": {
"checkOnSave": {
"command": "clippy"
}
}
}
}
}使用外部格式化工具
如果语言服务器的格式化不满足需求,可以配置外部工具:
json
{
"languages": {
"Python": {
"formatter": {
"external": {
"command": "black",
"arguments": ["-"]
}
}
}
}
}排查 LSP 问题
代码补全不工作
- 检查状态栏:是否显示正确的语言
- 检查文件关联:文件扩展名是否正确
- 查看 LSP 日志:
Ctrl+Shift+P→open log - 重启语言服务器:
Ctrl+Shift+P→restart language server
诊断不显示
- 确认
diagnostics设置:json{ "diagnostics": { "inline": { "enabled": true } } } - 检查语言服务器是否正确启动
- 项目配置文件是否正确(如
tsconfig.json)
格式化失败
- 确认
format_on_save已开启 - 检查是否有可用的 formatter
- 尝试手动格式化:
Shift+Alt+F - 查看错误输出
本章小结
- LSP 让 Zed 获得代码补全、诊断、格式化等智能功能
- Zed 自动管理语言服务器,通常无需手动配置
- 可以为特定语言配置不同的语言服务器和格式化工具
- 遇到问题时查看日志、重启语言服务器
小练习
- 打开一个 TypeScript 文件,确认状态栏显示语言服务器
- 查看 LSP 日志了解背后的通信
- 为一个语言配置外部格式化工具