什么是 Tmux

Tmux (Terminal Multiplexer) 是一个终端复用器,允许你在一个终端窗口中运行多个会话,并且可以在后台保持运行。即使关闭 SSH 连接或终端窗口,tmux 会话也会继续运行。

基本操作

会话管理

# 创建新会话
tmux

# 创建命名会话
tmux new -s myproject

# 列出所有会话
tmux ls

# 连接到最近的会话
tmux attach

# 连接到指定会话
tmux attach -t myproject

# 杀死指定会话
tmux kill-session -t myproject

# 杀死所有会话
tmux kill-server

分离和重连

# 在 tmux 会话中按快捷键分离
Ctrl+b d

# 或使用命令
tmux detach

常用快捷键

所有 tmux 快捷键都以 Ctrl+b 作为前缀(按下后松开,再按功能键)。

前缀键

功能默认快捷键优化配置说明
主前缀键Ctrl+bCtrl+b保持默认
次前缀键Ctrl+bGNU-Screen 兼容

会话管理

功能默认快捷键优化配置说明
分离会话prefix dprefix d保持默认
列出会话prefix sprefix s保持默认
重命名会话prefix $prefix $保持默认
新建会话prefix :newprefix Ctrl+c更快捷
查找会话prefix sprefix Ctrl+f命令提示查找
切换上一会话prefix Lprefix Shift+Tab更直观

窗口管理

功能默认快捷键优化配置说明
创建窗口prefix cprefix c保持默认
重命名窗口prefix ,prefix ,保持默认
列出窗口prefix wprefix w保持默认
关闭窗口prefix &prefix &保持默认
切换窗口prefix 0-9prefix 0-9保持默认
下一个窗口prefix nprefix Ctrl+lVim 风格
上一个窗口prefix pprefix Ctrl+hVim 风格
最后活动窗口prefix lprefix Tab更快捷

面板操作

功能默认快捷键优化配置说明
垂直分割prefix %prefix _更直观
水平分割prefix "prefix -更直观
关闭面板prefix xprefix x保持默认
切换面板prefix oprefix o保持默认
最大化面板prefix zprefix +自定义脚本
向左移动prefix ←prefix hVim 风格
向下移动prefix ↓prefix jVim 风格
向上移动prefix ↑prefix kVim 风格
向右移动prefix →prefix lVim 风格
向左调整prefix Ctrl+←prefix HVim 大写
向下调整prefix Ctrl+↓prefix JVim 大写
向上调整prefix Ctrl+↑prefix KVim 大写
向右调整prefix Ctrl+→prefix LVim 大写
交换面板(下)prefix {prefix >更直观
交换面板(上)prefix }prefix <更直观

复制模式

功能默认快捷键优化配置说明
进入复制模式prefix [prefix Enter更快捷
开始选择SpacevVi 模式
矩形选择Ctrl+vVi 模式
复制选择EnteryVi 模式
取消qEscapeVi 模式
行首0HVi 模式
行尾$LVi 模式
粘贴prefix ]prefix p更直观

缓冲区管理

功能默认快捷键优化配置说明
列出缓冲区prefix #prefix b更直观
粘贴缓冲区prefix ]prefix p更直观
选择缓冲区prefix =prefix P更直观

其他操作

功能默认快捷键优化配置说明
显示快捷键prefix ?prefix ?保持默认
显示时钟prefix tprefix t保持默认
重载配置prefix :source-fileprefix r快速重载
编辑配置prefix e打开编辑器
清屏+历史Ctrl+lCtrl+l增强清屏
鼠标切换prefix m切换鼠标模式
URL 查看prefix Uurlview 集成
文件选择器prefix Ffpp 集成

配置说明:优化配置基于 gpakosz/.tmux,采用 Vim 风格导航,提供更直观的快捷键和增强功能。

常用场景

1. 运行长期服务

# 创建会话并启动开发服务器
tmux new -s dev
npm run dev

# 按 Ctrl+b d 分离会话
# 关闭终端窗口,服务继续运行

# 稍后重连
tmux attach -t dev

2. SSH 远程工作

# SSH 连接到服务器
ssh user@server

# 创建或连接到 tmux 会话
tmux attach || tmux new -s work

# 即使 SSH 断开,工作也不会丢失

3. 多任务并行

# 创建会话
tmux new -s multi

# 创建多个窗口
Ctrl+b c  # 窗口1: 编辑器
Ctrl+b c  # 窗口2: 服务器
Ctrl+b c  # 窗口3: 日志监控

# 在窗口间快速切换
Ctrl+b 0  # 切换到窗口0
Ctrl+b 1  # 切换到窗口1

配置文件

创建 ~/.tmux.conf 自定义配置:

# 修改前缀键为 Ctrl+a(可选)
# set -g prefix C-a
# unbind C-b
# bind C-a send-prefix

# 启用鼠标支持
set -g mouse on

# 设置窗口和面板索引从 1 开始
set -g base-index 1
setw -g pane-base-index 1

# 增加历史记录行数
set -g history-limit 10000

# 快速重载配置
bind r source-file ~/.tmux.conf \; display "Config reloaded!"

# 更直观的分割快捷键
bind | split-window -h
bind - split-window -v

重载配置:

tmux source-file ~/.tmux.conf

进阶技巧

复制模式

# 进入复制模式
Ctrl+b [

# 使用 vi 风格导航
h, j, k, l  # 移动光标
Space       # 开始选择
Enter       # 复制选中内容
q           # 退出复制模式

# 粘贴
Ctrl+b ]

同步面板输入

# 在命令模式中启用
Ctrl+b :
setw synchronize-panes on

# 关闭
setw synchronize-panes off

保存会话布局

使用 tmux-resurrect 插件可以保存和恢复会话:

# 安装 TPM (Tmux Plugin Manager)
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

# 在 ~/.tmux.conf 中添加
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'

# 重载配置并安装插件
# Ctrl+b I (大写 I)

总结

Tmux 的核心优势:

  • 会话持久化:关闭终端不影响运行
  • 多窗口管理:一个终端运行多个任务
  • 面板分割:同时查看多个输出
  • 远程工作:SSH 断开后可恢复

记住最重要的三个命令:

  1. tmux new -s name - 创建会话
  2. Ctrl+b d - 分离会话
  3. tmux attach -t name - 重连会话