VSCode代码补全不响应新代码,根本原因是语言服务器(如TS Server、Volar)仍使用旧缓存,未重建索引;需手动执行Restart Language Server、tsc --build --clean或vue-tsc --noEmit等操作刷新缓存,且必须确保打开的是含tsconfig.json的项目根目录。

VSCode 代码补全本地缓存不会自动更新,必须手动触发语言服务器重建索引或清除旧缓存,否则补全会卡在旧类型定义、缺失新增 API、甚至完全不弹出。
为什么改了代码但补全没反应?
常见现象:项目里刚加了一个新导出函数,import 后输入 use 却不提示 useMyHook;或者 TypeScript 接口新增字段,补全列表里依然没有。这不是插件没装,而是语言服务器(如 TypeScript Server)仍在用内存或磁盘里的旧缓存做建议。
- TS Server 默认启用增量编译缓存,路径在
node_modules/.cache/typescript/或用户目录下的typescript-node-modules-cache - Volar 的 Vue 模板补全依赖
vue-tsc的语义分析结果,若未运行vue-tsc --noEmit,它可能压根没读到新.d.ts文件 - 某些扩展(如 Prettier、ESLint)的缓存也会干扰补全上下文,尤其当它们劫持了
textDocument/didChange事件时
快速刷新补全缓存的三类操作
别等重启 VSCode —— 多数情况只需局部重载:
- 按
Ctrl+Shift+P(macOS 为Cmd+Shift+P),输入并执行Developer: Restart Language Server(对 TS/Vue/Python 等多数语言有效) - 在终端中运行
tsc --build --clean && tsc --build(TypeScript 项目),强制清空并重建tsbuildinfo - 对 Vue 项目,运行
vue-tsc --noEmit --skipLibCheck后再执行Developer: Reload Window,确保 Volar 加载最新类型
哪些缓存该删、哪些不能乱动?
直接删错目录会导致补全永久失效或插件崩溃:
- 可安全删除:
node_modules/.cache/typescript/、node_modules/.cache/volar/、node_modules/.cache/eslint/ - 谨慎操作:
~/.vscode/extensions/下对应语言扩展的out/或dist/目录(删了要重装扩展) - 绝对不要碰:
~/.vscode/User/snippets/和~/.vscode/User/settings.json—— 这些是你的自定义配置,删了补全逻辑还在,但你的偏好全没了
最常被忽略的一点:补全缓存和你当前打开的文件夹是否为真正的项目根目录强相关。如果只是“打开单个 .ts 文件”而非“打开包含 tsconfig.json 的文件夹”,TS Server 根本不会加载项目级缓存,所有补全都退化为基础语法匹配 —— 此时再怎么清缓存也没用,得先确认工作区结构正确。


















