文章

使用 tmux+Alacritty 实现高效终端

使用 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在服务器上更有用武之地。下一篇文章将会详细介绍服务器上的安装使用。

本文由作者按照 CC BY 4.0 进行授权