什么是 Tmux?

Tmux (Terminal Multiplexer) 是一个终端复用器,允许你在一个终端窗口中运行多个终端会话。它的主要优势包括:

  • 会话持久化:即使断开连接,会话仍在后台运行
  • 多窗口管理:在一个终端中管理多个窗口
  • 窗格分割:将窗口分割成多个窗格
  • 远程工作:适合SSH远程工作场景

安装 Tmux

# Ubuntu/Debian
sudo apt install tmux
 
# CentOS/RHEL
sudo yum install tmux
# 或者
sudo dnf install tmux
 
# macOS
brew install tmux
 
# Arch Linux
sudo pacman -S tmux

基本概念

  • 会话 (Session):一个工作环境,包含多个窗口
  • 窗口 (Window):类似于浏览器标签页,包含多个窗格
  • 窗格 (Pane):窗口的分割区域,每个窗格是一个独立的终端

快速开始

启动和退出

# 启动新会话
tmux
 
# 启动并命名会话
tmux new -s mysession
 
# 列出所有会话
tmux list-sessions
# 或简写
tmux ls
 
# 连接到会话
tmux attach -t mysession
# 或简写
tmux a -t mysession
 
# 分离会话(保持后台运行)
# 在tmux内按:Ctrl-b d
 
# 杀死会话
tmux kill-session -t mysession
 
# 退出tmux
exit

快捷键操作

前缀键:所有tmux快捷键都以前缀键开始,默认是 Ctrl-b

会话管理

快捷键功能
Ctrl-b d分离当前会话
Ctrl-b s列出所有会话并选择
Ctrl-b $重命名当前会话

窗口管理

快捷键功能
Ctrl-b c创建新窗口
Ctrl-b n切换到下一个窗口
Ctrl-b p切换到上一个窗口
Ctrl-b 0-9切换到指定编号的窗口
Ctrl-b ,重命名当前窗口
Ctrl-b &关闭当前窗口
Ctrl-b w列出所有窗口并选择

窗格管理

快捷键功能
Ctrl-b %垂直分割窗格
Ctrl-b "水平分割窗格
Ctrl-b 方向键在窗格间移动
Ctrl-b o切换到下一个窗格
Ctrl-b x关闭当前窗格
Ctrl-b z最大化/恢复当前窗格
Ctrl-b {向前移动窗格
Ctrl-b }向后移动窗格

其他常用快捷键

快捷键功能
Ctrl-b ?显示所有快捷键
Ctrl-b :进入命令模式
Ctrl-b [进入复制模式(可滚动查看历史)
Ctrl-b ]粘贴

常用命令行操作

# 创建命名会话
tmux new-session -d -s work
 
# 在会话中创建窗口
tmux new-window -t work -n 'server'
 
# 分割窗格并运行命令
tmux split-window -h -t work:server 'htop'
 
# 发送命令到指定窗格
tmux send-keys -t work:server.0 'vim config.txt' Enter
 
# 重新加载配置
tmux source-file ~/.tmux.conf

基础配置

创建配置文件 ~/.tmux.conf

# 修改前缀键为 Ctrl-a (可选)
# set -g prefix C-a
# unbind C-b
# bind C-a send-prefix
 
# 启用鼠标支持
set -g mouse on
 
# 设置默认终端模式为 256color
set -g default-terminal "screen-256color"
 
# 更直观的分割快捷键
bind | split-window -h
bind - split-window -v
 
# 快速重载配置文件
bind r source-file ~/.tmux.conf \; display "配置已重载!"
 
# 窗格切换更便捷
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
 
# 设置窗格边框样式
set -g pane-border-style fg=colour238
set -g pane-active-border-style fg=colour39
 
# 状态栏配置
set -g status-bg colour235
set -g status-fg colour136
set -g status-left '#[fg=colour166]#S '
set -g status-right '#[fg=colour166]%Y-%m-%d %H:%M '

实用场景示例

场景1:开发环境配置

# 创建开发会话
tmux new-session -d -s dev
 
# 创建不同用途的窗口
tmux new-window -t dev -n 'editor'    # 编辑器窗口
tmux new-window -t dev -n 'server'    # 服务器窗口
tmux new-window -t dev -n 'logs'      # 日志监控窗口
 
# 在编辑器窗口分割窗格
tmux split-window -h -t dev:editor
tmux send-keys -t dev:editor.0 'vim .' Enter
tmux send-keys -t dev:editor.1 'git status' Enter
 
# 连接到会话
tmux attach -t dev

场景2:远程服务器监控

# 创建监控会话
tmux new-session -d -s monitor
 
# 系统监控窗格
tmux split-window -h -t monitor
tmux split-window -v -t monitor:0.1
 
# 运行不同的监控命令
tmux send-keys -t monitor:0.0 'htop' Enter
tmux send-keys -t monitor:0.1 'tail -f /var/log/nginx/access.log' Enter
tmux send-keys -t monitor:0.2 'watch -n 1 "df -h"' Enter
 
tmux attach -t monitor

进阶技巧

复制模式

  1. Ctrl-b [ 进入复制模式
  2. 使用方向键或vim风格按键(h,j,k,l)移动
  3. 按空格键开始选择
  4. 按回车键复制选中内容
  5. Ctrl-b ] 粘贴

会话脚本化

创建启动脚本 start-dev.sh

#!/bin/bash
 
# 检查会话是否已存在
tmux has-session -t dev 2>/dev/null
 
if [ $? != 0 ]; then
    # 创建新会话
    tmux new-session -d -s dev -n editor
    
    # 设置编辑器窗口
    tmux split-window -h -t dev:editor
    tmux send-keys -t dev:editor.0 'cd ~/project && vim' Enter
    tmux send-keys -t dev:editor.1 'cd ~/project' Enter
    
    # 创建服务器窗口
    tmux new-window -t dev -n server
    tmux send-keys -t dev:server 'cd ~/project && npm start' Enter
    
    # 创建git窗口
    tmux new-window -t dev -n git
    tmux send-keys -t dev:git 'cd ~/project && git status' Enter
    
    # 选择第一个窗口
    tmux select-window -t dev:editor
fi
 
# 连接到会话
tmux attach -t dev

常见问题解决

1. 鼠标滚动问题

# 在 ~/.tmux.conf 中添加
set -g mouse on

2. 颜色显示问题

# 在 ~/.tmux.conf 中添加
set -g default-terminal "screen-256color"

3. 会话恢复

如果意外断开连接:

# 查看现有会话
tmux ls
 
# 重新连接
tmux attach -t session_name