终端复用工具-以Tmux为例

终端复用工具可以让CLI环境下开发的工作更加轻松。一方面,它可以方便用户在同一个终端上对不同的工作进行划分,就像上图一样景景有条;另一方面,它将传统的临时会话模式中的会话与终端窗口进行解绑,在多种应用情境中都大有可为。下文以Linux下的终端复用工具Tmux为例。

Tmux

github上开源的终端复用神器,奥义:将会话与窗口分离

三个组成要素:pane(窗格)、window(窗口)、session(会话),从后向前是包含关系

可以在三个层次上根据需要对使用的进程与工作区进行划分

会话

  • 可以在同一个终端中对不同的tmux会话进行管理,尤其是能deattach以及重新attach
  • 远程连接时,在tmux中执行进程,及时deattach,从而登出后继续执行,之后再attach查看结果
  • 可以多个终端attach同一个会话,实现结对编程,不同用户同步并协作完成任务

窗口

  • 终端一次显示一个窗口的内容
  • 窗口方便了暂时不用挪至后台的任务的管理,同时又不必新建会话
  • 一个会话可以有多个窗口,方便多人连接同一会话后协作
  • 预览时,不同的窗口通过光标所在的窗格来区分

窗格

  • tmux可以将窗口分成不同的窗格,并执行不同的指令

  • 多种指令支持窗格的灵活切分和操控(水平与垂直方向)

    如果同时使用vim和tmux,则可以使用vim-tmux-navigator插件来在众多不同窗格之间切换

  • ctrl+b :set synchronize-panes:开启或关闭当前窗口的各窗格同步输入,可以模拟并发情景的输入或拷贝指令

特别地

  • 底层的组件是tmux server,配置在这里生效

  • 使用tpm(tmux plugin manager)可以管理tmux的插件,这些插件在用户tmux-plugins下的repo中可见,解锁更多功能

    • tmux-resurrect:可以手动保存与恢复tmux会话,并可与vim插件vim-obsession等协作来进一步恢复vim等具体进程的会话
    • tmux-continuum:相比上者可以自动备份会话
  • tmux的缓冲区比较特殊

  • 在tmux会话中,多数指令在前缀ctrl+b之后输入(松开后再输入其他键)

  • tmux默认不进行会话的嵌套,例外情况常见于通过会话远程连接后再创建会话

    • 奥义:带前缀的命令用于最外层会话的操控,其他命令用于内层会话操控
  • tmux使用的shell类型默认为login shell

    因为deattach/attach的特性决定了,它要在创建tmux会话的login shell退出后,还能使用它之前初始化的各种资源

同类工具

  • macos:终端模拟器iterm2可以兼容tmux功能
  • win:
    • windows终端(Windows Terminal)可以兼容tmux窗格层次的多数功能
    • windows终端在win11中默认,win10可安装使用,集成了powershellcmdwsl(Windows Subsystem for Linux),而powershell又兼容cmd
    • github上开源的tmux_for_windowsmsys2中提取,可以利用Git Bash来使用tmux,值得借鉴