tmux : 持久化窗口布局

原文地址:tmux : 持久化窗口布局(永久地址,保存网址不迷路 🙃)

问题描述

在 tmux 中,当每次启动时,我们都需要执行很多快捷键,以初始化界面布局。这种事情通常发生在系统重启之后,我们需要启动新的 tmux 进程,并加载相关配置,然后输入快捷键完成窗口布局。那么有没有什么方法能够在 tmux 启动时,自动创建 Session Window Pane,并按照我们希望的样子呢?

好在有 Tmux Resurrect 插件,它能够持久化 tmux 当前状态,让我们在系统重启之后依旧能够恢复到之前的窗口布局。当安装该插件后,仅需在 tmux 中使用快捷键保存状态,然后下次启动后再使用快捷键恢复状态。

该笔记将记录:在 tmux 中,如何使用 Tmux Resurrect 插件来持久化窗口布局,以及相关问题处理。

解决方案

安装插件(Tmux Resurrect)

1)我们使用 TPM 来安装 Tmux Resurrect 插件,参考 TPM 笔记;
2)更多操作,参考 tmux-resurrect/README.md at master 页面;

插件使用

1)<prefix>, Ctrl+s:当保存成功之后,底部的状态行会提示 Tmux environment saved! 消息。
2)然后,退出 tmux 进程(采用任何方式,正常退出或 KILL -KILL 皆可)
3)最后,重新运行 tmux 命令,通过 <prefix>, Ctrl+r 按键恢复即可;

注意事项

1)该插件默认仅保存窗口布局,如果希望保存环境变量、命令执行历史、恢复运行的程序等等,需要进一步修改 Tmux Resurrect 设置;

场景:实现自动保存

基于 Tmux Resurrect 插件,再通过 tmux-plugins/tmux-continuum 插件将自动保存窗口布局,并且还能实现在启动 tmux 时,自动恢复之前的窗口布局。

1)需要安装 TPM 插件(因为我们使用 TPM 来进行插件管理,所以需要使用该插件)

2)然后,添加如下配置:

set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'

# 每分钟保存一次(这获取比较频繁)
set -g @continuum-save-interval '1'

# 当启动 tmux 进程时,自动恢复之前的布局
set -g @continuum-restore 'on'

3)<prefix>, Ctrl+I 来完成插件安装

我们的某个初始化脚本

我们需要根据目录结构来创建相应的窗口布局,因此使用脚本的方式来实现。

注意事项:该步骤是我们的特殊需求,与持久化窗口布局是无关的,仅是为了快速创建窗口布局。

脚本实现

tmux_start()
{       
    DEFAULT_SESSION=""
    for i in $(find /srv/http/ -maxdepth 1 -type d \( -name 'PROJ*' -o -name 'ORG*' \) -printf "%P\n" \
                   | sort --human-numeric-sort)
    do
        dirname="/srv/http/${i}"
        test -f "${dirname}/.tmuxignore" && continue
        tmux new-session -d -s "${i}" -c "${dirname}" # 使 pane 全部在该目录下
        # 将首个目录作为默认 Session 以在最后 attach 该会话;
        test -z "${DEFAULT_SESSION}" && DEFAULT_SESSION="${i}"
    done
    tmux attach-session -t "${DEFAULT_SESSION}"
}

在创建 Pane 时,如何自动进入指定目录?

每次创建 Pane 时,我们都希望它能直接进入工作目录,而不是默认目录(当前 $HOME 目录)。

我们的做法是:在创建 session 时,切换目录。比如,在 /tmp 中启动 tmux 时,当前 Session 中创建的 Pane 都将以 /tmp 目录开始。所以我们在脚本中使用 tmux new-session 而不是 tmux new-window 指令,虽然 tmux new-window -c 能够指定开始目录,但是这无法控制之后在 window 内创建的 Pane 都在特定目录中。

还有一种做法是,使用 bind 命令来指定:

unbind '"'
bind '"' split-window -v -c '#{pane_current_path}'  # Split panes vertically

unbind %
bind % split-window -h -c '#{pane_current_path}'  # Split panes horizontal

参考文献

How to Manage and Restore Tmux Sessions in Linux - Make Tech Easier
linux - How to change default new window directory from within the tmux - Unix & Linux Stack Exchange
Restore tmux session after reboot - Super User
Restoring tmux Sessions | Andrew Johnson
tmux-continuum/faq.md at master · tmux-plugins/tmux-continuum
tmux new pane has home directory as default instead of previous directory - Unix & Linux Stack Exchange
tmux-plugins/tmux-continuum: Continuous saving of tmux environment. Automatic restore when tmux is started. Automatic tmux start when computer is turned on.
tmux-plugins/tmux-resurrect: Persists tmux environment across system restarts.
unix - How to close a tmux session - Super User

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值