Skip to content

语言服务器 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 内置了许多语言服务器,开箱即用:

完全支持的语言

语言语言服务器功能
TypeScripttypescript-language-server补全、诊断、格式化
Rustrust-analyzer补全、诊断、重构
Pythonpyright类型检查、补全
Gogopls补全、诊断、格式化
JSONjson-language-server验证、补全

Zed 自动管理

Zed 会自动:

  1. 检测项目中的语言
  2. 下载对应的语言服务器
  3. 启动并连接
  4. 提供代码补全、诊断等功能

你通常不需要手动配置。

查看 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 问题

代码补全不工作

  1. 检查状态栏:是否显示正确的语言
  2. 检查文件关联:文件扩展名是否正确
  3. 查看 LSP 日志Ctrl+Shift+Popen log
  4. 重启语言服务器Ctrl+Shift+Prestart language server

诊断不显示

  1. 确认 diagnostics 设置:
    json
    {
      "diagnostics": {
        "inline": {
          "enabled": true
        }
      }
    }
  2. 检查语言服务器是否正确启动
  3. 项目配置文件是否正确(如 tsconfig.json

格式化失败

  1. 确认 format_on_save 已开启
  2. 检查是否有可用的 formatter
  3. 尝试手动格式化:Shift+Alt+F
  4. 查看错误输出

本章小结

  • LSP 让 Zed 获得代码补全、诊断、格式化等智能功能
  • Zed 自动管理语言服务器,通常无需手动配置
  • 可以为特定语言配置不同的语言服务器和格式化工具
  • 遇到问题时查看日志、重启语言服务器

小练习

  1. 打开一个 TypeScript 文件,确认状态栏显示语言服务器
  2. 查看 LSP 日志了解背后的通信
  3. 为一个语言配置外部格式化工具

基于 Zed 官方文档及社区资料整理,仅供学习参考