

前几天我又被一件小事惹烦了。
早上开机,进 WSL2,昨天那套终端布局又没了。
左边那个 pane,本来挂着 Codex。右边上面看仓库,下面跑命令。机器只要重启一次,这些东西就得重新来:开终端,进目录,切 session,分 pane,再把每个窗口摆回原来的位置。
一次两次没什么。连着来几天,真的会烦。
我后来没再往更重的方向折腾。想法收得很窄,就一条:下次开机,我得尽快回到昨天那套工作台。
我最后用的方案#
我最后留的是这一组:
前者负责保存和恢复 tmux 会话,后者负责定时自动保存,顺手把自动恢复也接上。
装完以后,第二天重新进 WSL2,敲一次 tmux,昨天那套布局基本就回来了。对我来说,这已经够用了。
我平时的工作区差不多就是这样:
- 一个 pane 跑
Codex - 一个 pane 看项目目录和 Git 状态
- 一个 pane 临时跑测试、脚本或者日志
这套布局本身没多复杂。烦的是每天都要重搭一遍。
为什么我会停在这里#
一开始我也想过,能不能把运行中的状态一起保下来。
后来很快就把这条线放下了。要把“长任务继续跑”“交互现场不丢”“输出原样回来”一并解决,复杂度一下就上去了。我的问题没有大到那个程度。
我每天真正卡住的地方很简单:
- 工作区会散掉
- 目录要重新切
- pane 要重新分
- 节奏会被打断
tmux-resurrect + tmux-continuum 刚好能把这块补上。
官方文档里也写得很老实。tmux-resurrect 默认恢复的是一批比较保守的程序,像 vim、less、top、htop 这些。你要更激进的恢复策略,可以继续配,但我自己的目标就停在“把工位摆回去”。
我是怎么配的#
下面这套配置我是在 WSL2 + Ubuntu 里跑通的。
1. 先把 tmux 和 git 装上#
sudo apt update
sudo apt install -y tmux gitbashgit 是给 TPM 用的。tmux 本体自然也得先在。
2. 安装 TPM#
TPM 就是 Tmux Plugin Manager。
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpmbash后面两个插件都通过它来装。
3. 写 ~/.tmux.conf#
我现在用的是下面这份:
# 基础体验
set -g mouse on
set -g history-limit 100000
set -g base-index 1
setw -g pane-base-index 1
setw -g mode-keys vi
# continuum 依赖状态栏钩子,别关
set -g status on
# 快速重载配置
unbind r
bind r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"
# 插件
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# 启动 tmux server 时自动恢复
set -g @continuum-restore 'on'
# 每 15 分钟自动保存一次
set -g @continuum-save-interval '15'
# 如果你想把 pane 的滚动内容一起存下来,可以打开这一行
# set -g @resurrect-capture-pane-contents 'on'
# TPM 初始化,必须放在最底部
run '~/.tmux/plugins/tpm/tpm'bash这份配置里我最在意 4 个点:
set -g status onset -g @plugin 'tmux-plugins/tmux-resurrect'set -g @plugin 'tmux-plugins/tmux-continuum'set -g @continuum-restore 'on'
其他部分基本都是日常手感配置。
还有一个细节别漏:run '~/.tmux/plugins/tpm/tpm' 必须放在最底部。
4. 进入 tmux,把插件装上#
先启动一次 tmux:
tmuxbash然后按默认前缀键 Ctrl-b,再按大写 I:
prefix + I
这一步会让 TPM 把插件拉下来并加载进去。
如果你中途改了配置,重载也很简单:
tmux source-file ~/.tmux.confbash或者在 tmux 里直接按:
prefix + r
5. 先手动存一次#
插件装好以后,我会先把工作区摆成自己习惯的样子。
比如:
- 左边主 pane 跑
Codex - 右上角看项目目录
- 右下角跑测试或者日志
摆好之后,先手动保存一次:
prefix + Ctrl-s
想确认恢复有没有正常工作,也可以马上试:
prefix + Ctrl-r
这两个快捷键都是 tmux-resurrect 自带的。
6. 我现在每天怎么进#
我现在每天进 WSL2 之后,基本就是这一条:
tmux attach 2>/dev/null || tmuxbash它的意思很直白:
- 有现成的
tmux server,就直接 attach - 没有,就新起一个
而自动恢复,就是在“新起这个 server”的时候接上的。
后来我嫌每次敲这一长串烦,干脆在 ~/.bashrc 里加了个别名:
alias ta='tmux attach 2>/dev/null || tmux'bash现在就省事很多了:
tabash这东西到底省了我什么#
它省掉的不是某一条命令。
它省掉的是那种很碎、很烦、每次都得来一遍的重建过程。
比如:
- 刚进终端,先
cd - 发现 pane 不对,重新切
- session 没进对,再 attach 一次
- 想起来昨天哪个窗口放的是日志
这些事情单拿出来都不大。凑在一起,就会把刚开始工作的那点状态磨掉。
现在我开机进 WSL2,敲个 ta,工作区回来得差不多。脑子不用先花在“整理桌面”上。
这点改动对 Codex vibecoding 挺有用,因为这种工作方式本来就很依赖多个 pane 之间来回切。
这套办法的边界#
这块我也提前说清楚,免得装完之后心里落差太大。
Windows 一重启,正在跑的东西还是会断。
包括:
- 没跑完的构建
- 跑到一半的测试
- 正在执行的脚本
- 交互中的
Codex会话
我自己能接受这个边界,所以这套方案用得很顺。
最后#
这套东西没有多花哨。
我现在每天就是开机,进 WSL2,敲 ta,然后继续写。
折腾完以后回头看,解决的也就是一件很小的事:别让我每天先重搭一遍工位。
可这种小事每天都来一次,处理掉之后,体感差别还是挺明显的。