tmux 的面板与布局
目标
在一个窗口内拆分 pane、设置标题、放大和同步 pane,并把滚动缓冲区保存到文件。最后编写脚本,一次性重现开发布局。
为什么重要
pane 不只是‘拆分屏幕的功能’。把编辑器、服务器和日志放在同一画面中,可以消除上下文切换成本;同步连接到多台服务器的 pane,则能一次执行相同命令。实际工作中经常遗漏的是新 pane 的工作目录——如果不指定,它会从主目录打开,每次都要重新执行 cd。最后还要注意,tmux 的 -h 不是‘水平分割’,而是表示左右排列,几乎每个人都曾在这里混淆。描述时使用左右/上下更安全。
步骤
- 在
panes会话中创建名为dev的窗口,并把它拆分成至少 2 个 pane。 - 将
dev窗口的 pane 数量调整为正好 3 个。 - 分别把三个 pane 的标题设为
editor、server、logs。 - 让
dev窗口中的一个 pane 保持**放大(zoom)**状态。 - 在标题为
logs的 pane 中让tail -f持续运行。 - 开启
dev窗口的 pane 同步(synchronize-panes)。 - 在一个 pane 中输出
labhub-pane-check,接着运行seq 1 100,然后把该 pane 的全部滚动缓冲区保存到/root/tmux/pane.log。文件中必须同时包含labhub-pane-check和100,并且至少有 100 行。 - 创建
/root/tmux/dev.sh <세션이름>。以参数指定的名称创建会话但不连接,在dev窗口中放置 3 个 pane,标题分别为editor/server/logs,并且editorpane 的工作目录必须是/root/tmux。
提示
- 使用
tmux select-pane -t 대상 -T 제목设置 pane 标题。 tmux capture-pane -p -S - -t 대상会从滚动缓冲区起点开始输出。- 使用
tmux split-window -c /경로指定新 pane 的初始目录。若要继承当前 pane 的路径,可使用-c "#{pane_current_path}"。 - 常见错误 1:第 7 步省略
-S -,只会捕获可见画面,无法达到 100 行。 - 常见错误 2:第 6 步开启同步后再做其他操作,会把同一命令发送到所有 pane。请考虑实验顺序。
拆分 pane
在 panes 会话中创建名为 dev 的窗口,并把它拆分成至少 2 个 pane。
prefix + % 左右拆分,prefix + " 上下拆分。使用 CLI 时命令为 split-window。
创建三分布局
将 dev 窗口的 pane 数量调整为正好 3 个。
把已经拆分出的 pane 再拆分一次。当前活动 pane 不同,拆分位置也会不同。
为 pane 设置标题
分别把三个 pane 的标题设为 editor、server、logs。
select-pane 有设置标题的选项。需要分别为每个 pane 设置。
放大 pane
让 dev 窗口中的一个 pane 保持**放大(zoom)**状态。
使用 prefix + z 切换状态。评分时要保持放大状态。
在 logs pane 中跟踪日志
在标题为 logs 的 pane 中让 tail -f 持续运行。
在标题为 logs 的 pane 中运行 tail -f。也可以指定目标 pane,通过 send-keys 发送命令。
开启 pane 同步
开启 dev 窗口的 pane 同步(synchronize-panes)。
这是窗口选项,因此使用 setw。开启后,输入会同时发送到所有 pane。
将滚动缓冲区保存到文件
在一个 pane 中输出 labhub-pane-check,接着运行 seq 1 100,然后把该 pane 的全部滚动缓冲区保存到 /root/tmux/pane.log。文件中必须同时包含 labhub-pane-check 和 100,并且至少有 100 行。
capture-pane 默认只捕获可见画面。需要使用选项把起点指定为滚动缓冲区最上方。
开发布局脚本
创建 /root/tmux/dev.sh <세션이름>。以参数指定的名称创建会话但不连接,在 dev 窗口中放置 3 个 pane,标题分别为 editor/server/logs,并且 editor pane 的工作目录必须是 /root/tmux。
新 pane 在未指定时会从主目录打开。请找出明确指定工作目录的选项。