ctrl+.触发快速修复依赖语言服务器返回codeaction,非vscode内置功能;失效主因是语言模式错误、光标未落于报错token、输入法劫持或诊断源不支持修复。

VSCode 本身不内置“通用纠错规则”,所谓“通用”其实是多个语言服务、Linter 和格式化器协同工作的结果;真正起作用的是你项目中实际启用的诊断源,不是 VSCode 自己猜出来的。
为什么 Ctrl+. 在不同文件里表现不一致
快捷键 Ctrl+. 触发的 Quick Fix 完全依赖当前语言服务器(如 pylance、typescript-language-server、rust-analyzer)是否返回了 codeAction。它不是编辑器功能,而是后端服务的能力投射。
- 光标必须落在报错 token 上——比如
useState报错,光标得停在useState字符串内,停在括号或空格里无效 - 右下角显示
Plain Text或Unknown?点击它手动切到TypeScript、Python等对应语言模式 - TS/JS 项目缺
tsconfig.json或jsconfig.json,自动 import 基本失效;Python 项目没pyproject.toml或虚拟环境未正确选中,pylance可能跳过完整分析 - 中文输入法会吞掉
Ctrl+.,切英文输入法再试
ESLint + Prettier 组合为何总“修一半”
它们职责不同但常被误认为可互换:ESLint 检查逻辑与规范(如 no-console、react-hooks/exhaustive-deps),Prettier 只管格式(缩进、引号、分号)。不配好,就会出现保存后缩进乱了、分号没了、但 ESLint 报错还在。
- 必须安装
eslint-config-prettier(npm 包,非插件),并在.eslintrc.js的extends中显式写入"prettier" - VSCode 设置里要同时开两个开关:
"editor.defaultFormatter": "esbenp.prettier-vscode"和"source.fixAll.eslint": true -
editor.formatOnSave开了但没反应?检查是否被其他插件覆盖,或项目根目录存在.prettierrc但内容为空/语法错
问题面板里“修复”选项灰色或不可点
不是所有条目都支持 Quick Fix。来源决定能力:来自 typescript-language-server 或 pylance 的错误通常可修;来自 ESLint 的 warning 若没装 esbenp.vscode-eslint 或没开 "eslint.codeAction.showDocumentation": true,右键可能只有「隐藏」没有「修复」。
- 最稳触发方式:先在问题面板中点击具体条目,跳转到代码位置,再按
Ctrl+. - 悬停灯泡有时不出现?常见于字符串、注释、运算符上——这些 token 不在语言服务器的诊断范围内
- React 里
useState报错但没「从 react 导入」选项?大概率是eslint-plugin-react-hooks没启用,或react版本太低不支持该 hook
Code Runner 运行 JS/Python 却提示 require is not defined 或 ModuleNotFoundError
Code Runner 默认用 node --eval 或 python -c 执行,根本不加载模块系统,也不读 package.json 或 __init__.py。它适合单文件片段,不适合工程化项目。
- 临时解法:在设置里搜
code-runner.executorMap,把javascript改成"node $fullFileName",python改成"python $fullFileName" - 长期建议:弃用 Code Runner 做模块化开发,改用 VSCode 内置的
Run and Debug(F5),它依赖.vscode/launch.json,支持program字段指定入口、环境变量、断点和import语法 - 运行一闪而过?务必开
code-runner.runInTerminal,否则输出打到只读的 OUTPUT 面板,看不到input()或长日志
真正的“通用纠错”不在配置项里,而在你每次按下 Ctrl+. 前,是否确认了语言模式、光标位置、服务状态和插件链路是否完整——漏掉任意一环,Quick Fix 就是摆设。











