终端复用工具可以让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可安装使用,集成了
powershell
、cmd
、wsl
(Windows Subsystem for Linux),而powershell又兼容cmd - github上开源的
tmux_for_windows
从msys2
中提取,可以利用Git Bash来使用tmux,值得借鉴