Spark'Blog

Back

雪山封面雪山封面

前几天我又被一件小事惹烦了。

早上开机,进 WSL2,昨天那套终端布局又没了。

左边那个 pane,本来挂着 Codex。右边上面看仓库,下面跑命令。机器只要重启一次,这些东西就得重新来:开终端,进目录,切 session,分 pane,再把每个窗口摆回原来的位置。

一次两次没什么。连着来几天,真的会烦。

我后来没再往更重的方向折腾。想法收得很窄,就一条:下次开机,我得尽快回到昨天那套工作台。

我最后用的方案#

我最后留的是这一组:

前者负责保存和恢复 tmux 会话,后者负责定时自动保存,顺手把自动恢复也接上。

装完以后,第二天重新进 WSL2,敲一次 tmux,昨天那套布局基本就回来了。对我来说,这已经够用了。

我平时的工作区差不多就是这样:

  • 一个 pane 跑 Codex
  • 一个 pane 看项目目录和 Git 状态
  • 一个 pane 临时跑测试、脚本或者日志

这套布局本身没多复杂。烦的是每天都要重搭一遍。

为什么我会停在这里#

一开始我也想过,能不能把运行中的状态一起保下来。

后来很快就把这条线放下了。要把“长任务继续跑”“交互现场不丢”“输出原样回来”一并解决,复杂度一下就上去了。我的问题没有大到那个程度。

我每天真正卡住的地方很简单:

  • 工作区会散掉
  • 目录要重新切
  • pane 要重新分
  • 节奏会被打断

tmux-resurrect + tmux-continuum 刚好能把这块补上。

官方文档里也写得很老实。tmux-resurrect 默认恢复的是一批比较保守的程序,像 vimlesstophtop 这些。你要更激进的恢复策略,可以继续配,但我自己的目标就停在“把工位摆回去”。

我是怎么配的#

下面这套配置我是在 WSL2 + Ubuntu 里跑通的。

1. 先把 tmuxgit 装上#

sudo apt update
sudo apt install -y tmux git
bash

git 是给 TPM 用的。tmux 本体自然也得先在。

2. 安装 TPM#

TPM 就是 Tmux Plugin Manager

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
bash

后面两个插件都通过它来装。

3. 写 ~/.tmux.conf#

我现在用的是下面这份:

这份配置里我最在意 4 个点:

  • set -g status on
  • set -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

tmux
bash

然后按默认前缀键 Ctrl-b,再按大写 I

  • prefix + I

这一步会让 TPM 把插件拉下来并加载进去。

如果你中途改了配置,重载也很简单:

tmux source-file ~/.tmux.conf
bash

或者在 tmux 里直接按:

  • prefix + r

5. 先手动存一次#

插件装好以后,我会先把工作区摆成自己习惯的样子。

比如:

  • 左边主 pane 跑 Codex
  • 右上角看项目目录
  • 右下角跑测试或者日志

摆好之后,先手动保存一次:

  • prefix + Ctrl-s

想确认恢复有没有正常工作,也可以马上试:

  • prefix + Ctrl-r

这两个快捷键都是 tmux-resurrect 自带的。

6. 我现在每天怎么进#

我现在每天进 WSL2 之后,基本就是这一条:

tmux attach 2>/dev/null || tmux
bash

它的意思很直白:

  • 有现成的 tmux server,就直接 attach
  • 没有,就新起一个

而自动恢复,就是在“新起这个 server”的时候接上的。

后来我嫌每次敲这一长串烦,干脆在 ~/.bashrc 里加了个别名:

alias ta='tmux attach 2>/dev/null || tmux'
bash

现在就省事很多了:

ta
bash

这东西到底省了我什么#

它省掉的不是某一条命令。

它省掉的是那种很碎、很烦、每次都得来一遍的重建过程。

比如:

  • 刚进终端,先 cd
  • 发现 pane 不对,重新切
  • session 没进对,再 attach 一次
  • 想起来昨天哪个窗口放的是日志

这些事情单拿出来都不大。凑在一起,就会把刚开始工作的那点状态磨掉。

现在我开机进 WSL2,敲个 ta,工作区回来得差不多。脑子不用先花在“整理桌面”上。

这点改动对 Codex vibecoding 挺有用,因为这种工作方式本来就很依赖多个 pane 之间来回切。

这套办法的边界#

这块我也提前说清楚,免得装完之后心里落差太大。

Windows 一重启,正在跑的东西还是会断。

包括:

  • 没跑完的构建
  • 跑到一半的测试
  • 正在执行的脚本
  • 交互中的 Codex 会话

我自己能接受这个边界,所以这套方案用得很顺。

最后#

这套东西没有多花哨。

我现在每天就是开机,进 WSL2,敲 ta,然后继续写。

折腾完以后回头看,解决的也就是一件很小的事:别让我每天先重搭一遍工位。

可这种小事每天都来一次,处理掉之后,体感差别还是挺明显的。

参考#

WSL2 重启后,我不想再重搭一遍 Codex 工作台了
https://astro-pure.js.org/blog/wsl2-tmux-codex-vibecoding
Author Spark
Published at April 8, 2026