瘦了就帅了 / Tmux 命令

Created Wed, 21 Feb 2024 16:08:32 +0800 Modified Tue, 02 Sep 2025 10:52:19 +0000

配置文件

; ~/.tmux.conf
# 启动鼠标支持
set -g mouse on
set -g mode-keys vi

# WindTerm需在 会话 --> 首选项 --> 设置 --> 终端 --> 鼠标追踪 --> 追踪事件
# 取消勾选:
# - 移动事件
# - 点击事件
# - 右键单击事件
# WindTerm使用鼠标修改面板大小,受WindTerm限制无法实现

# 禁用 WindTerm 的默认鼠标行为(防止冲突)
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
# 1. 禁用左键释放自动复制(改为仅选择)
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-selection-and-cancel
# 2. 右键复制已选文本(需先左键选择)
bind -T copy-mode-vi MouseDown3Pane send-keys -X copy-pipe-and-cancel \
  "xclip -i -selection clipboard 2>/dev/null || \
   pbpaste 2>/dev/null || \
   win32yank.exe -i 2>/dev/null"
# 3. 右键直接粘贴系统剪贴板内容(跨系统支持)
bind -n MouseDown3Pane run-shell \
  "tmux set-buffer -- \"$(xclip -o -selection clipboard 2>/dev/null || \
                          pbpaste 2>/dev/null || \
                          win32yank.exe -o 2>/dev/null)\"; \
   tmux paste-buffer"

# 解除默认的鼠标调整绑定(可选)
unbind-key -T root MouseDrag1Border
# 重新绑定鼠标拖动调整大小
bind -n MouseDrag1Border resize-pane -M

# status line
set -g status-justify centre
set -g status-left "#{session_name}"
set -g status-right "%F %R"
# 窗口编号自动重新排序
set -g renumber-windows on

# status line > window list
set -g window-status-format "#{window_index}:#{window_name}"
set -g window-status-separator " | "
set -g window-status-current-format "#{window_index}:#{window_name}"
set -g window-status-current-style bold,italics

# pane
set -g pane-border-format " #{pane_index}:#{pane_title} $ #{pane_current_command} "
set -g pane-border-status top
set -g history-limit 10000
# 更新配置,不需要关闭tmux,直接运行马上生效
tmux source-file ~/.tmux.conf

快捷键操作

Prefix = Ctrl + b

所有的快捷键都是ctrl + b按完松开,再去按下一个功能键!,不是一下子全按上。

所有的快捷键都是ctrl + b按完松开,再去按下一个功能键!,不是一下子全按上。

所有的快捷键都是ctrl + b按完松开,再去按下一个功能键!,不是一下子全按上。

会话操作

