ctrl+. 按下没反应,根本原因是光标未落在报错 token 上;必须停在带波浪线的标识符(如 consol.log 中的 consol),而非 .、log、空格或注释处,且需语言模式正确、输入法为英文、语言服务已就绪。

Ctrl+. 按下没反应?先确认光标落在报错 token 上
VSCode 的 Ctrl+. 不是全局热键,它只对当前光标所在的「可诊断标识符」生效。比如 consol.log() 报错,光标必须停在 consol 上——停在 .、log、空格或括号里,都不会弹出修复菜单。
常见错误现象:波浪线明明画在变量名下,但按 Ctrl+. 无响应。原因往往是光标实际落在了字符串、注释、运算符或缩进空白处。悬停看 Tooltip 是否出现“Cannot find name”这类语义提示,才是语言服务器已识别该位置的信号。
- 右下角状态栏显示
Plain Text或Unknown?点击它,手动切换为TypeScript、Python等对应语言模式 - 输入法处于中文状态时,
Ctrl+.常被系统吞掉句号;切英文输入法再试 - 问题面板(
Ctrl+Shift+M)里双击某条错误,光标会精准跳到报错 token,此时再按Ctrl+.最稳
选区代码怎么比差异?别用眼睛扫,用 Git 的 vscode.diff 命令
所谓“当前选区代码差异”,本质是想对比你刚改的几行和上一个 commit 的原始内容。VSCode 不支持直接对任意选中文本做 Git diff,但可通过上下文触发精准比对:
- 在源代码管理面板(
Ctrl+Shift+G)中,右键已修改的文件 →Compare with Previous Revision - 若已选中某段代码,先按
Ctrl+C复制,再打开命令面板(Ctrl+Shift+P)→ 输入Git: Compare with Clipboard(需 GitLens 扩展支持) - 想比两个 commit 之间的某段逻辑?先在 COMMITS 区域 Ctrl+多选两个 commit → 右键 →
Compare Commits,然后在 diff 视图中手动定位目标函数或区块
注意:Compare with Working Tree 是跟未保存内容比,Compare with HEAD 才是跟最近一次 commit 比——菜单名太近,点错就白忙。
Quick Fix 选项和预期不符?不是 VSCode 问题,是语言服务器返回策略决定的
Ctrl+. 弹出的菜单顺序由语言服务器(如 typescript-language-server、pylance)控制,按「诊断严重等级 + 修复确定性」排序,不是按“你最想要的”排。
-
Cannot find name 'useState'同时给出「创建局部变量」「声明为 global」「从 'react' 导入」三个选项?第一个未必是你想要的——得自己选第三个 - React 项目里没看到导入建议?检查是否装了
esbenp.vscode-eslint并启用eslint.codeAction.showDocumentation,否则 ESLint 警告不进 Quick Fix - Python 中
from requests import get报错但无导入建议?说明requests不在当前 workspace 的PYTHONPATH或可发现路径下
修复能力边界很明确:语法错误(如拼写)基本都能修;类型断言(obj!.prop)、未 await Promise、跨文件重命名等,取决于插件实现深度,不是所有红线都支持自动修。
为什么 diff 卡在 “Loading…” 或 Quick Fix 弹窗空白?先查 .git 和语言服务状态
这两个问题根源高度重合:都是后端服务没起来或数据不可达。
- 终端进项目根目录,运行
git rev-parse --git-dir,确认输出.git路径且可读;再跑git check-ignore -v src/config.json,看文件是否被.gitignore排除 - 打开开发者工具(
Ctrl+Shift+P→Developer: Toggle Developer Tools),Console 里搜Failed to start language client或timeout—— 这是语言服务器启动失败的铁证 - TS/JS 项目缺
tsconfig.json或jsconfig.json,自动 import 基本失效;Python 项目没pyproject.toml,Pylance 可能跳过完整分析
真正卡住的地方往往藏在细节里:比如 .git 权限不对、语言服务器进程被杀、workspace 设置覆盖了用户级配置——这些不会报错,但会让 Ctrl+. 和 diff 全部失能。











