前置知识
什么是 Session
我们现在可以将 Session 按照其对应的中文意思进行理解,即为一次会话,我们通过 Terminal 连接服务器至我们退出服务器的整个过程就可以被称为一次会话
场景
比如我们再进行服务器终端操作的时候,现在要安装一个包,我们在安装的时候如果此时发生了一些以外情况不小心中断了连接,此时就只能再重新通过 ssh 连接服务器然后输入安装软件包的指令
- 该场景存在的问题:
session的生命周期是跟terminal强绑定的,即关闭terminal之后session就自动中断了
如何解决?
所以要解决当前使用场景的问题,就有了将 session 和 terminal 的生命周期分离开的方案,而这个解决方案就是我们今天要介绍的 Tmux
什么是 Tmux
Tmux是一个终端多路复用器
Tmux 允许在一个终端窗口中创建、访问和控制多个终端会话,并且 Tmux 支持将 session 和 terminal 分离开并在后台运行,并支持重新连接。支持窗口和窗格的垂直和水平拆分,非常适合同时运行多个命令行程序。
Tmux 的安装
如果是使用 MacOS 使用如下命令:
brew install tmux
如果是使用 Linux 系统的话看一下你自己的机器用的软件包管理器,然后使用对应的命令安装该软件包即可
Tmux 起步
在安装好 Tmux 之后,该如何使用呢?其实非常简单,基本的使用如下:
- 打开终端软件
- 输入
tmux - 回车
恭喜你开启了一个新的 Session !
Tmux 的基本概念
prefix 前置快捷键
在进入 Tmux 的 Session (会话)之后,现在我们要查看该如何使用 Tmux 的基本快捷键呢?
要使用 Tmux 的基本功能,比如:
- 上下(水平)分屏
- 左右(垂直)分屏
- 退出
Tmux会话
在 Tmux 中存在着 prefix 的概念,所谓的 prefix 可以理解为前置快捷键,而前置快捷键就是在进行操作动作前一定要执行的一个步骤,比如我们如果要进行垂直分屏,对应的按键是 % 键,但是要触发这个按键的功能,我们一定要在按 % 之前加上 prefix 也就是前置快捷键。
默认的 prefix 为 ctrl + b,所以要进行垂直分屏,对应的快捷键就是:ctrl + b + % 即按下 ctrl + b 之后再按下 %
[!info] 所有的快捷键都是可以更改的,在[[#如何改键?]]的小节会具体讲解
三大核心概念
接下来讲解一下 Tmux 中的 3 大概念,搞明白这三大概念就会对 Tmux 的基本使用有一个比较好的理解
Sessions
- 中文名:会话
- 一个
session是tmux的最高层次单位。它包含多个窗口和窗格。你可以在不同的终端会话之间切换,并保持它们的状态。
Windows
- 中文名:窗口
- 一个
session可以包含多个窗口。每个窗口类似于一个独立的终端,可以运行不同的任务。你可以在同一个session中创建和切换多个窗口。
Panes
- 中文名:窗格
- 每个窗口可以进一步分割成多个窗格。每个窗格都是一个独立的终端区域,可以运行不同的命令。窗格可以垂直或水平分割,方便同时查看和操作多个任务。
树形结构:
Session 0
├── Window 0
│ ├── Pane 1
│ ├── Pane 2
│ ├── Pane 3
│ └── Pane 4
└── Window 1
├── Pane 1
├── Pane 2
├── Pane 3
└── Pane 4
Session 1
└── Window 0
├── Pane 1
└── Pane 2
图例:
实际呈现:
- 下方绿色的条显示我当前处于
session 0中的window 2的编号为1的pane[0]表示当前处于会话00:zsh 1:zsh- 2:zsh*:表示当前有 3 个window,其对应的名称都为zsh后面带上*表示的是当前处于该window- 当前处于编号为
1的pane下
基本配置
讲了这么多,也是时候配置一下 Tmux ,首先 Tmux 的默认配置非常难看,所以我们需要自己改造一下,首先要解决的就是 Tmux 那个非常难看的主题配色了!但是我们首先需要安装 tpm即为 Tmux Plugin Manager (Tmux 插件管理器)
安装 tpm
- 首先选择在
~下创建.tmux.conf即为 Tmux 的配置文件(也可以选择在其他地方创建,在后面指定配置文件的时候需要制定对应的路径) - 安装 ,首先我们克隆项目:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
- 编辑配置文件,我们按照 github 上的安装教程,写入如下内容:
- [[Vim]] 的配色可能有点问题可以顺便加入代码:
set -g default-terminal 'tmux-256color'
- [[Vim]] 的配色可能有点问题可以顺便加入代码:
# 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'
## - Solve the Vim color scheme problem
set -g default-terminal 'tmux-256color'
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
[!Warning]
run '~/.tmux/plugins/tpm/tpm'这句一定要放在配置文件的末尾才能生效
- 然后我们参考下一小节的内容刷新配置文件,就可以安装完成了!
如何让刚刚修改的配置文件生效
- 方法一:通过 Tmux 命令模式
- 按下
<prefix> + : - 输入
source ~/.tmux.conf(source后面跟的是 Tmux 配置文件的路径)
- 按下
- 方法二:直接通过 Tmux 命令来让配置文件生效
- 在终端输入
tmux source ~/.tmux.conf - 回车,配置文件即刻生效
- 在终端输入
如何美化?
下面我们来介绍一下如何美化 Tmux,默认的 Tmux 非常难看,所以我们需要借助一些主题,来强化 Tmux 的效果!
这里我推荐使用 catppuccin (猫布奇)主题,这个主题的配色风格非常好看:
首先我们修改 .tmux.conf 中的内容:
catppuccin_flavour和catppuccin_window_status_style这两块的内容是给该插件做样式客制化的配置,详情可以查阅官方的 GitHub
...
## - catppuccin theme
set -g @plugin 'catppuccin/tmux'
set -g @catppuccin_flavour 'macchiato'
set -g @catppuccin_window_status_style "rounded"
...
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
然后我们 按下 <prefix> + shift + i 安装该主题!
如果你觉得还是不够好看,那么我们接下来继续优化一下!
## - List of plugins
...
set -g @plugin 'tmux-plugins/tmux-cpu'
set -g @plugin 'tmux-plugins/tmux-battery'
## - catppuccin theme
set -g @plugin 'catppuccin/tmux'
set -g @catppuccin_flavour 'macchiato'
set -g @catppuccin_window_status_style "rounded"
## - Make the status line pretty and add some modules
set -g status-right-length 100
set -g status-left-length 100
set -g status-left ""
set -g status-right "#{E:@catppuccin_status_application}"
set -agF status-right "#{E:@catppuccin_status_cpu}"
set -ag status-right "#{E:@catppuccin_status_session}"
set -ag status-right "#{E:@catppuccin_status_uptime}"
set -agF status-right "#{E:@catppuccin_status_battery}"
...
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
- 这里我们用到了两个插件,
tmux-cpu和tmux-battery这两个插件 - 刷新配置文件,然后我们就可以看到相对比较好看的 Tmux 样式了!
如何改键?
修改默认的 prefix
Tmux 中比较难用的就是 prefix 即 [[#prefix 前置快捷键|前置键]] (默认为 ctrl + b),这块对于我一个 Vim 党来说是不太行的,他和 Vim 的翻页快捷键冲突了,所以我会将其改掉 变为 ctrl + s:
## - change the prefix
unbind C-b
set -g prefix C-s
- 首先要让原先的快捷键失效:
unbind C-b - 然后设置新的前置键:
set -g prefix C-s
修改快捷键
bind-key c new-window -c "#{pane_current_path}"
比如这块的修改:
bind-key c表示在按下prefix之后按下c就执行后面的内容new-window -c "#{pane_current_path}":这部分命令表示在当前面板的路径下创建一个新窗口。
问题就来了,如果我想要快捷键不加上 prefix 呢?我们看下面的代码:
## - fullscreen
bind -n M-f resize-pane -Z
bind -n M-f:-n可以理解为,按下无须按下prefix,直接按下meta+f就可以执行后面的部分(meta相当于alt)resize-pane -Z:触发全屏
常用的 Tmux 命令/快捷键
Sessions
- 创建一个新
Session:tmux - 创建一个新
Session,并制定会话名 :tmux new -s name - 查看当前存在的
Session:tmux ls - 回到最近使用的
Session:tmux attach或者可以简写为tmux a - 切换指定的
Session:tmux a[ttach] [-t <session-name-or-num>] - 关闭:
tmux kill-session [-t <session-name-or-num>] - 进入会话后退出会话:
<prefix>+d
[!tip]
<session-name-or-num>表示可以是Session名或者是Session编号tmux kill-session如果不指定对应的Session默认触发的是删除当前最后处在的Session,不会吧当前所有的Session都删除- 第七点中的进入会话后退出会话 ,并不会中断
Session,只是脱离当前的Session,所以此时我们可以打开新的Session/Window去做其他的事情,这样就可以解决我们一开始在[[#什么是 Session#场景]] 中所遇到的问题了
Windows
- 创建一个
Window:<previx>+c - 切换
Window:<previx>+<num> - 关闭当前
Window:<previx>+& - 查看(可以选择并切换对应的
Window与Panes):<previx>+w,如下图所示
Panes
- 左右(垂直)分屏:
<prefix>+" - 上下(水平)分屏:
<prefix>+% - 切换
Panes:<prefix>+q+<num> - 关闭:
<prefix>+x - 缩放(在对应的
Panes触发该快捷键会放大,如果再次触发会缩小):<prefix>+z
去阴间化的配置(提升使用体验)
因为 tmux 的默认配置比较难用,所以这里我们需要自己添加一些配置来让 Tmux 更好用一些:
设置默认开启的 windows/panes 编号为1
- 如果默认的编号为 0 的话不太好按,所以推荐设置默认的编号为 1
# Options to make tmux more pleasant
## - Solve the Vim color scheme problem
set -g default-terminal 'tmux-256color'
set -g base-index 1
set -g pane-base-index 1
set -g renumber-windows on # 关掉某个窗口后,编号重排
开启鼠标
## - mouse on
set -g mouse on
复制模式使用 vim 键位
Tmux 默认进入复制模式使用的是 Emacs 键位,推荐使用下面的配置,这样就可以在复制模式下使用 Vim 键位了
## - Visual move
set-window-option -g mode-keys vi
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
如何进入/退出复制模式
进入:
- 使用快捷键:
prefix+]
退出:
- 按下回车
让工作目录更好用
set-option default-path "$PWD":- 设置默认路径为启动 tmux 会话时的当前工作目录。
bind-key c new-window -c "#{pane_current_path}":- 绑定快捷键
c用于创建新窗口,窗口会继承当前窗格的工作目录。
- 绑定快捷键
bind-key % split-window -h -c "#{pane_current_path}":- 绑定快捷键
%用于水平分割窗格,新窗格会继承当前窗格的工作目录。
- 绑定快捷键
bind-key '"' split-window -v -c "#{pane_current_path}":- 绑定快捷键
"用于垂直分割窗格,新窗格会继承当前窗格的工作目录。
- 绑定快捷键
## - Set the default path for new windows and panes to the current working directory
set-option default-path "$PWD"
## - Open a new window with the same directory as the current pane
bind-key c new-window -c "#{pane_current_path}"
## - Split window with the same directory as the current pane
bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -v -c "#{pane_current_path}"
提升使用体验
alt+f:全屏alt+shift+f:切换当前的布局
## - fullscreen
bind -n M-f resize-pane -Z
## - toggle layout
bind -n M-F next-layout
其他命令
- 查看可用命令:
tmux list-commands - 查看可用快捷键:
tmux list-keys- 如果想要快速搜索也可以用管道配合
grep命令的形式:tmux list-<commands | keyss> | grep <key | cmd>
- 如果想要快速搜索也可以用管道配合
除了以上命令推荐到 Tmux Cheat Sheet 上看一看常用的命令,相信就能比较快的上手了!
其他推荐安装的插件
- tmuxifier:Session 管理工具,允许自定义 Session 中 Window 和 Pane 的排版
- vim-tmux-navigator:使用 vim 键位在 pane 中实现来回跳转
- tmux-yank:让在复制模式下复制的内容在剪贴板也能读取到(同样适用于服务器端)
来源与参考
[!quote]