VS Code智能提示失效主因是语言服务未启动或配置错误:单文件无项目上下文、tsconfig/jsconfig配置不当、Python解释器未指定、扩展冲突或日志报错。

VS Code 的智能提示不工作,大概率不是插件没装,而是语言服务根本没启动或配置错位置——尤其当你打开的是单个 .py、.js 文件而非项目文件夹时,python 或 typescript 语言服务器可能压根没加载。
为什么打开单个文件时智能提示完全失效
VS Code 的语言服务(如 Pylance、TypeScript Server)默认依赖工作区上下文:它需要识别出当前是 Python 项目(有 pyproject.toml 或 setup.py),或是 TS 项目(有 tsconfig.json)。只打开一个 script.js,VS Code 可能只启用基础语法高亮,不拉起完整语言服务器。
- 检查左下角状态栏:看有没有显示
Python、TypeScript等语言模式,点击可手动切换;若显示Plain Text,说明语言模式未识别 - 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(Mac),输入Change Language Mode,选对应语言 - 对 Python:确保文件以
.py结尾,且已安装Pylance或Python官方扩展(二者选其一即可,不要共存) - 对 JavaScript/TypeScript:打开文件夹而非单个文件,或手动创建
jsconfig.json(JS)或tsconfig.json(TS)来激活服务
tsconfig.json / jsconfig.json 配置不当导致提示中断
tsconfig.json 不只是给编译器用的,它直接决定 TypeScript 语言服务“能看到哪些文件、怎么解析类型”。常见坑是 "include" 范围太窄,或 "compilerOptions.moduleResolution" 和实际运行环境不一致。
- 最简可用配置(JS 项目):
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "allowJs": true, "checkJs": false, "skipLibCheck": true, "esModuleInterop": true }, "include": ["**/*.js"] } - 如果用了 ESM(
import语法)但"module"还设为commonjs,类型推导会出错,提示变弱甚至消失 - 删掉
"exclude"中误写的"node_modules"—— VS Code 的 TS 服务需要读取node_modules/@types,排除后就找不到类型定义
Python 智能提示失效:Pylance 找不到解释器或环境
Pylance 不是独立运行的,它必须知道用哪个 Python 解释器、是否激活了虚拟环境。即使你装了 python 扩展,也可能因解释器路径为空而静默降级为基本补全。
- 按
Ctrl+Shift+P,输入Python: Select Interpreter,确认路径指向你项目实际使用的环境(如./venv/bin/python) - 检查设置里
python.defaultInterpreterPath是否被硬编码成一个已删除的路径 - 如果项目用
poetry或conda,确保先运行poetry shell或conda activate myenv,再从该终端启动 VS Code(code .) - 重启窗口:选择解释器后,必须点击右下角弹出的
Reload Window,否则 Pylance 不重新初始化
扩展冲突与日志排查(别跳过这步)
两个同类型语言扩展(比如同时启用 Python 和 Pylance,或 Auto Import 和 ES7+ React/Redux/React-Native snippets)会抢夺语言服务控制权,导致提示延迟、重复或干脆不触发。
- 禁用所有非必要扩展,只留官方语言扩展(如
ms-python.python、ms-vscode.vscode-typescript-next),测试是否恢复 - 打开命令面板,运行
Developer: Toggle Developer Tools,切到 Console 标签页,输入代码触发提示,看是否有Failed to start language server或Cannot find module报错 - 查看输出面板(
Ctrl+Shift+U),在下拉菜单中选Pylance或TypeScript Server,看初始化日志里是否卡在Resolving workspace或报路径权限错误
真正卡住智能提示的,往往不是“没装对插件”,而是语言服务启动前的上下文判断失败——路径、配置文件、解释器、工作区范围,四者只要一个没对上,它就安静地退回到基础文本模式。调试时优先看状态栏语言标识和输出面板日志,比反复重装扩展有效得多。










