LabHub
学习 学习路径 课程

vim 与 tmux

tmux 的面板与布局

在 LabHub 中继续学习

目标

在一个窗口内拆分 pane、设置标题、放大和同步 pane,并把滚动缓冲区保存到文件。最后编写脚本,一次性重现开发布局。

为什么重要

pane 不只是‘拆分屏幕的功能’。把编辑器、服务器和日志放在同一画面中,可以消除上下文切换成本;同步连接到多台服务器的 pane,则能一次执行相同命令。实际工作中经常遗漏的是新 pane 的工作目录——如果不指定,它会从主目录打开,每次都要重新执行 cd。最后还要注意,tmux 的 -h 不是‘水平分割’,而是表示左右排列,几乎每个人都曾在这里混淆。描述时使用左右/上下更安全。

步骤

  1. panes 会话中创建名为 dev 的窗口,并把它拆分成至少 2 个 pane。
  2. dev 窗口的 pane 数量调整为正好 3 个
  3. 分别把三个 pane 的标题设为 editorserverlogs
  4. dev 窗口中的一个 pane 保持**放大(zoom)**状态。
  5. 在标题为 logs 的 pane 中让 tail -f 持续运行。
  6. 开启 dev 窗口的 pane 同步(synchronize-panes)。
  7. 在一个 pane 中输出 labhub-pane-check,接着运行 seq 1 100,然后把该 pane 的全部滚动缓冲区保存到 /root/tmux/pane.log。文件中必须同时包含 labhub-pane-check100,并且至少有 100 行。
  8. 创建 /root/tmux/dev.sh <세션이름>。以参数指定的名称创建会话但不连接,在 dev 窗口中放置 3 个 pane,标题分别为 editor/server/logs,并且 editor pane 的工作目录必须是 /root/tmux

提示

拆分 pane

panes 会话中创建名为 dev 的窗口,并把它拆分成至少 2 个 pane。

prefix + % 左右拆分,prefix + " 上下拆分。使用 CLI 时命令为 split-window。

创建三分布局

dev 窗口的 pane 数量调整为正好 3 个

把已经拆分出的 pane 再拆分一次。当前活动 pane 不同,拆分位置也会不同。

为 pane 设置标题

分别把三个 pane 的标题设为 editorserverlogs

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-check100,并且至少有 100 行。

capture-pane 默认只捕获可见画面。需要使用选项把起点指定为滚动缓冲区最上方。

开发布局脚本

创建 /root/tmux/dev.sh <세션이름>。以参数指定的名称创建会话但不连接,在 dev 窗口中放置 3 个 pane,标题分别为 editor/server/logs,并且 editor pane 的工作目录必须是 /root/tmux

新 pane 在未指定时会从主目录打开。请找出明确指定工作目录的选项。