Copilot和TabNine不能共存,因二者均劫持onType事件与editor.suggest通道,导致建议卡顿、空白、内存飙升;需禁用其一的自动建议功能以解决冲突。

补全插件不是装得越多越好,冲突和冗余配置反而会让 editor.suggest 面板变慢、空白甚至不触发。
为什么 Copilot 和 TabNine 不能同时开
两者都劫持同一套建议触发逻辑(onType 事件 + editor.suggest 渲染通道),实际运行时会互相干扰:
- 输入
use后建议列表卡顿 2 秒,或直接显示空框 - 内存占用飙升,尤其在 M 系列 Mac 上,
Code Helper (Renderer)进程 CPU 占用常超 150% - 按下
Ctrl+Space后无响应,控制台报Extension host terminated unexpectedly
验证方式:打开命令面板 → 运行 Developer: Toggle Developer Tools → 切到 Console 标签页,敲几个字符观察错误日志。必须关掉其中一个的自动建议:"github.copilot.inlineSuggest.enable": false 或 "tabnine.experimentalAutoImports": false。
typescript.tsdk 指向错误,补全就丢类型信息
TypeScript 补全是 VS Code 自带能力,但完全依赖你指定的 typescript.tsdk 路径是否匹配项目真实使用的 TS 版本。全局装了 typescript@5.4,而项目用的是 4.9.5,就会出现:
-
Array.prototype.map能补全,但自定义的MyContext类型完全不出现 - 路径别名(如
@/hooks)补全失效,import { foo } from 'src/后没提示
正确做法是在项目根目录的 .vscode/settings.json 中写死路径:"typescript.tsdk": "./node_modules/typescript/lib"(注意是 lib 目录,不是 bin/tsc)。Monorepo 场景下,每个子包都得单独配,父级配置不继承。
ESLint 的 import/resolver 不配,路径补全就断
VS Code 的路径补全(比如输入 import { foo } from ' 后列出 @/components/)其实由 ESLint 插件驱动,不是 TypeScript 决定的。如果 eslint-plugin-import 的 settings.import/resolver 没配对,补全会漏掉所有别名路径。
在 .eslintrc.js 中显式声明 resolver:
settings: {
'import/resolver': {
node: {
paths: ['src'],
alias: { '@': './src' }
}
}
}
改完后必须重启 ESLint Server:命令面板 → 运行 ESLint: Restart ESLint Server,否则补全不会更新。
css.showCompletionsWithAllValueContexts 设为 true 才能补全单位
CSS 补全默认只在属性值上下文明确时才提示单位(如 width: 后弹出 px、%),但像 margin: 0 这种多值场景,默认不触发单位建议。开启这个开关后,只要光标在数值后、冒号后或空格后,都会激活单位补全。
相关配置项还有:
-
"css.completion.triggerPropertyValueCompletion": true:启用浏览器前缀(如-webkit-)补全 -
"editor.wordBasedSuggestions": "off":关掉基于文档单词的模糊匹配,避免补全里混入无意义变量名
这些设置都得放在 .vscode/settings.json 里,语言特定配置要加前缀,比如 "css.showCompletionsWithAllValueContexts": true,不能写成全局项。
真正影响补全体验的,从来不是插件数量,而是 typescript.tsdk 路径对不对、import/resolver 配不配、两个 AI 插件有没有打架——这些地方一错,补全就从“助手”变成“幻觉生成器”。


















