tmux new -A -s workset -g mouse on:开了 之后,终端原本的系统级鼠标选中会被 tmux 接管C-b zset -g mouse on:如果配置里有 ,鼠标拖动通常不再是“系统级选中”,而会变成 tmux 内部的选择或复制动作# 看当前是否开启鼠标模式
tmux show -g mouse
# 看当前是否尝试写系统剪贴板
tmux show -s set-clipboardmacOS/iTerm2/Terminal:按住 Option 再拖拽Windows/PowerShell/CMD/MobaXterm:按住 Shift 再拖拽Linux/GNOME Terminal/xterm:按住 Shift 再拖拽# 当前会话里临时关闭
tmux set -g mouse off
# 改完配置后重载
tmux source-file ~/.tmux.conf# ~/.tmux.conf
set -g mouse offC-b [:进入复制模式方向键 / PgUp / PgDn / 鼠标滚轮SpaceEnterset -s set-clipboard onOSC52xclip xseltmux-yankC-b z:最大化当前 paneC-b z:恢复原布局Server:后台主进程,管理所有会话,断开终端后仍运行Session:会话,对应一个"项目/工作流",包含多个窗口Window:窗口,类似浏览器 Tab,包含多个面板Pane:面板,最小操作单元,运行终端程序Client:客户端,连接到 Server 的终端窗口# 层级关系图示
Server (后台进程)
└── Session (工作区)
└── Window (页面)
└── Pane (终端)tmux new:创建并进入新会话tmux new -s <name>:创建命名会话tmux new -A -s <name>:会话存在则附加,不存在则创建tmux new -s <ses> -n <win>:创建会话并指定首个窗口名称tmux new -s work -n monitor top:创建会话并运行 toptmux attach:连接到最近会话tmux attach -t <name>:连接到指定会话tmux attach -d -t <name>:连接并分离其他客户端C-b d:分离当前会话tmux ls:列出所有会话C-b s:交互式会话列表C-b $:重命名当前会话C-b (:切换到上一个会话C-b ):切换到下一个会话C-b s:进入交互列表状态x [y]:关闭t [y]:选择关闭:new -s <name>:新建会话(交互模式)C-b :new [Enter]:新建会话(交互模式)C-b :new -s foo [Enter]:新建会话(交互模式)C-b $:重命名会话tmux rename-session -t <old> <new>:重命名会话tmux kill-session -t <name>:关闭指定会话tmux kill-session -a:关闭除当前外的所有会话tmux kill-server:停止整个 tmux 服务器C-b c:新建窗口C-b &:关闭当前窗口(需确认)tmux new-window -n <name>:创建并命名窗口C-b n:下一个窗口C-b p:上一个窗口C-b l:最后活跃的窗口C-b <number>:切换到编号窗口(0-9)C-b ':输入窗口编号切换C-b f:查找窗口(按名称)C-b w:列举所有会话和windowC-b ,:重命名当前窗口tmux swap-window -s <src> -t <dst>:交换窗口位置tmux move-window -s <src> -t <dst>:移动窗口tmux move-window -r:重新编号窗口(移除空隙)C-b .:修改窗口索引号C-b %:左右分割(水平分割)C-b ":上下分割(垂直分割)tmux split-window -h:水平分割(左右)tmux split-window -v:垂直分割(上下)tmux split-window -h top:分割并运行命令C-b ←/→/↑/↓:方向键切换面板C-b o:切换到下一个面板C-b ;:切换到上一个面板C-b q:显示面板编号,输入数字快速切换C-b {:与上一个面板交换位置C-b }:与下一个面板交换位置C-b C-←/→/↑/↓:微调面板大小(每次 1 单元格)C-b M-←/→/↑/↓:粗调面板大小(每次 5 单元格)tmux resize-pane -D 20:向下调整 20 单元格tmux resize-pane -U 10:向上调整 10 单元格tmux resize-pane -L 5:向左调整 5 单元格tmux resize-pane -R 5:向右调整 5 单元格C-b x:关闭当前面板(需确认)C-b !:将面板拆分为新窗口C-b z:放大/还原面板(zoom)tmux join-pane -s <src> -t <dst>:合并面板tmux break-pane:将面板拆分为独立窗口C-b Space:循环切换预设布局C-b M-1:even-horizontal(水平均分)C-b M-2:even-vertical(垂直均分)C-b M-3:main-horizontal(主面板在上)C-b M-4:main-vertical(主面板在左)C-b M-5:tiled(网格平铺)tmux select-layout even-horizontal:选择水平均分布局tmux select-layout even-vertical:选择垂直均分布局tmux select-layout tiled:选择网格布局C-b t:显示时钟C-b [:进入复制模式(可滚动查看历史)q:退出复制模式C-b ]:粘贴最近缓冲区内容h j k l:左 / 下 / 上 / 右w b:下一个 / 上一个 单词0 $:行首 / 行尾H M L:屏幕顶部 / 中间 / 底部g G:缓冲区顶部 / 底部C-u C-d:向上 / 向下 翻半页C-b C-f:向上 / 向下 翻全页/:向下搜索?:向上搜索n N:下一个 / 上一个 匹配项Space:开始选择文本Enter:复制选中内容并退出Esc:清除选择tmux buffer:tmux 自己的复制缓冲区system clipboard:操作系统级剪贴板set-clipboard xclip/xsel/pbcopyC-b =:打开缓冲区列表(可视化选择)tmux list-buffers:列出所有缓冲区tmux choose-buffer:选择并粘贴缓冲区tmux save-buffer <file>:保存缓冲区到文件tmux load-buffer <file>:从文件加载缓冲区tmux delete-buffer -b <id>:删除指定缓冲区tmux capture-pane -p:抓取当前面板内容C-b ::打开命令提示符(输入 tmux 命令);:用 分隔多个命令# 示例:在命令提示符中
:split-window -h top
:neww -n mywindow
:swap-pane -s 0 -t 1tmux list-keys -N:列出所有键绑定(带描述)tmux info:显示服务器详细信息tmux show-options -g:查看全局选项tmux set-option -g <opt> <val>:设置全局选项tmux run-shell '<cmd>':运行外部命令C-b m:标记/取消标记当前面板(绿色边框)C-b M:清除所有标记:swap-pane:交换活动面板与标记面板:swap-window:交换当前窗口与标记面板所在窗口# 在 ~/.tmux.conf 中添加
set -g mouse on
# 或通过命令提示符临时启用
:set -g mouse on# 修改前缀键为 C-a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# 启用鼠标支持
set -g mouse on
# 使用 vi 风格按键
set -g mode-keys vi
set -g status-keys vi
# 状态栏位置
set -g status-position top
# 减少延迟
set -sg escape-time 0
# 历史记录行数
set -g history-limit 50000# 从 1 开始编号(而非 0)
set -g base-index 1
setw -g pane-base-index 1
# 关闭窗口时自动重新编号
set -g renumber-windows on# 使用 | 和 - 分屏
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# 新窗口保持当前路径
bind c new-window -c "#{pane_current_path}"# 按 C-b r 重载配置
bind r source-file ~/.tmux.conf \; display-message "配置已重载"session work:会话名,例如session:window work:2 work:editor:窗口目标,例如 、session:window.pane work:2.1:面板目标,例如:window :1:当前会话中的窗口,例如%pane_id %3:面板唯一 ID,例如# 向指定面板发送命令
tmux send-keys -t work:editor.1 'npm run dev' C-m
# 在指定窗口创建面板并运行命令
tmux split-window -t work:server -v 'htop'
# 关闭指定窗口
tmux kill-window -t work:logs
# 切换客户端到指定会话
tmux switch-client -t worktmux list-sessions:列出会话tmux list-windows -t <session>:列出会话内窗口tmux list-panes -a:列出所有面板tmux display-message -p '#S:#I.#P':打印当前定位信息#{session_name}:会话名#{window_index} #{window_name}:窗口编号 / 名称#{pane_index} #{pane_id}:面板编号 / 唯一 ID#{pane_current_path}:当前面板路径#{pane_current_command}:当前前台命令# 左侧显示: 会话名 + 窗口 + 面板
set -g status-left '#[fg=green]#S #[fg=yellow]#I.#P'
# 右侧显示: 命令 + 路径
set -g status-right '#[fg=cyan]#{pane_current_command} #[fg=white]#{pane_current_path}'# 直接在终端打印 format 结果
tmux display-message -p 'session=#{session_name} window=#{window_name} pane=#{pane_id}'# 无界面启动一个完整开发会话
tmux new-session -d -s app -n editor
tmux send-keys -t app:editor 'nvim' C-m
tmux new-window -t app -n api
tmux send-keys -t app:api 'pnpm dev' C-m
tmux new-window -t app -n logs
tmux send-keys -t app:logs 'tail -f /var/log/app.log' C-m
tmux attach -t app# 条件判断(在 tmux 命令行中执行)
if-shell '[ -f ~/.tmux.conf ]' 'display-message "配置存在"' 'display-message "配置缺失"'
# 执行外部 shell 命令并提示
run-shell 'date > /tmp/tmux-last-run.txt'
display-message "外部命令已执行"tmux -C attach -t <session>:以控制模式连接tmux -C new -s <name>:以控制模式创建会话C-b :display-popup:打开空弹窗C-b :display-popup -E htop:弹窗执行命令并自动退出C-b :display-popup -w 80% -h 70% -E btop:指定弹窗尺寸# 临时看 git 历史,不打乱当前 pane 布局
tmux display-popup -E 'git log --oneline --graph --decorate -n 30'
# 临时执行交互式命令
tmux display-popup -E 'lazygit'client-attached:客户端连接后触发session-created:会话创建后触发window-linked:窗口链接后触发pane-died:面板进程退出后触发# 客户端连接时给出提示
set-hook -g client-attached 'display-message "客户端已连接: #S"'
# 会话创建时自动提示
set-hook -g session-created 'display-message "新会话: #S"'
# 取消某个 hook
set-hook -gu client-attached# 允许 tmux 通过终端能力写入系统剪贴板
set -s set-clipboard on
# 复制模式下进入 Vi 键位
set -g mode-keys vi# Linux 下也可显式接外部剪贴板工具
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -in"xcliptmux show -s set-clipboard# 开启所有面板同步输入(批量执行命令)
:setw synchronize-panes on
# 关闭同步
:setw synchronize-panes off# 创建开发环境的会话脚本
tmux new-session -s dev -n editor -d
tmux send-keys -t dev:editor 'vim' C-m
tmux new-window -t dev -n server
tmux send-keys -t dev:server 'npm run dev' C-m
tmux split-window -v -t dev:server
tmux send-keys -t dev:server.1 'npm test' C-m
tmux attach -t devC-b f:查找窗口(按名称或内容)C-b w:树形选择窗口和面板C-b D:选择并分离其他客户端# 状态栏样式
set -g status-style bg=black,fg=green
# 左侧状态栏
set -g status-left "#[fg=green]#S #[fg=yellow]#I:#P"
# 右侧状态栏
set -g status-right "#[fg=cyan]%H:%M #[fg=white]%d-%b-%y"
# 窗口列表样式
set -g window-status-current-style fg=black,bg=green# 在远程 tmux 中发送本地 tmux 前缀键
# 连续按两次前缀键
C-b C-b # 发送 C-b 到内层 tmux
# 或配置不同前缀键
# 本地: C-a,远程: C-btmux info:查看服务器详细信息tmux list-sessions:列出所有会话tmux list-clients:列出所有客户端C-b ?:查看所有键绑定# 分离所有其他客户端
tmux attach -d -t <session>
# 强制杀死 tmux 服务器
tmux kill-server
# 修复颜色显示
set -g default-terminal "tmux-256color"
# 解决剪贴板问题(需要 xclip)
bind C-c run-shell "tmux save-buffer - | xclip -i -sel clipboard"
bind C-v run-shell "xclip -o -sel clipboard | tmux load-buffer -"# 减少状态栏刷新频率(默认 15 秒)
set -g status-interval 5
# 禁用活动监控
set -g monitor-activity off
# 禁用可视通知
set -g visual-activity offC-b d:分离会话C-b s:会话列表C-b $:重命名会话C-b c:新建窗口C-b n:下一个窗口C-b p:上一个窗口C-b &:关闭窗口C-b ,:重命名窗口C-b %:左右分屏C-b ":上下分屏C-b x:关闭面板C-b z:放大/还原面板C-b ←/→/↑/↓:切换面板C-b [:进入复制模式C-b ]:粘贴C-b =:缓冲区列表C-b ?:键绑定帮助C-b ::命令提示符C-b t:显示时钟# 安装 TPM
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpmset -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
run '~/.tmux/plugins/tpm/tpm'tmux source-file ~/.tmux.confPrefix + I:安装新列出的插件并刷新环境Prefix + U:更新所有插件Prefix + Alt + u:卸载不在列表中的插件TMUX environment reloaded:通常表示 TPM 安装流程已完成tmux-resurrect:负责保存和恢复 tmux 会话、窗口与布局tmux-continuum:负责自动保存,并在 tmux 启动时自动恢复