代码补全失效主因是语言服务未连接、文件类型识别错误或关键设置被关闭;需先检查右下角是否为plain text,手动切换正确语言模式,再确认文件已保存、后缀匹配、editor.quicksuggestions和editor.tabcompletion已启用,并重启对应语言服务器。

代码补全失灵不是 VSCode 坏了,而是语言服务没连上、文件没认对、或者关键开关被关掉了——90% 的问题三分钟内能定位,先看右下角语言模式。
右下角显示 Plain Text 或 Unknown 怎么办
这是最常被跳过的起点。VSCode 不知道你在写什么语言,就不会启动 tsserver、Pylance 或 clangd,IntelliSense 根本不加载。
- 点击右下角状态栏中显示的
Plain Text或Unknown,手动选成JavaScript、TypeScript、Python、C++等对应语言模式 - 未保存的临时文件(如
Untitled-1)默认就是Plain Text;先 Ctrl + S 保存为index.ts或main.py再试 - 检查
files.associations是否误配:比如"*.js": "typescript"会让 JS 文件走 TS 解析,类型推断错乱、补全降级 -
.vue文件必须选Vue(不是Vue HTML或HTML),否则Volar不接管,defineProps补全直接消失
editor.quickSuggestions 和 editor.tabCompletion 没开
这两个设置控制补全“弹不弹”和“Tab 键管不管用”。它们在部分语言里默认关闭,不是 bug,但容易被忽略。
- 打开设置(Ctrl + ,),搜
quick suggestions,确保editor.quickSuggestions在other、strings、comments三项都设为true(strings关键:否则import "./或 HTMLsrc="里不提示路径) - 搜
tabCompletion,把editor.tabCompletion设为"onlySnippets"(推荐)或"on";设成"off"时 Tab 只缩进,不触发补全 - 注意:UI 设置只影响当前工作区;要全局生效,得确认
settings.json里有对应项,且没被.vscode/settings.json覆盖
tsserver / Pylance / clangd 卡死或没加载
补全空白、悬停无类型、跳转定义失效,大概率是语言服务器进程挂了、没启动,或加载失败——UI 上不报错,但日志里全是线索。
- 命令面板(Ctrl + Shift + P)运行
Developer: Restart Language Server:TypeScript/JS是重启tsserver,Python是重启Pylance,C++是重启cpptools - 设
"typescript.tsserver.log": "verbose"或"python.analysis.logLevel": "Trace",然后打开「输出」面板 → 切换到对应日志,搜Failed to load project、ENOENT、Cannot read property 'map' - 常见根因:
tsconfig.json路径错、工作区根目录识别错误、插件版本不兼容、node.exe进程卡死(Windows 可任务管理器杀掉;macOS/Linux 执行pkill -f tsserver) - JS/TS 项目缺
jsconfig.json或tsconfig.json?补全是“盲猜”,跨文件跳转基本失效;最简配置至少含:{"compilerOptions": {"module": "nodenext", "target": "es2020", "allowJs": true}}
Python 补全只有 __class__ 这类基础属性
这说明 Pylance 没真正跑起来。Jedi 已停更,补全能力弱得多,而官方 Python 扩展默认可能仍启用 Jedi。
- 打开命令面板 →
Python: Select Interpreter→ 选一个真实存在的 Python 环境(路径不能为空或无效) - 检查设置中
python.languageServer值是否为"Pylance"(不是"Jedi",也不是空) - 重启 VSCode 后,写一行
pathlib.Path().,看是否列出完整方法;若只显示__class__、__doc__,说明Pylance没加载成功 - 打开「输出」面板 → 切换到
Python Language Server日志,搜Starting或error,确认初始化是否完成
真正难排查的,往往不是设置没开,而是语言服务器加载时静默失败——比如 tsconfig.json 里 include 漏了 src/**/*,或者 files.associations 把 .jsx 强制映射成 javascript 导致类型校验崩坏。日志里那几行报错,才是唯一能告诉你“它到底卡在哪”的依据。