操作快捷键命令
启动,会话tmux new -s <session_name>
进入,会话tmux <attach | a> -t <session_name | session_index>
展示,会话列表list-session
跳转,会话Prefix + sswitch -t <session_name | session_index>
修改,会话标题Prefix + $rename-session -t <old_name | session_index> <new_name>
翻屏模式1Prefix + [
命令模式Prefix + :
退出,会话Prefix + ddetach
关闭,会话tmux kill-session -t <session_name | session_index>

窗口操作

操作快捷键命令
展示,窗口列表list-window [-t <session_name>]
修改,窗口标题Prefix + ,rename-window <newp_name>
添加,当前会话Prefix + c
跳转,使用列表Prefix + w
跳转,快速Prefix + 数字键
跳转,顺序Prefix + < n | p >
交换,窗口位置swap-window -s <source-window-index> -t <target-window-index>
移动,窗口位置move-window -t <new-window-index>
关闭,当前窗口Ctrl + dkill-window -t <session_name | session_index>:<window-index>
关闭,当前会话所有窗口Prefix + !

面板操作

操作快捷键命令
展示,面板列表list-panes -t <session_name | session_index>:<window-index>
展示,面板编号Prefix + q
修改,面板标题select-pane -T "new-title" -t <session-name>:<window-index>.<pane-index>
拆分,将当前面板分成左右两份Prefix + %
拆分,将当前面板分成上下两份Prefix + "
排列,水平改为垂直按住 Prefix + -
排列,垂直改为水平按住 Prefix + \
排列,所有面板水平select-layout even-horizontal
排列,所有面板垂直select-layout even-verticalc
移动,面板到窗口move-pane -t <session-name>:<window-index>
移动,所有面板位置顺时针移动Prefix + Ctrl + o
移动,所有面板位置逆时针移动Prefix + Alt + o
交换,当前面板与左侧/上方面板Prefix + {
交换,当前面板与右侧/下方面板Prefix + }
交换,指定面板swap-pane -s <source-pane-index> -t <target-pane-index>
布局,切换当前面板的布局方向Prefix + Space
布局,循环切换5种预设布局Prefix + Alt + [1~5]
选中,当前窗口中的不同面板Prefix + < ↑ | ↓ | ← | → >
调节,光标所在面板的大小按住 Prefix + < ↑ | ↓ | ← | → >
关闭,当前面板Prefix + x

脚本操作

Tmux格式

tmux new-session -s "${MY_SESSION}" -d \; \
    split-window -v \; \
    split-window -v -t 0 \; \
    split-window -v -t 2 \; \
    split-window -h -t 3 \; \
    select-layout 'e1ef,267x50,0,0[267x9,0,0,0,267x9,0,10,2,267x9,0,20,1,267x20,0,30{153x20,0,30,3,113x20,154,30,4}]' \; \
    select-pane -T "1step" -t 0 \; \
    select-pane -T "2step" -t 1 \; \
    select-pane -T "check" -t 2 \; \
    select-pane -T "submit" -t 3 \; \
    select-pane -T "check submitable" -t 4 \; \
    send-keys -t 0 "${ACTIVATE}${COMMAND_1STEP}" Enter \; \
    send-keys -t 1 "${ACTIVATE}${COMMAND_2STEP}" Enter \; \
    send-keys -t 2 "${ACTIVATE}${COMMAND_CHECK}" Enter \; \
    send-keys -t 3 "${ACTIVATE}${COMMAND_SUBMIT}" Enter \; \
    send-keys -t 4 "${ACTIVATE}${COMMAND_OTHER}" Enter \; \
    attach-session -t "${MY_SESSION}"

Shell格式

# 在后台创建新的会话
tmux new-session -s "${MY_SESSION}" -d
# 在会话中创建窗口
# tmux new-window -t "${MY_SESSION}" -n "main"
# 在窗口中创建面板
tmux split-window -v -t "${MY_SESSION}"
tmux split-window -v -t "${MY_SESSION}":0.0
tmux split-window -v -t "${MY_SESSION}":0.2
tmux split-window -h -t "${MY_SESSION}":0.3
# 调整面板大小
# tmux resize-pane -t "${MY_SESSION}":0.0 -y 9
# tmux resize-pane -t "${MY_SESSION}":0.1 -y 9
# tmux resize-pane -t "${MY_SESSION}":0.2 -y 9
# 使用select-layout更方便
tmux select-layout -t "${MY_SESSION}" '9a1d,267x50,0,0[267x9,0,0,17,267x9,0,10,19,267x9,0,20,18,267x20,0,30{134x20,0,30,20,132x20,135,30,21}]'
# 给面板命名
tmux select-pane -T "1step" -t "${MY_SESSION}":0.0
tmux select-pane -T "2step" -t "${MY_SESSION}":0.1
tmux select-pane -T "check" -t "${MY_SESSION}":0.2
tmux select-pane -T "submit" -t "${MY_SESSION}":0.3
# 面板执行命令
tmux send-keys -t "${MY_SESSION}":0.0 "${ACTIVATE}${COMMAND_1STEP}" Enter
tmux send-keys -t "${MY_SESSION}":0.1 "${ACTIVATE}${COMMAND_2STEP}" Enter
tmux send-keys -t "${MY_SESSION}":0.2 "${ACTIVATE}${COMMAND_CHECK}" Enter
tmux send-keys -t "${MY_SESSION}":0.3 "${ACTIVATE}${COMMAND_SUBMIT}" Enter
tmux send-keys -t "${MY_SESSION}":0.4 "${ACTIVATE}${COMMAND_OTHER}" Enter
# 连接会话
tmux attach-session -t "${MY_SESSION}"

参考文档

备份与恢复

apt install tmuxp
# 备份
tmuxp freeze -f yaml -o <backup_name>.yaml <session_name>
# 恢复
tmuxp load -s <new_session_name> <backup_name>.yaml 

  1. PgUp, PgDn 实现上下翻页(mac可以用 fn + ↑ ↓实现上下翻页),q 退出翻屏模式。 ↩︎