# 使用 LSP 服务器与 GitHub Copilot CLI

LSP 服务器提供 Copilot CLI 精确的代码智能，使它可以在项目中准确导航定义、查找引用和重命名符号。

## Introduction

语言服务器协议（LSP）是一种开放标准，用于在代码编辑器和语言服务器之间进行通信。 语言服务器是一种提供特定编程语言功能的服务，例如“转到定义”和在整个代码库中重命名代码符号。 “LSP 服务器”是支持语言服务器协议的任何语言服务器。

GitHub Copilot CLI 可以使用 LSP 服务器更准确地了解代码的结构。 通过为项目中的每种编程语言添加和配置 LSP 服务器，您将使 Copilot CLI 更好地理解您的代码。

## LSP 服务器的优点

* **准确性**：结果来自语言自己的编译器/分析器，提供对代码结构的理解。 当它与代码一起使用时，这将提高 Copilot精度。 例如，当 Copilot 可以使用“转到定义”时，它将找到实际的定义，而不是仅仅看起来相似的文本匹配。
* **令牌效率**：“列出所有符号”或“查找引用”之类的操作将返回压缩的结构化结果，而不是要求代理将整个文件读取到会话中。
* **重构**：在重命名符号时，语言服务器可以查找和更新引用，而不是依赖于文本替换。
* **速度**：语言服务器在后台为项目编制索引，允许近乎即时的响应。

## LSP 服务器允许 Copilot CLI 执行的操作

当 LSP 服务器可用时， Copilot CLI 会自动使用它们。 无需特别请求它。
Copilot CLI 将在可以访问您所用编程语言的 LSP 服务器时，优先使用 LSP 服务器而不是基于文本的搜索。

支持以下语言服务器操作：

| Operation | 它的作用是什么              |
| --------- | -------------------- |
| 转到定义      | 跳转到定义符号（函数、类、变量）的位置。 |
| 查找引用      | 查找使用符号的每个位置。         |
| 悬停        | 检索符号的类型信息和文档。        |
| Rename    | 在整个项目中重命名符号，并更新所有引用。 |
| 文档符号      | 列出文件中定义的所有符号。        |
| 工作区符号搜索   | 在项目中按名称搜索符号。         |
| 转到实现      | 查找接口或抽象方法的实现。        |
| 来电        | 显示哪些函数调用给定函数。        |
| 传出呼叫      | 显示给定函数所调用的函数。        |

Copilot 根据提示选择最合适的 LSP 操作。 例如，如果询问“`handlePayment`定义在哪里？”，Copilot 将使用“跳转到定义”操作。

## 如何添加 LSP 服务器

若要 Copilot CLI 能够使用 LSP 服务器，必须先在本地计算机上安装服务器软件，然后在启动时读取的配置文件 Copilot CLI 之一中对其进行配置。 请参阅“[为 GitHub Copilot CLI 添加 LSP 服务器](/zh/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers)”。

还可以将 LSP 服务器添加为你选择安装的 Copilot CLI 插件的一部分。 例如，如果插件设计为使用不常见的编程语言或特定于框架的文件类型，则可能包含 LSP 服务器。 安装插件时，作为插件的一部分包含的 LSP 服务器将自动可用，无需进行其他配置。 如果卸载插件，则会删除 LSP 服务器。 有关详细信息，请参阅“[用于 GitHub Copilot 的插件](/zh/copilot/concepts/customizations/plugins)”。

## 如何加载 LSP 服务器

启动时 GitHub Copilot CLI ，它会从具有以下优先级的多个源加载 LSP 服务器配置（最高到最低）：

1. **Project配置文件**：当前存储库中的 `.github/lsp.json`。
2. **插件配置**：已安装插件提供的语言服务器。
3. **用户配置**： `~/.copilot/lsp-config.json`.

高优先级配置会覆盖具有相同服务器名称的低优先级配置。 这意味着项目可以为所有参与者自定义或禁用语言服务器。

信任工作目录后， Copilot CLI 会在后台自动启动与项目相关的任何 LSP 服务器，以便在需要时立即做出响应。

## 后续步骤

* [为 GitHub Copilot CLI 添加 LSP 服务器](/zh/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers)

## 延伸阅读

* Microsoft网站上的 [Language 服务器协议](https://microsoft.github.io/language-server-protocol/)
* [GitHub Copilot CLI 命令参考](/zh/copilot/reference/copilot-cli-reference/cli-command-reference)