
关于
tmux 会话、窗口和面板管理专家,用于终端复用、持久远程工作流和 Shell 脚本自动化。
name: tmux description: "专业的 tmux 会话、窗口和窗格管理,用于终端复用、持久化远程工作流和 Shell 脚本自动化。" category: development risk: safe source: community date_added: "2026-03-28" author: kostakost2 tags: [tmux, terminal, multiplexer, sessions, shell, remote, automation] tools: [claude, cursor, gemini]
tmux — 终端复用器
概述
tmux 在 SSH 断开连接时保持终端会话存活,将工作分割到多个窗格中,并支持完全可脚本化的终端自动化。本技能涵盖会话管理、窗口/窗格布局、键绑定模式,以及从 Shell 脚本中非交互式使用 tmux — 这对远程服务器、长时间运行的任务和自动化工作流至关重要。
何时使用本技能
- 在远程服务器上设置或管理持久化终端会话时使用
- 用户需要运行在 SSH 断开后仍能存活的长时间进程时使用
- 编写多窗格终端布局脚本时使用(例如:日志 + Shell + 编辑器)
- 从 bash 脚本中自动化
tmux命令而无需用户交互时使用
工作原理
tmux 有三个层级:会话(顶层,断开连接后仍存活)、窗口(会话内的标签页)和窗格(窗口内的分割区域)。所有操作都可以通过外部的 tmux <command> 或内部的前缀键(默认为 Ctrl-b)来控制。
会话管理
# 创建新的命名会话
tmux new-session -s work
# 创建分离(后台)会话
tmux new-session -d -s work
# 创建分离会话并启动命令
tmux new-session -d -s build -x 220 -y 50 "make all"
# 附加到会话
tmux attach -t work
tmux attach # 附加到最近的会话
# 列出所有会话
tmux list-sessions
tmux ls
# 从 tmux 内部分离
# Prefix + d (Ctrl-b d)
# 终止会话
tmux kill-session -t work
# 终止除当前会话外的所有会话
tmux kill-session -a
# 从外部重命名会话
tmux rename-session -t old-name new-name
# 从外部切换到另一个会话
tmux switch-client -t other-session
# 检查会话是否存在(在脚本中有用)
tmux has-session -t work 2>/dev/null && echo "exists"
窗口管理
# 在当前会话中创建新窗口
tmux new-window -t work -n "logs"
# 创建运行特定命令的窗口
tmux new-window -t work:3 -n "server" "python -m http.server 8080"
# 列出窗口
tmux list-windows -t work
# 选择(切换到)窗口
tmux select-window -t work:logs
tmux select-window -t work:2 # 按索引
# 重命名窗口
tmux rename-window -t work:2 "editor"
# 终止窗口
tmux kill-window -t work:logs
# 移动窗口到新索引
tmux move-window -s work:3 -t work:1
# 从 tmux 内部:
# Prefix + c — 新窗口
# Prefix + , — 重命名窗口
# Prefix + & — 终止窗口
# Prefix + n/p — 下一个/上一个窗口
# Prefix + 0-9 — 按编号切换窗口
窗格管理
# 垂直分割窗格(左/右)
tmux split-window -h -t work:1
# 水平分割窗格(上/下)
tmux split-window -v -t work:1
# 分割并运行命令
tmux split-window -h -t work:1 "tail -f /var/log/syslog"
# 按索引选择窗格
tmux select-pane -t work:1.0
# 调整窗格大小
tmux resize-pane -t work:1.0 -R 20 # 向右扩展 20 列
tmux resize-pane -t work:1.0 -D 10 # 向下缩小 10 行
tmux resize-pane -Z # 切换缩放(全屏)
# 交换窗格
tmux swap-pane -s work:1.0 -t work:1.1
# 终止窗格
tmux kill-pane -t work:1.1
# 从 tmux 内部:
# Prefix + % — 垂直分割
# Prefix + " — 水平分割
# Prefix + arrow — 导航窗格
# Prefix + z — 缩放/取消缩放当前窗格
# Prefix + x — 终止窗格
# Prefix + {/} — 与上一个/下一个窗格交换
向窗格发送命令而无需附加
# 向特定窗格发送命令并按回车
tmux send-keys -t work:1.0 "ls -la" Enter
# 在后台窗格中运行命令而无需附加
tmux send-keys -t work:editor "vim src/main.py" Enter
# 发送 Ctrl+C 停止正在运行的进程
tmux send-keys -t work:1.0 C-c
# 发送文本而不按回车(用于预填充提示)
tmux send-keys -t work:1.0 "git commit -m '"
# 清除窗格
tmux send-keys -t work:1.0 "clear" Enter
# 检查窗格中的内容(捕获其输出)
tmux capture-pane -t work:1.0 -p
tmux capture-pane -t work:1.0 -p | grep "ERROR"
编写完整工作区布局脚本
这是最强大的模式:通过单个脚本创建完全配置的多窗格工作区。
#!/usr/bin/env bash
set -euo pipefail
SESSION="dev"
# 如果会话已存在则退出
tmux has-session -t "$SESSION" 2>/dev/null && {
echo "Session $SESSION already exists. Attaching..."
tmux attach -t "$SESSION"
exit 0
}
# 创建会话及第一个窗口
tmux new-session -d -s "$SESSION" -n "editor" -x 220 -y 50
# 窗口 1:编辑器 + 测试运行器
兼容工具
Claude CodeCursor
标签
前端开发