查不到引用主因是语言服务器未就绪或代码未被索引:需确认文件已保存、右下角语言模式正确(非plain text)、存在tsconfig.json/jsconfig.json或pylance配置,动态调用和未导出变量天然不可追踪。

查不到引用,大概率不是功能坏了,而是语言服务器根本没看到你写的那行调用——它只认“已保存 + 语法合法 + 被索引”的代码。
Shift+F12 按了没反应或返回空列表
这不是快捷键失灵,是语言服务压根没加载或当前文件没被识别为有效源码。常见表现:右下角显示 Plain Text、状态栏一直转圈写 Loading、控制台报 Failed to start language server。
- 点击右下角语言模式,手动选成
TypeScript、Python或对应语言,别让它卡在Plain Text - 打开命令面板(
Ctrl+Shift+P),运行Developer: Toggle Developer Tools,切到Console标签页,搜LSP或server看有没有启动失败日志 - TypeScript/JS 项目必须有
tsconfig.json或jsconfig.json(哪怕只有{"compilerOptions": {"allowJs": true}}) - Python 用户确认设置里
python.languageServer是Pylance,不是已废弃的旧版Microsoft语言服务器
能跳转定义但查不到引用(Go to Definition OK,Find All References 空)
说明声明被识别了,但引用关系没建模出来——这是静态分析的天然边界,不是你配错了。
- 动态调用完全不可见:
obj[methodName]()、eval()、new Function()这类写法,语言服务器直接放弃分析 - 未导出的私有变量(如
const helper = () => {}且没export)在其他文件中即使能运行访问,也不会出现在引用列表 - Vue Options API 的
methods: { handleClick() {} },旧版Vetur不支持反向引用;Composition API 中setup() { return { handleClick } }才可靠 - JS 文件若
jsconfig.json没设"compilerOptions": {"allowJs": true},引用可能被忽略
全局搜索调用位置比 Shift+F12 更靠谱的场景
当语言服务掉链子、或者你明知调用是动态/配置驱动/字符串拼接时,文本搜索反而更直接。
- 选中函数名后按
Ctrl+Shift+F全局搜索,勾选Match Case和Match Whole Word,避免搜到handleClicker这类干扰项 - 对 import 类引用(比如查
utils.ts被谁导入),直接搜from './utils'或import.*utils,开启正则模式更准 - API 封装函数(如
useLogin)可配合正则:启用.*模式后搜useLogin\([^)]*\),快速定位所有调用点 - 真正容易被忽略的是:引用列表依赖「已保存」的代码。光标停在函数名上、文件没保存,语言服务器就看不到你刚写的那行
myFunc()
search.exclude 和 .gitignore 让全局搜索静默失效
你以为在搜整个项目,其实 VSCode 默认跳过了 node_modules、dist、build,甚至你自定义排除的目录——而且不提示。
- 打开全局搜索面板(
Ctrl+Shift+F),看底部“文件中排除”框里是不是有**/node_modules/**或其他意外路径 - 检查设置里的
search.exclude和search.useIgnoreFiles:后者为true时会自动尊重.gitignore规则 - 临时绕过排除:点击搜索面板右上角的
⋯→ 取消勾选Use Exclude Settings and Ignore Files - 若需长期包含某目录(比如
src/lib),在settings.json中显式覆盖:"search.exclude": { "**/node_modules": false, "src/lib/**": false }
最常被绕过的其实是“保存”动作和“语言模式切换”——这两步没做,后面所有操作都只是在跟一个没加载的空壳对话。











