Code Runner 默认将输出导向只读的 OUTPUT 面板,导致交互失效;需在设置中启用 code-runner.runInTerminal: true 并重启,方可支持 input、颜色输出及 ANSI 序列。

Code Runner 默认不捕获终端输出,必须改配置
Code Runner 插件默认把 node 脚本输出扔进 OUTPUT 面板的 Code Runner 标签页,而不是集成终端。这意味着 process.stdin、readline、prompt() 全部失效,脚本会卡住或报错 TypeError: process.stdin.setRawMode is not a function。
要让 Code Runner 真正“跑在终端里”,必须手动开启终端执行模式:
- 打开 VSCode 设置(
Ctrl + ,),搜索code-runner.runInTerminal - 勾选它,或在
settings.json中添加:"code-runner.runInTerminal": true - 重启终端或重载窗口后,再按
Ctrl+Alt+N,输出就会出现在集成终端中,且支持交互输入
注意:这个设置只影响 Code Runner 的运行方式,不影响调试器(F5)——后者仍需 launch.json 才能工作。
调试器(F5)输出被截断?检查 launch.json 的 console 选项
用 F5 启动 Node.js 调试时,输出是否出现在 DEBUG CONSOLE 还是集成终端,取决于 launch.json 里的 console 字段。默认值是 integratedTerminal,但很多人没配或误配成 internalConsole(已弃用),导致输出不可复制、无滚动缓冲、甚至看不到 console.error。
推荐配置(适用于大多数本地调试场景):
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch via node",
"skipFiles": ["<node_internals>/**"],
"program": "${file}",
"console": "integratedTerminal", // ← 关键:确保是这个值
"env": { "NODE_OPTIONS": "--enable-source-maps" }
}
]
}如果设为 externalTerminal,VSCode 会弹出独立终端窗口,输出无法被 VSCode 搜索或复制;设为 internalConsole 则输出受限于旧版控制台,不支持右键全选、不保留完整堆栈。
终端输出太多、复制不全?别只调 scrollback,先看源头
VSCode 终端默认只缓存约 1000 行,调大 terminal.integrated.scrollback(比如设成 5000)能缓解,但治标不治本。真正的问题常出在输出源头:
-
console.log大量刷屏?改用logging模块写文件,更稳定:logging.basicConfig(filename="debug.log", level=logging.INFO) - 命令本身输出过快(如
npm run dev启动 Webpack)?加| grep -i "compiled\|error"实时过滤,比事后翻找高效得多 - 需要完整日志归档?直接重定向:
node app.js > run.log 2>&1—— 这不是 VSCode 功能,而是 shell 行为,最可靠
别依赖插件做“自动保存输出”,多数插件在进程崩溃、重定向冲突或权限不足时静默失败,反而掩盖问题。
想把终端输出发给 AI 或团队聊天?别手动复制
VSCode 内置终端不提供“一键发到聊天”的 API,但你可以用最小成本打通:
- 右键终端标题栏 →
Save Output As...(需安装Terminal Tabs插件),导出为.log后拖进聊天窗口 - 更轻量的做法:在终端里运行
node script.js 2>&1 | tee output.log,既实时看到输出,又自动存盘,后续可直接分享文件链接 - 若用 Lobster AI 等支持命令注入的聊天插件,可在聊天框里输入
/run node script.js,部分插件会自动捕获并结构化返回 stdout/stderr
真正容易被忽略的是:终端输出一旦经过管道(|)或重定向(>),原始 ANSI 颜色码通常丢失。如果日志里带颜色标记(如 red error / green success),得加 --color=always 参数(如 npm run test -- --color=always | tee test.log)才能保留。


















