alt+f12 是 vs code 中固定绑定的 peek definition 快捷键,用于在悬浮窗中预览定义内容,要求光标位于有效标识符上、语言服务就绪且配置完整(如 tsconfig.json),不支持 alt 泛用组合。

Alt+F12 是 Peek Definition,不是“用 Alt 键查看定义”
VSCode 里没有“按 Alt 键 + 其他键组合泛用查看定义”的机制。真正起效的是 Alt+F12 这个固定绑定,它触发的是「Peek Definition」命令——在当前编辑器内弹出悬浮窗展示定义内容,不离开原位置。
常见误解是以为 Alt 是修饰键、可以搭配任意操作,但实际它只和 F12 组合生效;单独按 Alt 或 Alt+鼠标点击等行为,要么无响应,要么触发别的命令(比如 Alt+单击 是 Go to Type Definition)。
-
Alt+F12必须光标停在可解析的标识符上:比如函数名fetchUser的任意一个字母,不能停在括号里、点号后、字符串中或注释里 - 状态栏右下角语言模式必须正确(如 TypeScript、Python),且对应语言服务器已就绪(小圆点变蓝)
- 如果弹出空白框或没反应,大概率是语言服务未加载,而不是快捷键被占用
为什么 Alt+F12 有时预览失败,但 F12 能跳转
两者走同一套语言服务,但校验逻辑不同:F12 会降级 fallback(比如跳到 node_modules/xxx/index.js),而 Alt+F12 更严格——它只返回有完整类型信息的定义,比如 .d.ts 声明或带 JSDoc 的 JS 函数。
- TS/JS 项目缺失
jsconfig.json或tsconfig.json,Alt+F12往往直接静默失败,F12可能仍能跳进node_modules里的 JS 源码 - 路径别名(如
@/utils)在Alt+F12下无效,除非已在jsconfig.json的compilerOptions.paths中显式配置 - Python 项目没装 Pylance 或解释器未指定,
Alt+F12不会显示任何内容,F12 也可能只跳到 stub 文件
Alt+F12 预览内容过长或截断怎么办
悬浮窗默认宽度固定,滚动条自动出现;但它不支持调整大小,也不能编辑。更关键的是,某些语言服务器(如 Go 的 gopls、Rust 的 rust-analyzer)对 Alt+F12 返回的内容做了主动截断——只给签名和 docstring,不给函数体。
- 想看完整实现,只能用
F12跳转,或配合Shift+F12查看所有引用定位上下文 - 预览窗口里按住
Ctrl(Windows/Linux)再点击类型链接,可直接Peek该类型的定义,无需跳转 - 如果悬浮窗一闪即逝,检查是否启用了
editor.hover.enabled,它和Alt+F12共享底层 hover 服务
替代方案:不用 Alt+F12 也能快速预览
当 Alt+F12 不可用或不满足需求时,有更稳定、更可控的替代方式:
- 悬停鼠标在符号上,等待几毫秒出现 hover 提示;里面常含类型、JSDoc 和「Go to Definition」链接,
Ctrl+单击即可预览(不是跳转) - 快捷键
Ctrl+K Ctrl+I(Windows/Linux)手动触发 hover,比悬停更可靠,尤其适合键盘流用户 - 命令面板输入
Peek Definition执行,绕过快捷键冲突或误触发问题 - 对于 C/C++ 项目,
Alt+F12依赖c_cpp_properties.json中的includePath配置,漏配头文件路径会导致预览为空
真正容易被忽略的是:预览能力不等于跳转能力,它对类型信息完整性更敏感。很多团队只配了基础跳转,却没意识到 Alt+F12 需要额外的语言配置支撑——比如 TS 项目没 tsconfig.json,哪怕函数定义就在当前文件,Alt+F12 也大概率不出内容。











