跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

语言服务器与代码导航

安装并配置 LSP,验证定义查找、引用、重命名和项目级覆盖。

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 和启动测试,以确认实际配置可用。