语言服务器与代码导航
安装并配置 LSP,验证定义查找、引用、重命名和项目级覆盖。
This page has not been translated into English yet. The original Chinese version is shown below.
LSP 让 CLI 使用语言自己的分析器理解代码结构。可用操作包括定义跳转、引用查找、类型悬浮信息、重命名、文件符号、工作区符号搜索、实现查找,以及调用关系查询。对应语言服务器可用时,Copilot 会自动选择它,不必每次提示都指定 LSP。
安装与配置是两个步骤
先安装语言服务器软件,再告诉 CLI 如何启动。以 TypeScript / JavaScript 为例:
npm install -g typescript typescript-language-server将以下定义放进用户的 ~/.copilot/lsp-config.json,或仓库的 .github/lsp.json:
{
"lspServers": {
"typescript": {
"command": "typescript-language-server",
"args": ["--stdio"],
"fileExtensions": {
".ts": "typescript",
".tsx": "typescriptreact",
".js": "javascript",
".jsx": "javascriptreact"
}
}
}
}这是按常用扩展名缩减的配置示例。项目使用 .mjs、.cjs、.mts、.cts 时,应按语言服务器支持情况添加对应映射。Ruby 可使用 ruby-lsp / solargraph,Python 可使用 pyright / python-lsp-server;不同服务器的启动命令不能直接互换。
配置字段
服务器名称只能包含字母数字、下划线和连字符,并且在同一配置中唯一。
| 字段 | 必填 | 含义 |
|---|---|---|
command | 是 | 启动命令 |
fileExtensions | 是 | 扩展名到语言 ID 的映射 |
args | 否 | 命令参数数组 |
env | 否 | 进程环境变量,支持 ${VAR} 与 ${VAR:-default} |
rootUri | 否 | 相对 Git 根目录的项目路径,默认 "." |
initializationOptions | 否 | 初始化选项 |
requestTimeoutMs | 否 | 请求超时,默认 90 秒,以毫秒设置 |
initializationTimeoutMs | 否 | 初始化握手超时,默认 60 秒,以毫秒设置 |
Monorepo 中语言项目位于子目录时,rootUri 应指向该子目录;初始化分析确实较慢时,再增加握手超时。
覆盖顺序与禁用
同名服务器的优先级从高到低为:项目 .github/lsp.json → 已安装插件 → 用户 ~/.copilot/lsp-config.json。目录被信任后,CLI 会在后台启动与项目相关的服务器。
项目可以覆盖低优先级来源,也可通过同名条目禁用它:
{
"lspServers": {
"typescript": {
"disabled": true
}
}
}这个条目使用禁用形式,无需再写完整启动定义。插件提供的 LSP 随插件安装而可用,卸载插件也会移除相应来源。
重新加载与诊断
| 命令 | 用途 |
|---|---|
/lsp 或 /lsp show | 查看已配置服务器状态 |
/lsp test SERVER-NAME | 启动临时独立实例测试,然后停止该实例 |
/lsp reload | 从磁盘重新加载配置 |
/lsp logs | 打开实时 LSP 服务日志面板 |
/lsp help | 查看帮助 |
配置后先运行 /lsp reload 和 /lsp test typescript。如果启动失败,检查命令是否已安装、参数是否适合该服务器、项目根是否正确,再检查日志。
用 Skill 辅助配置
官方还介绍了 Awesome GitHub Copilot 中的 lsp-setup Skill:下载解压后放到 ~/.copilot/skills/ 或项目 .github/skills/,在现有会话执行 /skills reload,输入 setup lsp 并按引导选择语言。完成后仍需 /lsp reload 和启动测试,以确认实际配置可用。