Error Lens 不分析代码也不监听运行输出,仅渲染语言服务器(LSP)推送的静态诊断信息;行尾提示为空主因是 LSP 未启动、语言模式错误、severity 配置不匹配或软换行/缩进干扰。

Error Lens 本身不参与代码运行,也不监听 node、python 或 tsc 的执行输出;它只消费语言服务器(LSP)实时推送的静态诊断信息。所谓“运行时高亮报错”,实际是误读——你看到的行尾提示,全部来自 TypeScript Server、Pyright、ESLint 等在编辑时就已分析出的问题,而非进程 stdout/stderr。
为什么运行 node 或 python 后 Error Lens 没反应?
Error Lens 不解析终端输出,也不 hook 运行命令。它和终端日志完全隔离:
- 你在终端里跑
python main.py报错IndentationError,这个错误不会变成行尾文字 - 哪怕你在代码里写了
console.log(undeclaredVar),TypeScript Server 若未启用或未覆盖该文件,Error Lens 就不会显示任何东西 - 运行时抛出的异常(如
ReferenceError)属于 JavaScript 引擎行为,LSP 无法预知,自然也不会渲染
真正起作用的是语言服务器(LSP),不是运行命令
要让 Error Lens “实时”显示,必须确保对应语言的 LSP 正常工作并持续推送诊断:
- 打开一个
.ts文件,右下角状态栏应显示TypeScript (Volar)或TypeScript (TS Server),而不是Plain Text - Python 项目需启用
pyright:确认settings.json中有"python.languageServer": "Pylance"(Pylance 内置 Pyright) - JS/TS 项目若用
tsconfig.json,确保文件路径在include或默认扫描范围内,否则 LSP 直接跳过 - 运行命令
Developer: Restart Language Server可强制刷新当前文件的诊断缓存
errorLens.showInline 必须为 true,且 errorLens.severity 匹配诊断级别
即使 LSP 正常工作,配置不对也会导致“有波浪线但行尾空白”:
-
"errorLens.showInline": true是行尾文字开关,缺省值虽为true,但重置设置或旧版本可能关闭它 - 默认只显示
error级别;若想看到warning(比如 ESLint 的no-console),必须显式设为:"errorLens.severity": ["error", "warning"] -
"errorLens.diagnosticLevel": "warning"是旧版配置项,已被弃用;新版只认errorLens.severity数组 - 改完
settings.json后,保存文件或切换标签页即可触发刷新,无需重启 VSCode
软换行、混合缩进、装饰插件冲突会导致行尾提示错位
行尾文字“贴到下一行”“遮住注释”“跳到空格后”,不是 Error Lens bug,而是 VSCode 渲染层定位失准:
- 临时禁用软换行:
"editor.wordWrap": "off" - 统一缩进:确保
"editor.detectIndentation": true,再对当前文件执行Editor: Reindent Lines(Shift+Alt+F) - 限制长度防溢出:
"errorLens.maxMessageLength": 60(设太小会截断关键信息,设0会卡 UI) - 冲突插件常见名单:
Bracket Pair Colorizer、Highlight Matching Tag、Indenticator——逐个禁用排查
真正的“运行时错误高亮”只能靠调试器(Debugger)或终端日志人工对照;Error Lens 的价值在于把编辑阶段就能发现的问题,直接钉在代码行尾——它快,但只管静态分析那一层。别指望它告诉你 npm start 崩在哪一行,那是 debugger 和 source map 的事。


















