配置使用 Tmux
分类: 工具使用 719 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”