配置使用 Tmux

陌上花

分类: 工具使用 503 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-bC-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

这些快捷键绑定将 hjkl 键用作窗格导航键,类似于 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

通过 HJKL 键精确调整窗格大小,可以更灵活的调整屏幕上窗格的布局。

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-leftcursor-right :向某个方向移动

next-word-end:移动到下一个单词末尾

start-of-lineend-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/tmux 主题

# catppuccin theme
set -g @plugin "catppuccin/tmux"
set -g @catppuccin_flavour "mocha"

常用的tmux操作按键(快捷键)

以下是一些个人定义的tmux操作按键(快捷键)

个人配置使用 C-s 作为二级前缀,同时保留 C-s 作为默认前缀。

按键绑定说明

<prefix> 表示您必须按 Ctrl + dCtrl + s
<prefix> c 表示必须按 Ctrl + dCtrl + 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

其他

开箱即用的配置

https://github.com/gpakosz/.tmux

  • 0人 Love
  • 0人 Haha
  • 0人 Wow
  • 0人 Sad
  • 0人 Angry
Mac、Tmux

作者简介: 陌上花

CSS|JavaScript|Python|诗词|文学|生活 所知甚少,唯善学

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

Loading...