1. 为什么我决定关掉 VSCode 里的 Copilot 自动补全
VSCode 里的 Copilot 代码自动补全,本质上是一个常驻的“行内建议引擎”:你在编辑器里敲下几个字符,它就把灰色幽灵文本推到你光标后面,按 Tab 就整段吃进去。对很多人来说这很爽,但对另一部分开发者来说,它会在你思考到一半时打断节奏,或者在你写业务逻辑时塞进一段看似合理、实则跑偏的代码。尤其是当你在读别人的老代码、做代码审查、或者写一些需要严格控制的底层逻辑时,自动补全的干扰感会被放大。
我自己的场景比较典型:白天要维护一个历史包袱很重的项目,里面有不少命名风格混乱、注释缺失的模块。Copilot 在这种上下文里给出的补全经常“自信地猜错”,我按 Tab 之后还得回头删掉重写,反而比手打更慢。所以我需要的是:保留 Copilot 的聊天能力,但把行内自动补全彻底关掉。这就是本篇要解决的问题——不是卸载插件,而是通过settings.json精细控制它的补全行为,并给出重启/重载后的验证动作。
这篇内容适合三类人:一是想临时或永久关闭 Copilot 行内补全的开发者;二是想搞清楚settings.json里 Copilot 相关开关作用域的人;三是已经点了图标但不确定是否真的生效、需要一套可复现验证流程的人。下面我会先讲清楚配置路径,再给一份可直接复制的配置骨架,最后用几个动作确认补全确实停了。
2. 配置前的准备:TaoToken 与模型接入的关系
在动手改settings.json之前,先理清一个容易混淆的点:Copilot 的自动补全和你在项目里使用的模型服务是两回事。Copilot 是 VSCode 的一个扩展,它自己带补全通道;而如果你在项目里通过 API 调用其他模型(比如做代码解释、生成测试、批量重构),那是另一条链路。关掉 Copilot 补全,不影响你用 API 做其他事。
如果你希望把“代码补全/生成”这类能力收敛到自己可控的模型服务上,可以先把 API Key 准备好。TaoToken 的 API 地址是https://taotoken.net/api,控制台里可以创建和管理密钥,接入文档里有各语言的最小请求示例。对于长期写代码、跑 Agent 的场景,Coding Plan 更适合按周期使用;如果只是想先验证模型对话效果,可以直接用模型对话页面试几条 prompt。这些入口我放在文末 CTA 里,这里你先知道“补全归补全,API 归 API”就行。
回到正题:关 Copilot 补全,核心就是改 VSCode 的用户级或工作区级settings.json。用户级影响你所有项目,工作区级只影响当前文件夹。我建议先用用户级关掉,确认行为符合预期后,再决定要不要在特定项目里单独打开。
3. 可复制的 settings.json 配置骨架
VSCode 的 Copilot 补全开关主要围绕github.copilot.enable这个对象展开。它的结构是“语言 ID -> 布尔值”,true表示该语言启用补全,false表示关闭。如果你想全局关掉,最直接的做法是把常见语言全部设为false,或者用一个通配思路:把*设为false,再按需对个别语言打开。
下面这份骨架可以直接粘进你的settings.json。打开方式:Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入Preferences: Open User Settings (JSON),回车。
{ "github.copilot.enable": { "*": false, "plaintext": false, "markdown": false, "javascript": false, "typescript": false, "python": false, "java": false, "go": false, "rust": false, "c": false, "cpp": false, "csharp": false, "php": false, "ruby": false, "shellscript": false, "yaml": false, "json": false, "html": false, "css": false, "sql": false }, "github.copilot.inlineSuggest.enable": false }这里有两个关键项,作用域不同,别搞混:
| 配置项 | 作用 | 建议值 |
|---|---|---|
github.copilot.enable | 按语言控制 Copilot 补全是否启用 | 全量false或按需 |
github.copilot.inlineSuggest.enable | 控制行内建议(幽灵文本)总开关 | false彻底停用 |
github.copilot.editor.enableAutoCompletions | 部分版本里的自动补全开关 | false |
注意:不同版本的 Copilot 扩展,配置项名称可能略有差异。如果你在设置里搜
copilot只看到github.copilot.enable,那就以它为准;如果同时看到inlineSuggest.enable,两个都设false最稳妥。
如果你只想在某个项目里关掉,而不是全局关,那就把上面这段放进工作区的.vscode/settings.json。工作区配置会覆盖用户配置,适合“公司项目关、个人项目开”的混合场景。
改完之后保存文件。VSCode 通常会自动应用部分设置,但 Copilot 扩展对配置的响应有时需要重载窗口才彻底生效,下一步我们就来验证。
4. 重启与重载后的验证动作
配置写进去只是第一步,真正要确认的是“补全确实停了”。我一般按下面这套动作走一遍,基本不会漏。
第一步,重载窗口。Ctrl+Shift+P输入Developer: Reload Window,回车。这一步比直接重启 VSCode 更轻,但足以让扩展重新读取配置。
第二步,打开一个你平时会触发补全的文件,比如一个.js或.py文件,在函数体里敲几个字符,比如输入function test(然后停住。正常情况下,Copilot 会在光标后弹出灰色幽灵文本。如果配置生效,这里应该没有任何灰色建议,也不会出现“按 Tab 接受”的提示。
第三步,看状态栏。VSCode 右下角通常有一个 Copilot 图标。点击它,你会看到当前状态的菜单。如果补全被禁用,图标会呈现“禁用/暂停”的样式,菜单里对应项会显示为关闭状态。这一步就是最直观的确认:图标变了,说明开关生效了。
第四步,用命令面板再确认一次。Ctrl+Shift+P输入Copilot: Toggle相关的命令,看看当前是启用还是禁用状态。如果显示的是“启用”相关文案,说明你的配置没被读到,需要检查 JSON 是否写在了正确的层级、有没有语法错误。
第五步,做个反向测试。临时把"*": false改成"*": true,重载窗口,再敲代码,看灰色建议是否回来。如果回来了,说明你的配置路径是对的,只是值的问题;如果没回来,那可能是扩展本身被禁用了,或者配置写错了位置。
这套动作走完,你就能确定“关没关掉”而不是“我以为关掉了”。
5. 本篇常见错排查
问题一:改了 settings.json 但补全还在。最常见的原因是配置写在了错误的文件里。VSCode 有用户设置、工作区设置、文件夹设置三层,优先级从低到高。如果你把false写进了用户设置,但工作区设置里又写了true,那工作区会覆盖用户设置。检查一下当前项目根目录下有没有.vscode/settings.json,里面是不是有冲突项。
问题二:JSON 语法错误导致整段配置不生效。settings.json对逗号、引号很敏感。比如最后一个键值对后面多了一个逗号,或者用了单引号,VSCode 会直接忽略整份文件的部分内容。把光标放到文件里,VSCode 通常会用红色波浪线标出语法问题。没有报错再重载窗口。
问题三:只关了enable,没关inlineSuggest。有些版本里,github.copilot.enable控制的是“是否允许 Copilot 参与”,而inlineSuggest.enable控制的是“是否显示行内幽灵文本”。两个都设false才能彻底安静。如果你只设了一个,可能还会看到建议。
问题四:重载窗口后图标没变化。先确认 Copilot 扩展本身是否还在运行。在扩展面板里搜Copilot,看它是不是被禁用了。如果扩展被禁用,那和配置无关,是扩展层面的问题。另外,某些企业环境会通过策略强制开启,这种情况需要看组织的策略配置,不在本篇讨论范围。
问题五:想临时开回来怎么办。不用改文件,直接点右下角 Copilot 图标,在菜单里切换即可。这个临时状态在重载窗口后会回到settings.json的定义。所以如果你只是临时想用一下,点图标比改文件更快。
6. 把补全控制权拿回自己手里
关掉 Copilot 自动补全,本质上不是“拒绝 AI”,而是把触发时机从“它想给就给”变成“我需要时才要”。对我这种在复杂老项目里工作的人来说,少一点行内干扰,读代码和写逻辑的连贯性会好很多。配置本身不复杂,难的是确认它真的生效——所以第 4 节的验证动作建议你完整走一遍。
如果你后续想把代码生成、解释、测试这些能力接到自己可控的模型服务上,可以先把 API Key 建好,接入文档里有最小请求示例;想先试模型效果就去模型对话页面;长期写代码或跑 Agent 的话,Coding Plan 更合适。入口如下:
- 模型对话:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite
- 控制台:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
- API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
- ClaudeCodeAnthropic:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code&utm_campaign=rewrite
最后留一个我自己的小习惯:每次改完settings.json,我会顺手在文件顶部加一行注释记录改动日期和原因,比如// 2025-xx-xx 关闭 copilot 行内补全。VSCode 的 JSON 支持注释,这样下次再看到这份配置,不用回忆当时为什么这么写。