peek definition没反应是因为语言服务器(lsp)未就绪或文件未被识别;需确认语言模式、检查tsconfig.json/.d.ts、安装对应插件(如pylance/rust-analyzer/volar),并确保光标位于可解析的符号上而非路径字符串。

Peek Definition 为什么没反应?检查语言服务器是否就绪
VSCode 的 Peek Definition(默认快捷键 Alt+F12)本质依赖语言服务器(LSP)提供类型信息。如果按了没弹窗,不是功能坏了,而是 LSP 还没加载完成,或当前文件没被语言服务识别。
- 确认文件后缀是否被正确识别:右下角状态栏看语言模式(如 “TypeScript”),别是 “Plain Text” 或 “JavaScript”(TS 类型在纯 JS 文件里可能不生效)
- 打开命令面板(
Ctrl+Shift+P),运行Developer: Toggle Developer Tools,切到 Console 标签页,看有没有类似Failed to resolve definition或Language client is not ready的报错 - TypeScript/JS 项目需有
tsconfig.json或至少一个.d.ts;Python 需装 Pylance;Rust 需 rust-analyzer 已启动 —— 缺一不可
Alt+F12 弹出空白或只显示“Loading…”?可能是定义位置不可达
Peek Definition 只能预览本地可访问的源码。它不会下载 node_modules 里的压缩包、不会反编译 .d.ts 声明文件以外的代码、也不会跳转到未安装类型的库中。
- 对
node_modules中的第三方库(如lodash),若只有.d.ts而无源码,Peek 会显示声明内容(正常);但若连.d.ts都没生成(比如库没提供类型),就只显示 “No definition found” - 使用
npm link或yarn link的本地包,需确保链接路径下有types字段或index.d.ts,否则 LSP 找不到定义入口 - Vue SFC 中的
<script setup></script>类型,需 VSCode 安装Volar(非 Vetur),且项目启用experimentalRuntimeMode: 'module'才能准确 Peek
想 Peek 但光标在 import 行?试试 Alt+Click 或 Ctrl+点击
直接在 import 语句上触发 Peek Definition,有时会跳到模块入口(如 index.ts),而不是你真正想看的导出类型。这时候手动点更稳。
- 把光标放在 import 的**具体导入名**上(例如
import { useState } from 'react'中的useState),再按Alt+F12 - 或者更简单:按住
Alt键(Windows/Linux)或Option(macOS),鼠标悬停在符号上,出现手型图标后直接点击 —— 这等价于 Peek,且响应更快 - 注意:不要点在字符串路径上(如
'react'),那是模块解析路径,和类型定义不是一回事
Peek 出来的代码不能编辑?那是故意设计的只读视图
Peek 窗口本质是快照预览,不是编辑器标签页。它不监听文件变化,也不允许保存,这是为了性能和语义清晰 —— 你只是“看看”,不是“改改”。
- 需要编辑源码?按
F12(Go to Definition)代替Alt+F12,它会真正打开文件并定位到定义行 - Peek 窗口右上角有三个小按钮:
↑(跳转到上一个定义)、↓(下一个)、×(关闭)。多定义时(如函数重载)用得上 - 如果 Peek 内容太长,滚动条卡顿,说明 LSP 返回了超大声明块(常见于未拆分的巨型
index.d.ts),建议该库作者用export * from './xxx'拆分类型
实际用起来,最常卡住的地方不是快捷键记错,而是光标停的位置不对,或者压根没意识到当前文件根本不在语言服务管辖范围内。先看右下角语言模式,再试 Alt+Click,比反复按 Alt+F12 有效得多。











