配置使用 Tmux
分类: 工具使用 2369 0
安装
brew install tmux
# 查看版本
tmux -V
基础配置
部分参数
set -g:全局设置,适用于所有窗口。
bind 命令用于绑定键盘快捷键以执行特定命令,后面可以跟一些参数,
bind -n :不使用前缀键。
bind -r :允许重复按键。(即,长按快捷键可以连续执行命令)
unbind :解除已绑定的键盘快捷键
unbind -n :解除不带前缀键的绑定
unbind -a :移除所有通过 bind 命令设置的键绑定
prefix前缀键设置
set -g prefix2 C-s
bind C-s send-prefix -2
set -g prefix2 C-s: 这行配置将 tmux 的第二个前缀键设置为 C-s(即 Ctrl-s)。
在这里,prefix2 表示第二个前缀键,意味着可以使用 C-b 或 C-s 作为前缀键来执行 tmux 的命令。
按键延迟
# prefix 延迟时间,按下 Ctrl-b 之后立即响应
set -s escape-time 10
# 组合按键时间间隔
set -sg repeat-time 600
默认情况下,tmux 等待 Escape 键的时间为 500 毫秒。在一些情况下,将此时间设置为 10 毫秒可以加快命令序列的处理速度,使 tmux 更加响应迅速。
按键时间间隔,默认时间也是 500 毫秒。将其增加到 600 毫秒可以让用户在快速按两次前缀键时有更多的时间间隔。
历史记录限制
将历史记录限制增加到 5000 行,以便在 tmux 中保存更多的命令行输出历史。
set -g history-limit 5000
tmux 的显示设置
# 将窗口编号从 1 开始(默认是从 0 开始)
set -g base-index 1
# 将面板编号与窗口编号一致,也从 1 开始(默认是从 0 开始)
setw -g pane-base-index 1
# 自动重命名窗口
setw -g automatic-rename on
# 关闭窗口时重新编号剩余的窗口
set -g renumber-windows on
# 关闭最后一个窗口,tmux 会话自动退出
set -sg exit-empty on
# 设置终端标题为当前窗口名称
set -g set-titles on
# 设置 pane 显示时间
set -g display-panes-time 2000
# 设置消息显示时间
set -g display-time 2000
# 状态栏刷新间隔
set -g status-interval 10
# 清屏和历史记录
bind -n C-l send-keys C-l \; run 'sleep 0.2' \; clear-history
# 禁用活动监控
set -g monitor-activity off
# 禁用视觉提示
set -g visual-activity off
# 禁用铃声提示
setw -g monitor-bell off
# 允许鼠标控制
set -g mouse on
会话相关
unbind [
unbind ]
# 创建会话
bind C-c new-session
# 查看会话
bind ] choose-session
# 打开会话和窗口树选择菜单并启用缩放
bind W choose-tree -Z
# 快速关闭会话
unbind C-x
bind-key -n C-x switch-client -T kill-session-mode
bind-key -T kill-session-mode 1 kill-session -t 1
bind-key -T kill-session-mode 2 kill-session -t 2
bind-key -T kill-session-mode 3 kill-session -t 3
bind-key -T kill-session-mode 4 kill-session -t 4
bind-key -T kill-session-mode 5 kill-session -t 5
bind-key -T kill-session-mode 6 kill-session -t 6
bind-key -T kill-session-mode 7 kill-session -t 7
bind-key -T kill-session-mode 8 kill-session -t 8
bind-key -T kill-session-mode 9 kill-session -t 9
bind BTab:绑定 Shift-Tab 键(在 tmux 中,B 表示 Shift 键)。switch-client -l:切换到上一个会话。
通过按 Shift-Tab 键,用户可以快速切换到上一个使用的 tmux 会话。
窗口导航
# 切换到上一个窗口
bind -r C-h previous-window
# 切换到下一个窗口
bind -r C-l next-window
然后定义了一组用于快速选择窗口的按键,由于想简化下按键次数,把数字1~9设置在多组命令上执行,这里设置一组专用于 select-window 的前缀键
unbind C-g
bind-key -n C-g switch-client -T select-window-mode
解绑 C-g,然后绑定 C-g 来激活 select-window-mode 键表
创建并绑定 select-window-mode 键表并绑定相应的按键命令
select-window 默认设置方法
# 快速选择窗口
bind 1 select-window -t 1
bind 2 select-window -t 2
bind 3 select-window -t 3
bind 4 select-window -t 4
bind 5 select-window -t 5
bind 6 select-window -t 6
bind 7 select-window -t 7
bind 8 select-window -t 8
bind 9 select-window -t 9
# 快速选择窗口
bind-key -T select-window-mode 1 select-window -t 1
bind-key -T select-window-mode 2 select-window -t 2
bind-key -T select-window-mode 3 select-window -t 3
bind-key -T select-window-mode 4 select-window -t 4
bind-key -T select-window-mode 5 select-window -t 5
bind-key -T select-window-mode 6 select-window -t 6
bind-key -T select-window-mode 7 select-window -t 7
bind-key -T select-window-mode 8 select-window -t 8
bind-key -T select-window-mode 9 select-window -t 9
同上,这里设置一组专属于 join-pane 的前缀键,用于快速将单前窗格加入窗口的按键
# 将当前窗格加入指定窗口
unbind C-a
bind-key -n C-a switch-client -T join-pane-mode
join-pane 默认设置方法
# 将当前窗格加入指定窗口
bind '!' join-pane -t :1
bind '@' join-pane -t :2
bind '#' join-pane -t :3
bind '$' join-pane -t :4
bind '%' join-pane -t :5
bind '^' join-pane -t :6
bind '&' join-pane -t :7
bind '*' join-pane -t :8
bind '(' join-pane -t :9
bind-key -T join-pane-mode 1 join-pane -t :1
bind-key -T join-pane-mode 2 join-pane -t :2
bind-key -T join-pane-mode 3 join-pane -t :3
bind-key -T join-pane-mode 4 join-pane -t :4
bind-key -T join-pane-mode 5 join-pane -t :5
bind-key -T join-pane-mode 6 join-pane -t :6
bind-key -T join-pane-mode 7 join-pane -t :7
bind-key -T join-pane-mode 8 join-pane -t :8
bind-key -T join-pane-mode 9 join-pane -t :9
通过按 Ctrl-h 键,可以快速切换到上一个窗口。
通过按 Ctrl-l 键,可以快速切换到下一个窗口。
通过 Ctrl-g + 数字键快速切换到指定窗口。例如,按 Ctrl-g + 1 切换到窗口 1。
通过 Ctrl-a + 数字键将当前窗格加入到指定窗口。例如,按 Ctrl-a + 1 将当前窗格加入到窗口 1。
和上面join-pane 差不多的功能,也是将窗格移动到某个窗口,但这个还可以跨会话移动
# 打开会话和窗口树选择窗格并垂直移动面板
bind S choose-tree 'move-pane -v -s "%%"'
# 打开会话和窗口树选择窗格并水平移动面板
bind V choose-tree 'move-pane -h -s "%%"'
choose-tree:打开会话和窗口树选择菜单。
'move-pane -v -s "%%"':选择后执行 move-pane 命令,将选中的窗口垂直移动到当前面板。%% 是一个 tmux 内部的占位符,用于表示选择的目标。
-v:将选中的窗格垂直移动到当前面板。
-h:将选中的窗格水平移动到当前面板。
窗格导航
# 垂直拆分,新的窗格位于当前窗格之上。
bind / split-window -vb
# 垂直拆分,新的窗格位于当前窗格之下。
bind ? split-window -v
# 水平拆分,新的窗格位于当前窗格之左
bind < split-window -hb
# 水平拆分,新的窗格位于当前窗格之右
bind > split-window -h
通过 > 和 < 键快速交换窗口位置,从而方便地调整窗口布局。
# 选择左侧的窗格
bind -r h select-pane -L
# 选择下方的窗格
bind -r j select-pane -D
# 选择上方的窗格
bind -r k select-pane -U
# 选择右侧的窗格
bind -r l select-pane -R
# 快速选择窗格
bind 1 select-pane -t:.1
bind 2 select-pane -t:.2
bind 3 select-pane -t:.3
bind 4 select-pane -t:.4
bind 5 select-pane -t:.5
bind 6 select-pane -t:.6
bind 7 select-pane -t:.7
bind 8 select-pane -t:.8
bind 9 select-pane -t:.9
bind 0 select-pane -t:.10
这些快捷键绑定将 h、j、k、l 键用作窗格导航键,类似于 Vim 的导航方式,就可以更方便地在不同窗格之间移动。
通过 <prefix> + 数字键快速切换到指定窗格。例如,按 Ctrl-b + 1 或者Ctrl-s + 1切换到窗格 1。
# 将当前窗格与下方的窗格交换位置
bind ')' swap-pane -D
# 将当前窗格与上方的窗格交换位置
bind '(' swap-pane -U
# 切换到下一个窗格布局
bind -n C-u next-layout
# 创建新窗口,路径为当前 pane 的路径
bind -n C-p new-window -c "#{pane_current_path}"
# 将当前窗格分离成新窗口
bind -n C-o break-pane
# 关闭当前窗格
bind -n C-q kill-pane
通过 ( 和 ) 键快速交换上下窗格的位置,从而方便地调整窗格布局。
next-layout tmux默认提供了一些布局样式,使用它可以快速进行排版。
调整窗格大小
# 将窗格向左调整 2 个单元格
bind -r H resize-pane -L 2
# 将窗格向下调整 2 个单元格
bind -r J resize-pane -D 2
# 将窗格向上调整 2 个单元格
bind -r K resize-pane -U 2
# 将窗格向右调整 2 个单元格
bind -r L resize-pane -R 2
# 最大化当前窗格
bind f resize-pane -Z
通过 H、J、K、L 键精确调整窗格大小,可以更灵活的调整屏幕上窗格的布局。
f 键快速最大化当前窗格,便于查看和操作,再次按下可以恢复原始大小。
可视模式
在 tmux 中使用 Vi 风格的键绑定进行复制操作,自定义复制模式(Vi 模式)的键绑定
# 可视模式
bind -n C-v copy-mode
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind -T copy-mode-vi h send-keys -X cursor-left
bind -T copy-mode-vi l send-keys -X cursor-right
bind -T copy-mode-vi k send-keys -X cursor-up
bind -T copy-mode-vi j send-keys -X cursor-down
bind -T copy-mode-vi i send-keys -X next-word-end
bind -T copy-mode-vi K send-keys -N 5 -X cursor-up
bind -T copy-mode-vi J send-keys -N 5 -X cursor-down
bind -T copy-mode-vi H send-keys -X start-of-line
bind -T copy-mode-vi L send-keys -X end-of-line
bind -T copy-mode-vi Y send-keys -X copy-end-of-line
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind -T copy-mode-vi = send-keys -X search-again
bind -T copy-mode-vi = send-keys -X search-reverse
bind -n C-v copy-mode 绑定 Ctrl-v 键进入复制模式(copy-mode),从而可以选择和复制屏幕上的文本内容。
在复制模式下,下面的快捷键用于选择、复制和取消复制等操作:
begin-selection:开始选择文本
rectangle-toggle:切换矩形选择模式
cursor-left 、cursor-right :向某个方向移动
next-word-end:移动到下一个单词末尾
start-of-line 、end-of-line :移动到行首和行尾
copy-end-of-line : 复制到行末
copy-selection-and-cancel :复制选择并退出选择模式
search-again:重复上次搜索
其他快速变更指令
切换状态栏的显示状态
# -- 切换状态栏的显示状态
bind s if-shell '[[ $(tmux show -g status | cut -d\ -f2) == "on" ]]' \
'set -g status off' \
'set -g status on'
通过 s 键来实现在状态栏的显示和隐藏之间切换。
if-shell '[[ $(tmux show -g status | cut -d\ -f2) == "on" ]]' 执行一个条件判断的 shell 脚本
tmux show -g status:命令用于显示全局的 status(状态栏)配置
cut -d\ -f2:使用 cut 命令提取第二个字段(即状态 "on" 或 "off")
[[ ... == "on" ]]:判断提取的状态是否为 "on"
set -g status off :状态栏状态为 "on",则关闭状态栏
set -g status on:如果状态栏状态为 "off",则开启状态栏
控制多窗格同步输入功能
# -- 控制多窗格同步输入功能
bind C-g if-shell '[[ $(tmux showw synchronize-panes | cut -d\ -f2) == "on" ]]' \
'setw synchronize-panes off; set -g pane-border-style fg=magenta' \
'setw synchronize-panes on; set -g pane-border-style fg=red'
通过 Ctrl-g 键来实现在一个窗口下控制多窗格的同步输入功能开关,同时根据同步状态更改面板边框的颜色。
tmux showw synchronize-panes:命令用于显示当前窗格的 synchronize-panes 状态。
cut -d\ -f2:使用 cut 命令提取第二个字段(即状态 "on" 或 "off")。
[[ ... == "on" ]]:判断提取的状态是否为 "on"。
setw synchronize-panes off; set -g pane-border-style fg=magenta:
- 如果
synchronize-panes状态为 "on",则将其关闭,并将面板边框颜色设置为magenta。 setw synchronize-panes off:关闭同步输入。set -g pane-border-style fg=magenta:将面板边框颜色设置为紫红色。
setw synchronize-panes on; set -g pane-border-style fg=red:
- 如果
synchronize-panes状态为 "off",则将其开启,并将面板边框颜色设置为red。 setw synchronize-panes on:开启同步输入。set -g pane-border-style fg=red:将面板边框颜色设置为红色。
快速重新加载配置文件
bind r run '"$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF"' \; display "#{TMUX_CONF} sourced"
通过 r 键快速重新加载 tmux 配置文件并显示提示信息,达到快速应用配置更改。
- 这行配置为
r键绑定了重新加载 tmux 配置文件的功能。 run '"$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF"':运行 tmux 程序重新加载配置文件。display "#{TMUX_CONF} sourced":在状态栏显示配置文件已重新加载的信息。
安装tmux插件管理器
先克隆 tpm 仓库到本地环境
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
将以下内容放在 ~/.tmux.conf 文件里启用插件
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'github_username/plugin_name#branch'
# set -g @plugin 'git@github.com:user/plugin'
# set -g @plugin 'git@bitbucket.com:user/plugin'
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
然后重载配置使其生效
:source ~/.tmux.conf
# 如果 tmux 已在运行,则在终端中键入此内容
tmux source ~/.tmux.conf
插件
主题
# catppuccin theme
set -g @plugin "catppuccin/tmux"
set -g @catppuccin_flavour "mocha"
常用的tmux操作按键(快捷键)
以下是一些个人定义的tmux操作按键(快捷键)
个人配置使用 C-s 作为二级前缀,同时保留 C-s 作为默认前缀。
按键绑定说明
<prefix> 表示您必须按 Ctrl + d 或 Ctrl + s。
<prefix> c 表示必须按 Ctrl + d 或 Ctrl + s,然后按 c
<prefix> C-c 表示必须按 Ctrl + d 或 Ctrl + s,然后按 Ctrl + c
个人配置使用以下绑定
快捷操作
<prefix> d 分离当前会话到后台运行
<prefix> r 重新加载配置
<prefix> C-g 控制多窗格的同步输入功能开关
<prefix> s 显示隐藏底部状态栏
C-l 清除屏幕和 tmux 历史记录
会话相关
<prefix>
<prefix> C-c 当前窗口下快速创建新的会话
<prefix> ] 查看已创建的会话
<prefix> W 以树状图样式查看已创建的会话及其窗口窗格
C-x + 1 快速关闭第一个会话(1~9 可以依顺序快速关闭对应的会话)
窗口相关
<prefix> C-h 切换当前会话里的上一个窗口
<prefix> C-l 切换当前会话里的下一个窗口
C-g + 数字键 将快速切换到当前会话里的其他指定窗口,例如按 Ctrl-g + 1 将快速切换到当前会话里的第一个窗口(1~9 可以依顺序快速切换对应的窗口)
C-a + 数字键 将当前窗格加入到当前会话里的其他指定窗口,例如按 Ctrl-a + 1 将当前窗格加入到窗口 1。(1~9 可以依顺序将当前窗格加入到其他对应的窗口)
<prefix> S 以树状形式打开所有会话和窗口,并将选中想要移动的窗格垂直移动到当前(所选择的)会话窗口下(跨会话移动)
<prefix> V 以树状形式打开所有会话和窗口,并将选中想要移动的窗格垂水平动到当前(所选择的)会话窗口下(跨会话移动)
窗格相关
<prefix> <水平拆分,新的窗格位于当前窗格之左
<prefix> >水平拆分,新的窗格位于当前窗格之右
<prefix> ?垂直拆分,新的窗格位于当前窗格之下。
<prefix> / 垂直拆分,新的窗格位于当前窗格之上。
<prefix> h, <prefix> j, <prefix> k , <prefix> l 焦点窗格上下左右移动选择
<prefix> + 数字键 将快速将焦点切换到当前窗口下的其他窗格里,例如按 <prefix> + 1 将快速将焦点切换到第一个窗格下(1~9 可以依顺序快速切换对应的窗格)
<prefix> ( , <prefix> ) 交换上下窗格的位置
C-o将当前窗格分离成新窗口
C-q关闭当前窗格
C-u切换到下一个窗格布局
C-p创建新窗口,路径为当前 pane 的路径
<prefix> H, <prefix> J, <prefix> K, <prefix> L 调整窗口大小
<prefix> f 当前窗格最大化,再次按下恢复
可视模式,复制相关
C-v进入复制模式
v 开始选择文本
Ctrl-v 切换矩形选择模式
h向左移动光标。
l向右移动光标。
k向上移动光标。
j向下移动光标。
K向上移动光标 5 行
J向下移动光标 5 行
H将光标移动到行首
L将光标移动到行尾
i将光标移动到下一个单词的结尾
Y复制从光标当前位置到行尾的内容
y复制选择的内容并取消选择模式
=重复上一次的搜索
会话管理
创建新的 tmux 会话
tmux new -s session_name
tmux new-session -s mysession 创建一个名为 mysession 的新会话
启动一个新的 tmux 会话并使其在后台运行
tmux new-session -d -s session_name
列出当前正在运行的所有所有 tmux 会话
tmux list-sessions
tmux ls
chixm:~ $ tmux list-sessions
3: 8 windows (created Sun Apr 28 15:39:55 2024)
7: 2 windows (created Mon Apr 29 10:42:05 2024)
这将列出所有后台运行的 tmux 会话及其名称。
重命名会话
tmux rename-session -t newnam chixm
将编号为 3 的会话重命名为 chixm。
chixm:~ $ tmux list-sessions
7: 2 windows (created Mon Apr 29 10:42:05 2024)
chixm: 8 windows (created Sun Apr 28 15:39:55 2024)
重新连接到会话
tmux attach -t session_name
tmux attach-session -t session_name
要重新连接到一个已经在后台运行的 tmux 会话,可以使用以下命令:
-t session_name 用于指定要连接的会话名称。
chixm:~ $ tmux list-sessions
7: 2 windows (created Mon Apr 29 10:42:05 2024)
chixm: 8 windows (created Sun Apr 28 15:39:55 2024)
# 进入到编号为 3 的会话
chixm:~ $ tmux attach-session -t 7
杀死结束会话
tmux kill-session -t <session-name-or-id>
# 结束编号为 3 的会话
tmux kill-session -t 3
# 结束名为 chixm 的会话
tmux kill-session -t chixm
# 结束所有 tmux 会话
tmux kill-server
# 使用 xargs 一次性杀死多个会话
tmux list-sessions -F '#S' | xargs -I {} tmux kill-session -t {}
# 结束当前会话
tmux kill-session
在当前所在的会话内部执行,会话将被终止。
shell环境下重新加载 tmux 配置文件
tmux source ~/.tmux.conf
其他
开箱即用的配置

共 0 条评论关于 “配置使用 Tmux”