随机
Enter 搜索 ↑↓ 切换 Esc 清空

tmux

命令

终端复用器

tmux

终端复用器

补充说明

tmux 是一个终端复用器,允许在一个终端窗口中管理多个终端会话。支持会话持久化、窗口分割、远程会话恢复等功能。

语法

tmux [command] [options]

会话管理

# 创建新会话
tmux
tmux new
tmux new -s session-name          # 指定会话名
tmux new-session -s session-name

# 列出所有会话
tmux ls
tmux list-sessions

# 连接到会话
tmux attach                       # 连接最近会话
tmux attach -t session-name       # 连接指定会话
tmux a                            # 简写
tmux a -t 0                       # 按编号连接

# 分离会话(快捷键)
Ctrl+b d                          # 分离当前会话

# 切换会话
tmux switch -t session-name

# 选择会话(交互式)
Ctrl+b s                          # 列出并选择会话

# 杀死会话
tmux kill-session -t session-name
tmux kill-session -a              # 杀死所有其他会话
tmux kill-session -a -t keep      # 除 keep 外全部杀死

# 重命名会话
tmux rename -t old-name new-name
Ctrl+b $                          # 快捷键重命名当前会话

# 发送命令到会话
tmux send-keys -t session-name "command" Enter

窗口管理

# 创建新窗口
Ctrl+b c                          # 创建新窗口

# 切换窗口
Ctrl+b n                          # 下一个窗口
Ctrl+b p                          # 上一个窗口
Ctrl+b 0-9                        # 切换到窗口 0-9
Ctrl+b w                          # 列出所有窗口并选择
Ctrl+b '                          # 输入窗口编号切换

# 关闭窗口
Ctrl+b &                          # 关闭当前窗口
Ctrl+b x                          # 关闭当前窗格(确认)

# 重命名窗口
Ctrl+b ,                          # 重命名当前窗口
tmux rename-window new-name

# 搜索窗口
Ctrl+b f                          # 搜索窗口名称

窗格管理

# 分割窗格
Ctrl+b "                          # 水平分割
Ctrl+b %                          # 垂直分割
tmux split-window -h              # 水平分割(命令行)
tmux split-window -v              # 垂直分割(命令行)

# 切换窗格
Ctrl+b ↑↓←→                       # 方向键切换
Ctrl+b o                          # 下一个窗格
Ctrl+b q                          # 显示窗格编号(点击切换)

# 调整窗格大小
Ctrl+b Ctrl+↑↓←→                  # 调整大小
Ctrl+b Alt+↑↓←→                   # 大幅度调整
tmux resize-pane -U 10            # 上扩 10 行
tmux resize-pane -D 10            # 下扩 10 行
tmux resize-pane -L 10            # 左扩 10 列
tmux resize-pane -R 10            # 右扩 10 列

# 关闭窗格
Ctrl+b x                          # 关闭当前窗格(确认)
exit                              # 在窗格中执行退出

# 窗格最大化/恢复
Ctrl+b z                          # 最大化当前窗格(再次按恢复)

# 窗格布局
Ctrl+b Space                      # 切换预设布局
tmux select-layout even-horizontal # 水平均匀
tmux select-layout even-vertical   # 垂直均匀

# 交换窗格
Ctrl+b {                          # 与上一个窗格交换
Ctrl+b }                          # 与下一个窗格交换
Ctrl+b Ctrl+o                     # 顺时针旋转所有窗格

# 窗格转换为新窗口
Ctrl+b !                          # 当前窗格转为新窗口

# 同步所有窗格输入
tmux setw synchronize-panes on    # 开启同步输入
tmux setw synchronize-panes off   # 关闭同步输入
Ctrl+b :setw synchronize-panes    # 快捷命令模式

命令模式

# 进入命令模式
Ctrl+b :                          # 进入命令模式

# 常用命令
new -s name                       # 创建新会话
neww -n name                      # 创建新窗口
rename-session new-name           # 重命名会话
rename-window new-name            # 重命名窗口
kill-session                      # 杀死会话
kill-window                       # 杀死窗口
setw synchronize-panes on         # 同步窗格输入
select-layout even-horizontal     # 设置布局
set-option mouse on               # 启用鼠标

配置文件

# ~/.tmux.conf 示例

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

# 设置基础索引为 1(默认 0)
set -g base-index 1
setw -g pane-base-index 1

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

# 调整大小快捷键
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

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

# 改变分隔符
set -g pane-border-style fg=green
set -g pane-active-border-style fg=white,bg=blue

# 设置状态栏
set -g status-bg black
set -g status-fg white
set -g status-left "#S "
set -g status-right "%H:%M %Y-%m-%d"

# 启用 256 色
set -g default-terminal "screen-256color"

# 增加历史记录
set -g history-limit 50000

# Vim 模式窗格选择
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# 复制模式使用 vi 键绑定
setw -g mode-keys vi
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

复制模式

# 进入复制模式
Ctrl+b [                          # 进入复制模式

# 复制模式操作(vi 风格)
q                                 # 退出复制模式
Space                             # 开始选择
Enter                             # 复制选中内容
v                                 # 开始选择(需配置 vi 模式)
y                                 # 复制(需配置)
Ctrl+b ]                          # 粘贴

# 搜索
/                                 # 向下搜索
?                                 # 向上搜索
n                                 # 下一个匹配
N                                 # 上一个匹配

# 粘贴缓冲区
Ctrl+b ]                          # 粘贴
Ctrl+b =                          # 选择粘贴缓冲区列表

实用技巧

# 从脚本创建 tmux 会话
tmux new-session -d -s dev
tmux send-keys -t dev 'vim' Enter
tmux split-window -h -t dev
tmux send-keys -t dev 'npm run dev' Enter
tmux attach -t dev

# 保存会话布局脚本
tmux list-windows -F "#{window_layout}" > layout.txt

# 命令行批量操作
tmux new-session -d -s work
tmux send-keys -t work 'cd ~/project' Enter
tmux send-keys -t work 'vim file.txt' Enter

# 脚本示例:创建开发环境
#!/bin/bash
tmux new-session -d -s dev -x 200 -y 50
tmux split-window -h -t dev
tmux split-window -v -t dev:0.0
tmux send-keys -t dev:0.0 'vim .' Enter
tmux send-keys -t dev:0.1 'npm run dev' Enter
tmux send-keys -t dev:0.2 'git status' Enter
tmux attach -t dev

# 恢复意外断开的会话
tmux attach -d                    # -d 参数分离其他客户端

# 远程会话最佳实践
# SSH 连接后立即创建/连接 tmux 会话
ssh server -t "tmux attach || tmux new"

故障排除

# 强制杀死 tmux 服务器(所有会话将丢失)
tmux kill-server

# 找到并杀死残留进程
ps aux | grep tmux
kill -9 PID

# 修复 UTF-8 显示
tmux -u                          # 启用 UTF-8
tmux set-option -g utf8 on

# 查看版本
tmux -V

# 查看所有配置
tmux show-options -g
tmux show-window-options -g