在使用 VS Code 多根工作区时,Copilot 默认只识别第一个文件夹,其余子项目会被完全忽略。你需要主动告知 Copilot:这些项目也属于管理范围。通过启用全部文件夹、配置 .copilotignore 文件,或运行 copilot context reload 命令,都能有效扩大上下文范围,解决 Copilot 无法读取上下文的问题。

遇到过这种情况吗?在 VS Code 中同时打开多个项目文件夹(即多根工作区),结果 Copilot 仅能补全第一个文件夹内的代码,其他项目的建议完全失效,甚至提示“无法读取上下文”。别急着怀疑网络连接——问题根源在于 Copilot 默认以工作区根目录作为作用域,那些未显式声明的子项目直接被排除在上下文之外。
确认当前是否处于多根工作区
先快速验证一下:按下 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Developer: Toggle Developer Tools,切换到 Console 标签页,粘贴并执行一行命令:
console.log(vscode.workspace.workspaceFolders)
如果返回的数组长度大于 1(例如 [ {uri: ..., name: "backend"}, {uri: ..., name: "frontend"} ]),说明你已经处于多根工作区模式——而 Copilot 此时默认只激活第一个文件夹的上下文感知能力。
方法一:为每个文件夹单独启用 Copilot 补全
在右下角状态栏点击 GitHub Copilot 图标 → 选择 Enable for all folders。
这样所有已加载的根文件夹都会开启补全,但【不保证跨文件夹引用有效】。例如,backend 文件夹中的代码无法自动感知 frontend 文件夹里的类型定义——Copilot 并不会主动跨根目录解析依赖关系。
方法二:用 .copilotignore 显式声明上下文边界
在工作区根目录(即包含多个文件夹的那个父目录)下新建一个 .copilotignore 文件。
然后在文件中写入你希望纳入上下文的子路径,每行一个,支持通配符:
backend/src/**
frontend/src/**
shared/utils/**
⚠️ 注意:这个文件必须放在最外层的工作区目录中,而不是某个子项目内部——否则 Copilot 根本无法读取到它。
方法三:强制重载上下文窗口(CLI 模式)
第一步:确认你已在终端中安装好 GitHub Copilot CLI,并且成功登录。
第二步:进入多根工作区的父目录,执行:
copilot context reload --workspace "$(pwd)"
第三步:等待命令返回 Context reloaded successfully 之后,回到 VS Code 中任意打开一个 .ts 或 .py 文件,按一下空格键触发补全。
这一步操作会强制 CLI 扫描所有子目录结构,将符合语言特征的源码片段纳入当前上下文窗口。需要留意:如果某个子项目全部由纯配置文件(如 JSON 或 YAML)组成,Copilot 仍然不会将其视为可读取的上下文——【只有被 VS Code 识别为编程语言的文件才会被纳入】。
