使用 tmux+Alacritty 实现高效终端
背景
本人使用Windows时用Windows Terminal,随后在Linux下使用GNOME Terminal。这两个终端模拟器都有标签页的功能,可以在一个窗口中打开多个标签页(类似现代的大部分浏览器),方便管理多个终端会话。
然而,我偶然遇到了Alacritty这个非常优秀的终端,但是它不提供多任务功能。经过探索和交流,我发现了tmux这个强大的终端复用工具,它可以在无论多朴素的终端模拟器中实现多任务,且比screen强大的多。
何为tmux
tmux是一个终端复用工具,可以在一个终端窗口中运行多个会话。tmux的本质为tmux-client和tmux-server,前者用于呈现内容,后者则管理会话且在后台运行。如果在关闭终端模拟器之前将二者分离,tmux-server仍会保持运行,回来后可以重新连接到之前的会话。
许多“高级用户”的终端中都有分屏,这很有可能就是tmux。
何为Alacritty
Alacritty是一个高效的终端模拟器,提供GPU加速等性能优化。在有tmux的情况下,由于我们不需要终端模拟器自身提供多任务功能,Alacritty自然是最好的选择。
安装
在Arch Linux上,Alacritty和tmux都在官方仓库中:
1
sudo pacman -S alacritty tmux
其他发行版类似。
配置与优化
要想高效使用Alacritty+tmux组合且从GNOME Terminal较快的适应,必须进行一些配置和优化。
Alacritty的颜色配置
Alacritty中默认的绿色看上去发黄,不是很习惯。可以使用Adawaita的配色主题(和GNOME Terminal的默认主题非常相似)来进行调整。
Alacritty自身不提供图形化配置界面,需要手动修改配置文件。配置文件位于~/.config/alacritty/alacritty.toml,填入以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[colors.primary]
background = "#1e1e1e"
foreground = "#ffffff"
[colors.normal]
black = "#241f31"
red = "#c01c28"
green = "#2ec27e"
yellow = "#f5c211"
blue = "#1e78e4"
magenta = "#9841bb"
cyan = "#0ab9dc"
white = "#c0bfbc"
[colors.bright]
black = "#5e5c64"
red = "#ed333b"
green = "#57e389"
yellow = "#f8e45c"
blue = "#51a1ff"
magenta = "#c061cb"
cyan = "#4fd2fd"
white = "#f6f5f4"
重启终端后可以看到更为熟悉的配色方案。
tmux入门操作
以下是tmux的一些基本操作。PREFIX按键是tmux的前缀键,默认是Ctrl+b,可以通过配置文件修改。此外,tmux几乎所有按键绑定都是可以修改的,后面会提及tmux操作效率的优化。
会话管理
- 创建新会话:
tmux new -s <session-name> - 列出所有会话:
tmux ls - 连接到已有会话:
tmux attach -t <session-name>,如果不指定-t <session-name>,则会连接到第一个会话 - 分离当前会话:
PREFIX d(在tmux内) - 关闭一个会话:
tmux kill-session -t <session-name>
如果终端使用不是很多,一个会话足够,且不需要关闭会话,可以只记住:
- 创建:
tmux new - 连接:
tmux attach - 分离:
PREFIX d
如果想要在有会话时连接,无会话时创建新的,可以使用:
1
tmux attach || tmux new
窗口与窗格
“窗口”类似于标签页,“窗格”则为分屏显示。Alacritty默认的窗口本身就比较大,可以通过分屏来更高效地利用空间,此时“窗口”(标签页)功能由于不能预览内容、切换不太方便,可以少用。
窗口操作:
- 创建新窗口:
PREFIX c - 切换窗口:
PREFIX n(下一个),PREFIX p(上一个),PREFIX <number>(切换到指定编号窗口) - 关闭当前窗口:
PREFIX &
窗格操作:
- 水平分屏:
PREFIX "(双引号) - 垂直分屏:
PREFIX % - 切换窗格:
PREFIX o(下一个),prefix ;(上一个) - 关闭当前窗格:
PREFIX x - 调整窗格大小:
PREFIX后按住Ctrl,然后使用方向键调整
tmux默认不支持鼠标操作,可以在配置中开启,此时调整大小、切换窗格等键盘操作都可以不用记忆。
配置tmux
tmux的配置文件位于~/.tmux.conf,可以通过修改该文件来定制tmux。
以下是一些需要优化的地方:
- 开启鼠标操作(重要!)
- 修改前缀键为
Ctrl+x等距离更近的组合 - 修改分屏为’-‘,’/’这两个更有意义的按键(根据习惯调整,默认的两个按键甚至都需要按
Shift,非常不方便) - 修改超链接显示,让超链接在支持的终端模拟器中可点击(不修改的话tmux内的超链接是不可点击的)
- 让分屏和新建窗口时自动进入当前目录
1
2
3
4
5
6
7
8
9
10
11
12
unbind C-b
set-option -g prefix C-x
bind-key C-x send-prefix
set -g mouse on
bind c new-window -c "#{pane_current_path}"
bind - split-window -c "#{pane_current_path}"
bind / split-window -h -c "#{pane_current_path}"
set -s terminal-features "*:hyperlinks"
注意:开启鼠标操作后,原来终端模拟器中的鼠标操作(例如点击链接)会失效,此时需要按住Shift键解除tmux对鼠标的捕获。
布局建议
本人一般开一个垂直分屏,上面运行htop监控性能,下面再进行水平分屏,同时运行两个项目,效率很不错。
由于分屏时无需切换就可以看到另一个任务的进度,效率比进行频繁的标签页切换高很多。
其他优化
在终端模拟器启动时自动运行tmux,可以在~/.zshrc或~/.bashrc中添加:
1
2
3
if [ -z "$TMUX" ] && [ "$TERM_PROGRAM" != "vscode" ]; then
tmux attach || tmux new
fi
该代码会跳过VSCode的内置终端,因为内置终端本身太小,同时避免干扰Code Runner等插件。
服务器安装
由于服务器更需要运行后台任务,tmux在服务器上更有用武之地。下一篇文章将会详细介绍服务器上的安装使用。
