Tmux Resurrect 无须任何配置,就能够备份 tmux 会话中的各种细节,包括窗口、面板的顺序、布局、工作目录,运行程序等等数据。因此它能在系统重启后完全地恢复会话。由于其幂等的恢复机制,它不会试图去恢复一个已经存在的窗口或者面板,所以,即使你不小心多恢复了几次会话,它也不会出现问题,这样主动恢复时我们就不必担心手抖多按了一次。另外,如果你是 tmuxinator 用户,我也建议你迁移到 tmux-resurrect 插件上来,具体请参考 Migrating from tmuxinator

Tmux Resurrec 安装过程如下所示:

1
2
3
cd ~/.tmux
mkdir plugins
git clone https://github.com/tmux-plugins/tmux-resurrect.git

安装后需在 ~/.tmux.conf 中增加一行配置:

1
run-shell ~/.tmux/plugins/tmux-resurrect/resurrect.tmux

至此安装成功,按下 prefix + r 重载 tmux 配置。

Tmux Resurrec 提供如下两个操作:

  • 保存,快捷指令是 prefix + Ctrl + s,tmux 状态栏在保存开始,保存后分别提示”Saving…”,”Tmux environment saved !”。
  • 恢复,快捷指令是 prefix + Ctrl + r,tmux 状态栏在恢复开始,恢复后分别提示”Restoring…”,”Tmux restore complete !”。

保存时,tmux 会话的详细信息会以文本文件的格式保存到 ~/.tmux/resurrect 目录,恢复时则从此处读取,由于数据文件是明文的,因此你完全可以自由管理或者编辑这些会话状态文件(如果备份频繁,记得定期清除历史备份)。

可选的配置

Tmux Resurrec 本身是免配置开箱即用的,但同时也提供了如下选项以便修改其默认设置。

1
2
3
4
set -g @resurrect-save 'S' # 修改保存指令为S
set -g @resurrect-restore 'R' 修改恢复指令为R
# 修改会话数据的保持路径,此处不能使用除了$HOME, $HOSTNAME, ~之外的环境变量
set -g @resurrect-dir '/some/path'

默认情况下只有一个保守的列表项(即 vi vim nvim emacs man less more tail top htop irssi mutt)可以恢复,对此 Restoring programs doc 解释了怎么去恢复额外的项目。

进阶的备份

除了基础备份外,Tmux Resurrec 还提供进阶的备份功能,如下所示:

  • 恢复 vim 和 neovim 会话
  • 恢复面板内容
  • 恢复 shell 的历史记录(实验性功能)

进阶的备份功能默认不开启,需要特别配置。

1)恢复 vim 和 neovim 会话,需要完成如下两步:

  • 通过 vim 的 vim-obsession 插件保存 vim/neovim 会话。

    1
    2
    3
    cd ~/.vim/bundle
    git clone git://github.com/tpope/vim-obsession.git
    vim -u NONE -c "helptags vim-obsession/doc" -c q
  • ~/.tmux.conf 中增加两行配置:

    1
    2
    set -g @resurrect-strategy-vim 'session' # for vim
    set -g @resurrect-strategy-nvim 'session' # for neovim

2)恢复面板内容,需在 ~/.tmux.conf 中增加一行配置:

1
set -g @resurrect-capture-pane-contents 'on' # 开启恢复面板内容功能

目前使用该功能时,请确保 tmux 的 default-command 没有包含 && 或者 || 操作符,否则将导致 bug。(查看 default-command 的值,请使用命令 tmux show -g default-command。)

3)恢复 shell 的历史记录,需在 ~/.tmux.conf 中增加一行配置:

1
set -g @resurrect-save-shell-history 'on'

由于技术的限制,保存时,只有无前台任务运行的面板,它的 shell 历史记录才能被保存。