vscode终端滚动缓冲区默认1000行,超出后旧日志被彻底丢弃;建议设为5000~10000,调试时可临时调至20000,但不可设为0或过大以防oom;clear/reset会清空缓冲区,printf '\033c'仅重绘屏幕;persistentsession不保存历史,需配合scrollback设置;长期日志应转向文件重定向或专业日志工具。

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以上会明显增加内存占用,尤其开多个终端时 - 修改后必须新开终端才生效,已打开的终端仍用启动时的旧值
clear 或 reset 命令会清空缓冲区,不是视觉清屏
clear 和 reset 不只是把屏幕变空,它们会主动擦除当前终端的整个滚动缓冲区——历史记录彻底丢失,无法回滚。很多人误以为只是“清屏”,结果关键日志刚打印完就被自己删了。
替代方案:printf '\033c'(即 ESC c 控制序列),它只重绘屏幕,不碰缓冲区。适合需要刷新界面但保留历史的场景,比如写监控脚本时定期清屏。
- 如果必须清屏又想保日志,优先用
printf '\033c' - 实在要用
clear,先确认关键信息已复制或重定向保存 - 运行过
htop、vim、less等 TUI 工具后退出,终端常被重置,历史分段丢失——这是 xterm 兼容行为,非 VSCode bug
terminal.integrated.persistentSession 开启后仍看不到旧日志?
terminal.integrated.persistentSession 的作用是让终端进程在关闭标签页后继续运行(不 kill shell),但它不保存滚动缓冲区内容。重启 VSCode 后,哪怕进程还在,缓冲区也清空了——你看到的是“进程活着”,但“历史没了”。
所以必须配合调大 terminal.integrated.scrollback,否则 persistent 只能帮你省掉重新 cd 和 source 的时间,日志本身还是丢了。
- 该设置仅对 VSCode
1.86+有效,且修改后必须重启 VSCode 才生效 - 它只影响用户点击 × 关闭标签页的行为;
exit、Ctrl+D或命令自然结束仍会终止进程,persistent不起作用 - 缓冲区内容不跨 VSCode 实例持久化——关掉整个 VSCode 再打开,哪怕
persistentSession开着,旧终端的 scrollback 也清空了
真正长期依赖终端看日志,说明工具链已经越界了
VSCode 终端是交互辅助界面,不是日志系统。滚动缓冲区再大,也只是内存缓存,不落盘、不索引、不搜索、不归档。
如果你发现经常要翻几十分钟前的输出、反复比对上下文、或者靠截图/手抄来定位问题,那该考虑换工具了:
- 用
script或tee把关键命令输出重定向到文件:python -u train.py | tee train.log - 用
tail -f配合外部编辑器(如 VSCode 自带的文件监视)查看实时日志文件 - 服务类应用直接配置日志轮转 +
journalctl/docker logs -t等专业工具
缓冲区调得再大,也挡不住一次意外的 clear、一次 TUI 退出重置、或一次 VSCode 全局重启——这些才是日志真正消失的高频路径。











