什么是 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+b | Ctrl+b | 保持默认 |
| 次前缀键 | 无 | Ctrl+b | GNU-Screen 兼容 |
会话管理
| 功能 | 默认快捷键 | 优化配置 | 说明 |
|---|---|---|---|
| 分离会话 | prefix d | prefix d | 保持默认 |
| 列出会话 | prefix s | prefix s | 保持默认 |
| 重命名会话 | prefix $ | prefix $ | 保持默认 |
| 新建会话 | prefix :new | prefix Ctrl+c | 更快捷 |
| 查找会话 | prefix s | prefix Ctrl+f | 命令提示查找 |
| 切换上一会话 | prefix L | prefix Shift+Tab | 更直观 |
窗口管理
| 功能 | 默认快捷键 | 优化配置 | 说明 |
|---|---|---|---|
| 创建窗口 | prefix c | prefix c | 保持默认 |
| 重命名窗口 | prefix , | prefix , | 保持默认 |
| 列出窗口 | prefix w | prefix w | 保持默认 |
| 关闭窗口 | prefix & | prefix & | 保持默认 |
| 切换窗口 | prefix 0-9 | prefix 0-9 | 保持默认 |
| 下一个窗口 | prefix n | prefix Ctrl+l | Vim 风格 |
| 上一个窗口 | prefix p | prefix Ctrl+h | Vim 风格 |
| 最后活动窗口 | prefix l | prefix Tab | 更快捷 |
面板操作
| 功能 | 默认快捷键 | 优化配置 | 说明 |
|---|---|---|---|
| 垂直分割 | prefix % | prefix _ | 更直观 |
| 水平分割 | prefix " | prefix - | 更直观 |
| 关闭面板 | prefix x | prefix x | 保持默认 |
| 切换面板 | prefix o | prefix o | 保持默认 |
| 最大化面板 | prefix z | prefix + | 自定义脚本 |
| 向左移动 | prefix ← | prefix h | Vim 风格 |
| 向下移动 | prefix ↓ | prefix j | Vim 风格 |
| 向上移动 | prefix ↑ | prefix k | Vim 风格 |
| 向右移动 | prefix → | prefix l | Vim 风格 |
| 向左调整 | prefix Ctrl+← | prefix H | Vim 大写 |
| 向下调整 | prefix Ctrl+↓ | prefix J | Vim 大写 |
| 向上调整 | prefix Ctrl+↑ | prefix K | Vim 大写 |
| 向右调整 | prefix Ctrl+→ | prefix L | Vim 大写 |
| 交换面板(下) | prefix { | prefix > | 更直观 |
| 交换面板(上) | prefix } | prefix < | 更直观 |
复制模式
| 功能 | 默认快捷键 | 优化配置 | 说明 |
|---|---|---|---|
| 进入复制模式 | prefix [ | prefix Enter | 更快捷 |
| 开始选择 | Space | v | Vi 模式 |
| 矩形选择 | 无 | Ctrl+v | Vi 模式 |
| 复制选择 | Enter | y | Vi 模式 |
| 取消 | q | Escape | Vi 模式 |
| 行首 | 0 | H | Vi 模式 |
| 行尾 | $ | L | Vi 模式 |
| 粘贴 | prefix ] | prefix p | 更直观 |
缓冲区管理
| 功能 | 默认快捷键 | 优化配置 | 说明 |
|---|---|---|---|
| 列出缓冲区 | prefix # | prefix b | 更直观 |
| 粘贴缓冲区 | prefix ] | prefix p | 更直观 |
| 选择缓冲区 | prefix = | prefix P | 更直观 |
其他操作
| 功能 | 默认快捷键 | 优化配置 | 说明 |
|---|---|---|---|
| 显示快捷键 | prefix ? | prefix ? | 保持默认 |
| 显示时钟 | prefix t | prefix t | 保持默认 |
| 重载配置 | prefix :source-file | prefix r | 快速重载 |
| 编辑配置 | 无 | prefix e | 打开编辑器 |
| 清屏+历史 | Ctrl+l | Ctrl+l | 增强清屏 |
| 鼠标切换 | 无 | prefix m | 切换鼠标模式 |
| URL 查看 | 无 | prefix U | urlview 集成 |
| 文件选择器 | 无 | prefix F | fpp 集成 |
配置说明:优化配置基于 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 断开后可恢复
记住最重要的三个命令:
tmux new -s name- 创建会话Ctrl+b d- 分离会话tmux attach -t name- 重连会话