终端复用器

(5 mins to read)

tmux

基本概念

通常,终端窗口和会话是绑定的,打开和关闭终端就意味着会话的开始和结束。

tmux则可以解绑终端和会话,这样每个会话可以拥有多个终端,终端也可以和会话分离以及重新接入。

tmux

  • 服务器:一个tmux服务器可以管理多个会话
  • 会话 (session):一个会话可以有多个窗口,但同时只能显示一个窗口(可以类比成多桌面,不同的桌面干不同的事情)
  • 窗口 (window):一个窗口可以分割成多个窗格
  • 窗格 (pane):即之前的一个终端窗口
1
2
3
4
# install
sudo apt install tmux
# uninstall
sudo apt remove tmux

注:还是建议从源码编译,apt安装的版本太旧,导致每次启动tmux的时候都会更新一遍tpm。

1
2
3
4
5
6
7
8
# install
git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make
sudo cp tmux /usr/local/bin
# uninstall
sudo rm /usr/local/bin/tmux

tmux的默认键位不太友好,选择oh my tmux的配置。

1
2
3
4
cd
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .

.tmux.conf.local中添加下面配置:

1
2
3
set -g mouse on
set -g mouse-select-pane on
set -g @plugin 'catppuccin/tmux'

会话操作

  • tmux:打开一个tmux服务器
  • exit:退出
  • tmux new -s name, alias tnew="tmux new -s":新建一个名为name的会话
  • tmux ls:列出所有会话
  • tmux attach -t id/name:恢复会话(只有一个会话可以不用输入-t
  • tmux kill-session -t id/name:关闭会话
  • tmux switch -t id/name:切换会话

窗格操作

  • C-a:前缀键(也可以是默认的C-b;注意是先按下,然后松开,再按后面的键)
  • -:上下分窗格
  • _:左右分窗格
  • x, C-d:关闭当前窗格
  • z:最大化/恢复窗格
  • hjkl:窗格移动
  • HJKL:窗格大小调整
  • </>:交换窗格位置
  • d:分离,后续可以再attach回来

窗口操作

  • c:新建窗口
  • C-h/C-l:浏览窗口
  • <number>:跳转到该窗口
  • ,:窗口重命名

工作流

通常开一个tmux,然后用<prefix>-/<prefix>_分割多个窗格即可。

有时候要跑一些长任务,可以运行之后<prefix>d进行detach。

无配置版

1
2
3
4
5
6
7
8
tmux
ctrl-b `:set -g mouse on`
ctrl-b `:kill-session` # 关闭当前会话,也即关闭所有窗格
ctrl-b % # 横向分屏
ctrl-b " # 纵向分屏
ctrl-b 方向键 # 切换窗格
ctrl-b [ # 开始滚屏
ctrl-d # 关闭当前pane

zellij

1
2
3
4
5
6
# install
wget https://github.com/zellij-org/zellij/releases/download/v0.38.2/zellij-x86_64-unknown-linux-musl.tar.gz
tar -xvf zellij-x86_64-unknown-linux-musl.tar.gz
sudo mv zellij /usr/local/bin
# uninstall
sudo rm /usr/local/bin/zellij

这里窗口被叫作标签(tab;感觉更清晰),窗格仍然是pane。

标签操作

  • C-t起始
    • n:新建标签
    • x:关闭当前标签
  • C-o:分离当前标签(和tmux一样,可以zellij attach <name>回来)

窗格操作

  • C-p起始
    • n:新建窗格(会自动选择垂直还是水平划分)
    • x:关闭当前窗格
  • C-n-<+|->:改变当前窗格大小(这个不能用鼠标操作)
  • C-h-<h|j|k|l>/方向键:浏览窗格

总体感觉一般般,默认的配色我也不太喜欢,不如tmux好用。

  • C-q:退出