VSCode终端滚动缓冲区默认1000行,超出后旧日志被彻底丢弃;建议设为5000~10000,调试长任务可临时调至20000,修改后需新开终端生效;clear/reset会清空缓冲区,printf '\033c'仅重绘屏幕;persistentSession不保存历史,永久存档须用重定向或script/tee等工具。

terminal.integrated.scrollback 设置太小,旧日志被环形覆盖
VSCode 终端默认只保留 1000 行滚动历史,超出后最老的行会被直接丢弃——不是隐藏,是内存里真没了。你向上滚动到头就停住,不是 UI 卡了,是缓冲区已满。
常见触发场景:python -u app.py、npm run build、tail -f logs.txt、长时间运行的测试套件。只要输出总行数超过 terminal.integrated.scrollback 值,早期日志就不可恢复。
- 日常开发建议设为
5000~10000;调试长任务(如模型训练、C++ 编译)可临时调到20000 - 修改后必须新开终端才生效,已打开的终端仍用启动时的旧值
- 不要设为
0(无限),OOM 风险真实存在;设成100000以上会明显增加内存占用,尤其开多个终端时 - 最稳妥改法:按
Ctrl+Shift+P→ 输入Preferences: Open Settings (JSON)→ 在{}内添加或修改"terminal.integrated.scrollback": 10000
clear 或 reset 命令会清空缓冲区,不是视觉清屏
clear 和 reset 不只是把屏幕变空,它们会主动擦除当前终端的整个滚动缓冲区——历史记录彻底丢失,无法回滚。很多人误以为只是“清屏”,结果关键日志刚打印完就被自己删了。
替代方案:printf '3c'(即 ESC c 控制序列),它只重绘屏幕,不碰缓冲区。适合需要刷新界面但保留历史的场景,比如写监控脚本时定期清屏。
- 运行过
htop、vim、less等 TUI 工具后退出,终端常被重置,历史分段丢失——这是 xterm 兼容行为,非 VSCode bug - 如果必须清屏又想保日志,优先用
printf '\033c';实在要用clear,先确认关键信息已复制或重定向保存
terminal.integrated.persistentSession 开启后仍看不到旧日志?
terminal.integrated.persistentSession 的作用是让终端进程在关闭标签页后继续运行(不 kill shell),但它**不保存滚动缓冲区内容**。重启 VSCode 后,哪怕进程还在,缓冲区也清空了——你看到的是“进程活着”,但“历史没了”。
所以必须配合调大 terminal.integrated.scrollback,否则 persistent 只能帮你省掉重新 cd 和 source 的时间,日志本身还是丢了。
- 该设置仅对 VSCode 1.86+ 有效,且修改后必须重启 VSCode 才生效
- 它只影响用户点击 × 关闭标签页的行为;
exit、Ctrl+D或命令自然结束仍会终止进程 - 远程开发(SSH/Dev Container)下网络中断会导致会话断连,persistent 无效,需手动重连并重启服务
真正要永久保存日志,得靠重定向或外部工具
VSCode 终端的缓冲区本质是内存缓存,关掉软件或重启就清空。想查三天前的某次构建错误?靠 scrollback 没用,必须落地到文件。
简单可靠的做法:把关键命令输出重定向到文件,比如 npm run build > build.log 2>&1,或用 script 命令完整录屏式记录:script -f session.log。
- Linux/macOS 可用
tee同时输出到终端和文件:python app.py 2>&1 | tee app.log - Windows PowerShell 用
Tee-Object:python app.py 2>&1 | Tee-Object -FilePath app.log - VSCode 插件如 “Terminal Recorder” 可自动捕获终端会话,但依赖扩展稳定性,生产环境慎用
5000 足够;需要追溯几小时前的上下文,就得靠文件重定向——内存里的“临时记忆”和磁盘上的“永久存档”,得分开用。


















