终端 > 内置代码编辑器
语言服务器协议 (LSP)
# 语言服务器协议 (LSP) Warp 的代码编辑器内置了对 [语言服务器协议 (Language Server Protocol)](https://msdocs.cn/language-server-protocol/) 的支持,为您在终端中提供 IDE 级别的代码智能提示。当您为项目启用 LSP 服务器时,无需离开 Warp 即可获得悬停文档、跳转到定义、查找引用、内联诊断和自动格式化功能。 ## 支持的语言 Warp 提供对以下语言服务器的支持: | 语言 | 服务器 | 文件扩展名 | | --- | --- | --- | | Rust | `rust-analyzer` | `.rs` | | Go | `gopls` | `.go` | | Python | `pyright` | `.py` | | TypeScript / JavaScript | `typescript-language-server` | `.ts`, `.tsx`, `.js`, `.jsx`, `.mjs`, `.cjs` | | C / C++ | `clangd` | `.c`, `.C`, `.h`, `.H`, `.hh`, `.cc`, `.cpp`, `.cxx`, `.hpp`, `.hxx` | 我们正在积极扩展语言支持。若要请求支持某种语言,请 [提交 GitHub Issue](https://github.com/warpdotdev/Warp/issues)。 ## 工作原理 当您 `cd` 进入一个启用了语言服务器的工作区时,Warp 会自动在后台启动它们。一旦服务器完成初始化,悬停、诊断和跳转到定义等功能即可使用。在您编辑时,Warp 会发送增量更新以保持一切同步。如果您关闭了某个工作区的所有文件和终端,Warp 将关闭空闲的服务器以释放资源。 :::note Warp 使用您 shell 的 `PATH` 来查找语言服务器二进制文件。如果 `PATH` 中找不到服务器,Warp 可以为您安装它(请参阅下文的 [启用服务器](#enabling-a-server))。 ::: ## 启用和管理语言服务器 ### 启用服务器 语言服务器是**按工作区**(按 Git 仓库根目录)启用的。当您首次打开使用支持语言的文件时,**编辑器底部栏**会显示一个选项来启用相应的语言服务器。如果您的系统未安装该服务器二进制文件,Warp 将提示为您安装。您也可以在 **设置 (Settings)** > **代码 (Code)** > **索引和项目 (Indexing and projects)** 中管理服务器,每个已初始化的工作区都会显示其已启用的语言服务器及其状态。 ### 服务器状态指示器 代码编辑器底部栏会显示活动语言服务器的状态图标: * 🟢 **绿色** - 服务器正在运行且就绪。 * 🟡 **黄色** - 服务器正在启动或正在处理后台任务。 * 🔴 **红色** - 服务器启动失败。点击该图标查看选项。 * ⚪ **灰色** - 服务器已停止。点击状态图标会打开一个菜单,提供**重启**、**停止**、**启动**或**查看日志**等服务器选项。 ### 服务器日志 每个语言服务器都会将日志写入磁盘上的文件。您可以从底部栏菜单(点击状态图标并选择“打开日志”)或从 **设置 (Settings)** > **代码 (Code)** > **索引和项目 (Indexing and projects)** 访问这些日志。日志对于调试服务器启动失败或意外行为非常有用。 ## 由 LSP 驱动的编辑器功能 ### 悬停信息 将鼠标悬停在符号上可查看其类型签名、文档以及语言服务器提供的其他详细信息。悬停提示框会在短暂延迟后出现,并支持包括代码块和 Markdown 在内的丰富内容。 ### 跳转到定义 按住 `CMD` (macOS) 或 `CTRL` (Windows/Linux) 并点击符号即可跳转到其定义。如果定义在另一个文件中,Warp 会在代码编辑器中打开它。当您按住修改键时,悬停在该符号上时会显示下划线,表明它是可导航的。 ### 查找引用 在已位于定义的符号上执行 `CMD`-点击 (macOS) 或 `CTRL`-点击 (Windows/Linux),查看一个**查找引用**卡片,列出工作区中所有的引用。点击任何引用即可导航到该处。 ### 内联诊断 Warp 将语言服务器提供的错误和警告直接以虚线下划线的形式显示在编辑器中。悬停在带有下划线的范围上即可查看完整的诊断消息。诊断信息会在您编辑时实时更新,并在服务器重新计算时短暂清除。 ### 保存时格式化 当您保存文件 (`CMD + S` / `CTRL + S`) 时,Warp 会在写入磁盘前向语言服务器请求格式化。这将应用服务器配置的格式规则(缩进、尾随空格、末尾换行符等)。如果服务器不支持格式化,文件将按原样保存,不会进行格式化更改。 ### 右键上下文菜单 当连接了 LSP 服务器时,在编辑器中点击右键将打开一个上下文菜单,其中包含由 LSP 驱动的操作,包括跳转到定义和查找引用。LSP 功能在 [共享缓冲区](/code/code-editor/#shared-buffers) 间保持同步——如果在多个选项卡或窗格中打开了同一个文件,无论您查看的是哪个视图,诊断、悬停和其他功能都会反映相同的内容。 ## 限制 * **仅限本地会话** - LSP 不支持 SSH 或 WSL 会话。相关追踪在 GitHub Issue [#6831](https://github.com/warpdotdev/Warp/issues/6831) (SSH) 和 [#6744](https://github.com/warpdotdev/Warp/issues/6744) (WSL) 中。 * **每种语言一个服务器** - 每种语言映射到一个单一服务器(例如,Rust 始终使用 `rust-analyzer`)。目前尚不支持自定义服务器配置。 * **项目范围** - 语言服务器在 Git 仓库根目录级别运行。仓库之外的文件可能无法获得 LSP 功能。 * **服务器可用性** - 某些功能(如格式化)取决于特定语言服务器的能力。并非所有服务器都支持所有功能。通过内置的 LSP 支持,获取悬停信息、跳转到定义、诊断和保存时格式化功能。
Warp 的代码编辑器内置了对 语言服务器协议 的支持,为您在终端中提供 IDE 级别的代码智能提示。当您为项目启用 LSP 服务器时,无需离开 Warp 即可获得悬停文档、跳转到定义、查找引用、内联诊断和自动格式化功能。
支持的语言
标题为“支持的语言”的章节Warp 提供对以下语言服务器的支持
| 语言 | 服务器 | 文件扩展名 |
|---|---|---|
| Rust | rust-analyzer | .rs |
| Go | gopls | .go |
| Python | pyright | .py |
| TypeScript / JavaScript | typescript-language-server | .ts, .tsx, .js, .jsx, .mjs, .cjs |
| C / C++ | clangd | .c, .C, .h, .H, .hh, .cc, .cpp, .cxx, .hpp, .hxx |
我们正在积极扩展语言支持。若要请求支持某种语言,请 提交 GitHub Issue。
工作原理
标题为“工作原理”的章节当您 cd 进入一个启用了语言服务器的工作区时,Warp 会自动在后台启动它们。一旦服务器完成初始化,悬停、诊断和跳转到定义等功能即可使用。在您编辑时,Warp 会发送增量更新以保持一切同步。如果您关闭了某个工作区的所有文件和终端,Warp 将关闭空闲的服务器以释放资源。
启用和管理语言服务器
标题为“启用和管理语言服务器”的章节启用服务器
标题为“启用服务器”的章节语言服务器是**按工作区**(按 Git 仓库根目录)启用的。当您首次打开使用支持语言的文件时,**编辑器底部栏**会显示一个选项来启用相应的语言服务器。如果您的系统未安装该服务器二进制文件,Warp 将提示为您安装。
您也可以在 **设置 (Settings)** > **代码 (Code)** > **索引和项目 (Indexing and projects)** 中管理服务器,每个已初始化的工作区都会显示其已启用的语言服务器及其状态。
服务器状态指示器
标题为“服务器状态指示器”的章节代码编辑器底部栏会显示活动语言服务器的状态图标
- 🟢 绿色 - 服务器正在运行且就绪。
- 🟡 黄色 - 服务器正在启动或正在处理后台任务。
- 🔴 红色 - 服务器启动失败。点击该图标查看选项。
- ⚪ 灰色 - 服务器已停止。
点击状态图标会打开一个菜单,提供重启、停止、启动或查看日志等服务器选项。
服务器日志
标题为“服务器日志”的章节每个语言服务器都会将日志写入磁盘上的文件。您可以从底部栏菜单(点击状态图标并选择“打开日志”)或从 设置 (Settings) > 代码 (Code) > 索引和项目 (Indexing and projects) 访问这些日志。日志对于调试服务器启动失败或意外行为非常有用。
由 LSP 驱动的编辑器功能
标题为“由 LSP 驱动的编辑器功能”的章节悬停信息
标题为“悬停信息”的章节将鼠标悬停在符号上可查看其类型签名、文档以及语言服务器提供的其他详细信息。悬停提示框会在短暂延迟后出现,并支持包括代码块和 Markdown 在内的丰富内容。
跳转到定义
标题为“跳转到定义”的章节按住 CMD (macOS) 或 CTRL (Windows/Linux) 并点击符号即可跳转到其定义。如果定义在另一个文件中,Warp 会在代码编辑器中打开它。当您按住修改键时,悬停在该符号上时会显示下划线,表明它是可导航的。
查找引用
标题为“查找引用”的章节CMD-点击 (macOS) 或 CTRL-点击 (Windows/Linux) 在已位于定义的符号上,查看一个查找引用卡片,列出工作区中所有的引用。点击任何引用即可导航到该处。
内联诊断
标题为“内联诊断”的章节Warp 将语言服务器提供的错误和警告直接以虚线下划线的形式显示在编辑器中。悬停在带有下划线的范围上即可查看完整的诊断消息。诊断信息会在您编辑时实时更新,并在服务器重新计算时短暂清除。
保存时格式化
标题为“保存时格式化”的章节当您保存文件 (CMD + S / CTRL + S) 时,Warp 会在写入磁盘前向语言服务器请求格式化。这将应用服务器配置的格式规则(缩进、尾随空格、末尾换行符等)。如果服务器不支持格式化,文件将按原样保存,不会进行格式化更改。
右键上下文菜单
标题为“右键上下文菜单”的章节当连接了 LSP 服务器时,在编辑器中点击右键将打开一个上下文菜单,其中包含由 LSP 驱动的操作,包括跳转到定义和查找引用。
LSP 功能在 共享缓冲区 间保持同步——如果在多个选项卡或窗格中打开了同一个文件,无论您查看的是哪个视图,诊断、悬停和其他功能都会反映相同的内容。