当前项目设置 Prefix = C-Space(即 Ctrl + Space)
# macOS
brew install tmux
# Arch / Manjaro
sudo pacman -S --needed tmux
# Ubuntu / Debian
sudo apt install -y tmux
# Fedora
sudo dnf install -y tmux
# Alpine
sudo apk add tmux克隆 tpm 及安装插件:
dotfiles 已部署时,优先在仓库的 one-click-config/ 目录执行:
./setup-tmux.sh脚本会在独立 tmux socket 中克隆 TPM 并安装全部已声明插件,不会影响当前 tmux server。下面是用于排障的手动安装方式:
# 1. 克隆 tpm
git clone --depth=1 --single-branch https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm
# 2. 启动一次 tmux(让 tmux 读取配置,识别插件列表)
tmux
# 3. 退出 tmux 后安装插件(或在 tmux 内按 prefix+I)
~/.config/tmux/plugins/tpm/bin/install_pluginstmux server(后台守护进程)
└── session(会话,关闭终端不丢失)
└── window(窗口,类似浏览器 tab)
└── pane(面板,窗口内的分割)
- 终端窗口只是 client,关掉终端 ≠ 关掉 session
- 多个终端可以同时 attach 到同一个 session(镜像同步)
- 启动交互式 Zsh 且当前不在 tmux 或 IDE 内嵌终端时,会显示 tmux 入口:
aattach 已有 session,n新建 session,Enter 或其他键跳过
| 操作 | 命令 / 快捷键 |
|---|---|
| 列出所有 session | tmux ls |
| 新建 session | tmux new-session -s <name> |
| Attach 到 session | tmux attach -t <name> |
| Detach(保留 session) | Prefix d |
| 交互式切换 session | Prefix s |
| 重命名当前 session | Prefix $ |
| 销毁指定 session | tmux kill-session -t <name> |
| 销毁除当前外所有 session | tmux kill-session -a |
| 销毁所有 session(含 server) | tmux kill-server |
Zsh 入口不会固定创建
mainsession。存在一个 session 时按a直接 attach;存在多个 session 时按a后选择编号;按n可输入名称,留空则由 tmux 自动编号
当前配置使用 tmux-resurrect 和 tmux-continuum:
Prefix Ctrl+S:手动保存 session、window、pane、布局、目录和 pane 输出Prefix Ctrl+R:手动恢复最近一次保存- 每 15 分钟自动保存
- tmux server 启动时自动恢复最近一次环境
- Neovim 使用 session 策略恢复
- Claude、Codex 和 OpenCode 会改写为各自的继续会话命令
关闭终端但 tmux server 仍运行时,只需重新 attach;tmux server 或机器重启后的恢复才由 resurrect / continuum 负责。恢复会重建布局并重新运行配置过的命令,不会让关机前的原进程跨重启继续存活
| 操作 | 快捷键 |
|---|---|
| 新建 window | Ctrl+Shift+T |
| 关闭 window | Ctrl+Shift+W |
| 切换到第 N 个 window | Ctrl+1 … Ctrl+8 |
| 重命名 window | Prefix , |
| 下一个 window | Prefix n |
| 上一个 window | Prefix p |
| 操作 | 快捷键 |
|---|---|
| 垂直分割(左右) | Ctrl+Alt+\ |
| 水平分割(上下) | Ctrl+Alt+- |
| 关闭 pane | Ctrl+Alt+W |
| 全屏或恢复当前 pane | Ctrl+Alt+B |
| 焦点左/下/上/右 | Ctrl+Alt+H/J/K/L |
| 调整 pane 大小 | Ctrl+Alt+←↓↑→ |
| 右键 | 直接粘贴剪贴板 |
Neovim 透传:pane 内运行 nvim 时,
Ctrl+Alt+H/J/K/L会透传给 nvim(smart-splits),实现 nvim split 和 tmux pane 无缝导航
| 操作 | 快捷键 |
|---|---|
| 进入 copy mode | Prefix v |
| 开始选择 | v |
| 矩形选择 | Ctrl+V |
| 复制选中 | y |
| 复制到行尾 | Y |
| 退出 | q(vi 模式下 Esc 是清除选区,不退出) |
copy mode 内同样可用 Ctrl+Alt+H/J/K/L 切换 pane,不会卡死
| 操作 | 命令 / 快捷键 |
|---|---|
| 重载配置 | Prefix r |
| 安装插件 | Prefix I(大写) |
| 更新插件 | Prefix U |
| 卸载多余插件 | Prefix Alt+U |
配置入口:~/.config/tmux/tmux.conf,模块放在 conf/
右侧显示:session 名 · CPU · RAM · 网速
网速仅在上行或下行超过 30 KB/s 时才出现,平时静默
tmux.conf 入口,source 所有模块
conf/
options.conf 基础选项(prefix、颜色、鼠标、编号、剪贴板)
window.conf window 快捷键
pane.conf pane 分割、导航、调整大小
copy-mode.conf vi copy mode
plugins.conf tpm 插件列表及安装说明
status.conf status bar 布局与采集器配色
hide-bar.conf 运行 nvim 时自动隐藏状态栏(当前停用,见 tmux.conf)
scripts/
status-feed.sh 常驻采集器:CPU / 内存 / 网速 → tmux 用户选项
pane-nav.sh 判定方向键该给 nvim 还是 tmux
clipboard_paste.sh 右键粘贴取系统剪贴板
open-url.sh Ctrl+Click 打开 URL
send-to-pane.sh 从 nvim 发送内容到指定 pane
CPU / 内存 / 网速由 scripts/status-feed.sh 常驻采集,写入 @status_*
用户选项,status-right 只读变量
这样做是因为 status-right 里每写一个 #(command),tmux 每次刷新
(status-interval,本配置为 5 秒)都会 fork 一轮子进程。改为读变量后
渲染状态栏不再启动任何子进程
配色与阈值全部在 conf/status.conf 顶部声明,采集器只读不写