vscode终端会话不丢失需开启persistentsession并重启生效,配合增大scrollback值、命名终端与reuseterminal复用;退出时须彻底关闭进程而非仅关窗口。

VSCode 重启后终端会话和历史记录必然丢失——这不是配置问题,而是默认行为。真正的“不丢失”,指的是让终端进程不终止、缓冲区不重置、复用时能接续上下文。关键不在“保存”,而在“不销毁 + 不重建”。
terminal.integrated.persistentSession 必须开启且重启生效
这是实现“关闭标签页但不杀进程”的唯一开关,仅 VSCode 1.86+ 支持。它让终端在点击 × 后转入隐藏状态,而非立即 kill 对应的 shell 进程。
- 设置项为
"terminal.integrated.persistentSession": true,必须写入settings.json或通过 UI 启用 - 改完不重启 VSCode,该配置完全无效——后台进程管理模块只在启动时读取此值
- Windows/macOS/Linux 行为一致,但 Windows 上若终端用的是
cmd.exe,某些异常退出(如exit /b 1)仍可能绕过 persistent 逻辑 - 注意:它只影响「用户主动关闭标签页」场景;
exit、Ctrl+D、命令自然结束仍会终止进程,persistent 不起作用
scrollback 值要调大,否则历史“存在但看不见”
即使终端进程没死,VSCode 默认只保留 1000 行滚动缓冲,超出部分被丢弃。你看到的“历史没了”,大概率是缓冲区溢出,不是会话丢了。
- 修改
"terminal.integrated.scrollback",推荐设为5000~20000;设太高(如 100000)会导致内存占用明显上升,尤其开多个终端时 - 该设置实时生效,无需重启,但只对新创建的终端生效;已存在的终端需右键 → “Kill Terminal”再新建才能应用新值
- 缓冲区内容不跨 VSCode 实例持久化——关掉整个 VSCode 再打开,哪怕 persistentSession 开着,旧终端的 scrollback 也清空了
命名 + reuseTerminal 是模拟“固定终端”的实际手段
VSCode 没有 UI 钉住按钮,但你可以用命名机制让同名终端复用已有实例,避免每次点 + 都启一个全新 shell。
- 右键终端标签页 → “Rename”,起个明确名,如
dev-server或postgres-cli - 启用
"terminal.integrated.reuseTerminal": true:之后运行Terminal: Create New Terminal(或Ctrl+Shift+`),若已有同名终端且未彻底退出,就会激活它,而不是新建 - ⚠️ 注意:如果进程已死(比如
npm run dev崩了),复用会失败,标签页显示“已终止”,此时得手动删掉旧标签再新建 - 远程开发(SSH/Dev Container)下,网络中断会导致终端会话丢失,命名+reuse 无法恢复,只能靠重连后手动重启服务
真正容易被忽略的点:退出方式决定一切
很多人调好了所有配置,却在重启后发现什么都没恢复——问题出在“怎么关 VSCode”。
- macOS:必须按
Cmd+Q或 Dock 右键选「退出」,才触发完整会话写入;只关窗口(Cmd+W)不退出进程,状态不会落盘 - Windows:任务栏右键 → 「关闭窗口」或结束
Code.exe进程,才能保存 terminal 状态;单纯点 × 只是关闭窗口,下次启动仍是新会话 - Linux:行为类似 Windows,依赖桌面环境对“退出应用”的定义,建议用命令行
killall code确保进程终止 - 一旦用了
code -r命令行启动,restoreWindows 逻辑就失效——它强制复用窗口,但不保证恢复终端会话,除非你先正常退出过一次











