📌 为什么选tmux

tmux(Terminal Multiplexer)是一个终端复用工具,它允许你在单个终端窗口中创建多个虚拟终端会话,并能保持这些会话在后台运行。与直接使用终端相比,tmux 提供了更强大的会话管理功能。

核心优势

  • 会话持久化:即使网络断开,会话仍保留在服务器上

  • 多窗口/面板管理:高效组织多个工作环境

  • 会话共享:多个用户可以同时连接同一个会话

📌 ubuntu安装tmux

sudo apt-get install tmux

📌 基本概念

会话(Session)

tmux 会话是一个独立的运行环境,可以包含多个窗口。即使断开连接,会话也会继续在后台运行。

窗口(Window)

每个会话可以包含多个窗口,类似于浏览器中的标签页。

面板(Pane)

每个窗口可以分割成多个面板,允许同时查看和操作多个终端。

📌 常用命令与快捷键

tmux 的所有操作都需要先按下前缀键(默认是 Ctrl+b),然后输入命令键。

会话管理

命令/快捷键 说明
tmux new -s <name> 创建名为 name 的新会话
Ctrl+b d 分离当前会话(会话继续后台运行)
tmux ls 列出所有会话
tmux attach -t <name> 重新连接到指定会话
Ctrl+b $ 重命名当前会话
Ctrl+b s 切换会话

窗口管理

命令/快捷键 说明
Ctrl+b c 创建新窗口
Ctrl+b & 关闭当前窗口
Ctrl+b n 切换到下一个窗口
Ctrl+b p 切换到上一个窗口
Ctrl+b <number> 切换到指定编号的窗口
Ctrl+b , 重命名当前窗口

面板管理

命令/快捷键 说明
Ctrl+b % 垂直分割当前面板
Ctrl+b " 水平分割当前面板
Ctrl+b <arrow> 在面板间移动焦点
Ctrl+b x 关闭当前面板
Ctrl+b z 最大化/恢复当前面板
Ctrl+b Space 切换面板布局

📌 实用技巧

1. 会话恢复

用 tmux-resurrect 插件可以保存 tmux 会话中的窗口和命令,即使服务器重启,也可以恢复 tmux 会话。

1.1. 安装插件管理器 tpm

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

1.2. 编辑 ~/.tmux.conf,加入插件

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'

# 启动 TPM
run '~/.tmux/plugins/tpm/tpm'

1.3. 在 tmux 内按

prefix + I(默认 prefix 是 Ctrl+b)安装插件

1.4. 使用

  • 保存会话:prefix + Ctrl-s

  • 恢复会话:prefix + Ctrl-r

  • 查看已保存的会话:cat ~/.local/share/tmux/resurrect/last

注意tmux-resurrect 保存的是命令和布局,不会保存命令执行的内存状态(比如一个正在跑的 Python 程序不会中途接着跑)。

2. 交换左右面板位置

2.1. 先看当前面板编号

在 tmux 内执行:

tmux list-panes

会输出类似:

0: [80x24] [history 0/2000, 0 bytes] %0 (active)
1: [80x24] [history 0/2000, 0 bytes] %1

这里 %0 和 %1 就是两个面板的 ID。


2.2. 交换两个面板

例如交换 %0 和 %1

tmux swap-pane -s 0 -t 1

2.3. 快捷方式(更方便)

tmux 内置了快捷键:

  • 交换当前面板和下一个面板

    Ctrl+b  {   # 当前面板和上一个面板交换
    Ctrl+b  }   # 当前面板和下一个面板交换
    

    对左右分割和上下分割都有效。

3. 复制模式

  • Ctrl+b [ 进入复制模式

  • 使用方向键移动光标

  • 空格开始选择,回车复制

  • Ctrl+b ] 粘贴

4. 同步输入

在多面板中同时输入相同命令:

示例

# 进入同步模式
Ctrl+b :setw synchronize-panes on

# 关闭同步模式
Ctrl+b :setw synchronize-panes off

5. 快速创建开发环境

示例

# 创建一个包含3个面板的开发会话
tmux new -s dev -d
tmux send-keys -t dev:0 "vim" C-m
tmux split-window -h -t dev:0
tmux split-window -v -t dev:0.1
tmux attach -t dev

📁 附言

修改配置后使其立即生效:tmux source-file ~/.tmux.conf