# 为 GitHub Copilot 命令行界面 (CLI) 添加 LSP 服务器

可以添加 LSP 服务器来提供 Copilot 命令行界面（CLI） 精确的代码智能，提高其导航定义、查找引用和重命名符号的能力。

## 介绍

本文介绍如何为 Copilot 命令行界面（CLI）. 添加 LSP 服务器。 有关 LSP 服务器的概念信息，请参阅 [使用 LSP 服务器与 GitHub Copilot 命令行界面 (CLI)](/zh/copilot/concepts/agents/copilot-cli/lsp-servers)。

添加 LSP 服务器 Copilot 命令行界面（CLI） 是一个两个步骤的过程：

1. 在本地计算机上安装 LSP 服务器软件。
2. 在配置文件中配置服务器。

本文将详细介绍这些步骤。

## 安装和配置 LSP 服务器

可以通过以下任一方法为特定语言添加 LSP 服务器：

* 使用`lsp-setup`技能自动化流程。
* 手动安装服务器软件，然后配置 Copilot 命令行界面（CLI） 以使用服务器。

以下各节介绍了这两种方法。

## 使用`lsp-setup`技能来添加语言服务器

`lsp-setup`“真棒GitHub Copilot”存储库中的技能可自动安装和配置一系列常用语言。

1. 请访问“Awesome”下载网站，然后搜索“lsp”：

<https://awesome-copilot.github.com/skills/?q=lsp。>

1. 下载`lsp-setup`技能。

2. 解压缩下载的`.zip`文件，创建一个名为`lsp-setup`的目录。

3. 将 `lsp-setup` 目录移动到以下任一项：

   * 个人技能目录： `~/.copilot/skills/`
   * Git 存储库中的项目技能目录：`.github/skills/`

4. 启动 Copilot 命令行界面（CLI），或者如果当前处于 CLI 会话中，请输入 `/skills reload`。

5. 输入提示：

   ```copilot copy
   setup lsp
   ```

6. 按照屏幕上的说明选择要设置的服务器的语言，然后完成其他步骤。

7. 该过程完成后，输入 `/lsp reload` 以加载新的 LSP 服务器。

8. 检查服务器是否已添加并正常运行。 请参阅本文后面部分 [的“确认 LSP 服务器可用](#confirming-that-an-lsp-server-is-available) ”。

## 手动安装和配置 LSP 服务器

为特定语言安装 LSP 服务器通常涉及通过包管理器（例如 `npm`， `gem`或 `pip`）安装包。

若要手动安装 LSP 服务器，请参阅要安装的特定语言服务器的文档。 下面列出了用于安装常用 LSP 服务器的一些示例命令。

> \[!NOTE]
> 用于查找不同语言的 LSP 服务器的有用资源包括：
>
> * Microsoft语言服务器协议网站上的 [Implementations](https://microsoft.github.io/language-server-protocol/implementors/servers/)。
> * Arch Linux 网站上的[语言服务器协议](https://wiki.archlinux.org/title/Language_Server_Protocol)。

> \[!CAUTION]
> 仅从信任的源安装 LSP 服务器。

### 示例安装命令：TypeScript 和 JavaScript

如果已安装 Node.js，可以使用以下命令安装 `typescript-language-server` LSP 服务器：

```bash copy
npm install -g typescript typescript-language-server
```

`typescript-language-server` LSP 服务器同时支持 TypeScript 和 JavaScript。

### 示例安装命令：Ruby

如果已安装 gem，可以使用以下命令安装 `ruby-lsp` LSP 服务器：

```bash copy
gem install ruby-lsp
```

或者，可以使用以下命令安装适用于 Ruby 的 `solargraph` LSP 服务器：

```bash copy
gem install solargraph
```

### 示例安装命令：Python

如果已安装 Node.js，可以使用以下命令安装 `pyright` LSP 服务器：

```bash copy
npm install -g pyright
```

或者，如果已安装 pip，可以使用以下命令安装 `python-lsp-server` LSP 服务器：

```bash copy
pip install python-lsp-server
```

## 配置语言服务器

1. 若要配置 LSP 服务器，请将服务器定义添加到两个配置文件之一：

   * **用户配置**： `~/.copilot/lsp-config.json` 适用于所有项目。
   * **Project配置**：存储库中的 `.github/lsp.json` 适用于处理该project的每个人。

   这两个文件使用相同的 JSON 语法：

   ```json
   {
     "lspServers": {
       "SERVER-NAME": {
         "command": "COMMAND",
         "args": ["ARG1", "ARG2"],
         "fileExtensions": {
           ".EXT": "LANGUAGE-ID"
         }
       },
       "ANOTHER-SERVER": {
         ...
       }
     }
   }
   ```

   本文后面提供了特定 LSP 服务器的一些服务器定义示例。

2. 安装和配置服务器后，确认 Copilot 命令行界面（CLI） 可以使用它。 请参阅下面的 [“确认 LSP 服务器可用](#confirming-that-an-lsp-server-is-available) ”。

### 配置字段

配置文件中的每个服务器定义都必须具有唯一的名称，并且仅包含字母数字字符、下划线和连字符。

在每个服务器定义中，以下字段可用/必需：

<table>
  <colgroup>
    <col width="25%">
    <col width="10%">
    <col>
  </colgroup>
  <thead>
    <tr>
      <th nowrap>领域</th>
      <th nowrap>必需</th>
      <th>说明</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td nowrap><code>command</code></td>
      <td nowrap>是的</td>
      <td>用于启动 LSP 服务器的命令。</td>
    </tr>
    <tr>
      <td nowrap><code>args</code></td>
      <td nowrap>否</td>
      <td>要传递给命令的参数。</td>
    </tr>
    <tr>
      <td nowrap><code>fileExtensions</code></td>
      <td nowrap>是的</td>
      <td>文件扩展名及其对应语言 ID 的 JSON 映射（例如 <code>{ ".rs": "rust" }</code>）。</td>
    </tr>
    <tr>
      <td nowrap><code>env</code></td>
      <td nowrap>否</td>
      <td>启动服务器时要设置的环境变量。 支持 <code>${VAR}</code> 和 <code>${VAR:-default}</code> 扩展语法。</td>
    </tr>
    <tr>
      <td nowrap><code>rootUri</code></td>
      <td nowrap>否</td>
      <td>LSP 服务器的根目录，相对于 Git 根目录。 默认为 <code>"."</code>。 适用于 monorepos。 如果项目位于 Git 存储库的子目录中，而不是存储库根目录，请将<code>rootUri</code>设置为该子目录路径。</td>
    </tr>
    <tr>
      <td nowrap><code>initializationOptions</code></td>
      <td nowrap>否</td>
      <td>启动期间发送到服务器的自定义选项。</td>
    </tr>
    <tr>
      <td nowrap><code>requestTimeoutMs</code></td>
      <td nowrap>否</td>
      <td>服务器请求的超时时间为毫秒（默认值：90 秒）。</td>
    </tr>
  </tbody>
</table>

### 示例服务器定义： `typescript-language-server` LSP 服务器

```json copy
{
  "lspServers": {
    "typescript": {
      "command": "typescript-language-server",
      "args": ["--stdio"],
      "fileExtensions": {
        ".ts": "typescript",
        ".tsx": "typescriptreact",
        ".js": "javascript",
        ".jsx": "javascriptreact",
        ".mjs": "javascript",
        ".cjs": "javascript",
        ".mts": "typescript",
        ".cts": "typescript"
      }
    }
  }
}
```

### 示例服务器定义： `ruby-lsp` LSP 服务器

```json copy
{
  "lspServers": {
    "ruby": {
      "command": "ruby-lsp",
      "args": [],
      "fileExtensions": {
        ".rb": "ruby",
        ".rbw": "ruby",
        ".rake": "ruby",
        ".gemspec": "ruby"
      }
    }
  }
}
```

### 示例服务器定义：用于 Python 的 `pyright` LSP 服务器

```json copy
{
  "lspServers": {
    "python": {
      "command": "pyright-langserver",
      "args": ["--stdio"],
      "fileExtensions": {
        ".py": "python",
        ".pyw": "python",
        ".pyi": "python"
      }
    }
  }
}
```

## 使用 `/lsp` 命令管理语言服务器

可以使用斜杠命令在交互式 CLI 会话 `/lsp` 中列出和管理 LSP 服务器：

| 斜杠命令                    | 说明                  |
| ----------------------- | ------------------- |
| `/lsp` 或 `/lsp show`    | 显示所有配置的 LSP 服务器的状态。 |
| `/lsp test SERVER-NAME` | 测试服务器是否正确启动。        |
| `/lsp reload`           | 从磁盘重新加载 LSP 配置。     |
| `/lsp help`             | 显示 `/lsp` 命令信息。     |

### 列出可用的 LSP 服务器

1. 在 Copilot 命令行界面（CLI）中，使用斜杠命令确认所选的 LSP 服务器可用 `/lsp` 。 你将看到如下输出：

   ```text
   ● LSP Server Status:

     User-configured servers:
       • ruby: ruby-lsp (.rb, .rbw, .rake, .gemspec)
       • omnisharp: omnisharp (.cs)

     User config: /Users/username/.copilot/lsp-config.json
   ```

### 确认 LSP 服务器可用

1. 添加和配置 LSP 服务器后，启动（或重启）。 Copilot 命令行界面（CLI）

2. 使用斜杠命令： `/lsp test SERVER-NAME` 检查 LSP 服务器是否正常工作。

Copilot 命令行界面（CLI） 尝试启动服务器的临时独立实例，并报告它是否成功，或者是否存在任何错误。 然后，它会终止临时服务器进程。

## 延伸阅读

* [GitHub Copilot 命令行界面 (CLI)](/zh/copilot/how-tos/copilot-cli)
* [使用 GitHub Copilot CLI](/zh/copilot/how-tos/use-copilot-agents/use-copilot-cli)