2024年,我在用什么终端模拟器?
TL;DR: 我选择了 Kitty 终端
前言
相信看到这篇文章的人大概都了解何为“终端”。因此,这里不再详细解释 terminal
、shell
、console
、tty
、pty
这些术语之间的关系了。
A terminal emulator, or terminal application, is a computer program that emulates a video terminal within some other display architecture.
根据 Wikipedia 的定义,终端模拟器是对硬件终端的仿真。由于硬件终端早已成为历史遗物,以下我们简称这些终端模拟器为“终端”。
使用过的终端
我曾使用过许多终端,但长期使用的只有 Konsole、iTerm2、Kitty 和 Alacritty 这四个。(在此对 WezTerm 和 Warp 等其他终端的用户表示歉意)
由于我大部分时间在 macOS 上度过,所以使用时间最长的终端自然是 iTerm2。
iTerm2 的体验
尽管有很多人批评 iTerm2 很慢,但实际上它几乎满足了我的所有需求,尤其是在我的 60Hz 显示器上,速度问题并不明显。然而,它确实有几个小问题让我总觉得还差点什么:
- 不支持同时开启 ligatures 和 GPU 渲染
- 不支持使用文本文档进行配置
Ligature 即连字,不了解的人可以阅读 Ligature (writing)。在编程中,连字的重要作用是将 !=
这类字符显示为 ≠
。iTerm2 在开启 ligatures 的情况下会使用 Apple 的 Core Text 框架而非 GPU 进行文本渲染(详见 iTerm2 文档)。
iTerm2 的配置只支持导出为 JSON
文档,这并不是什么大问题。但对于使用 dotfiles 管理开发环境的用户来说,每次修改配置后都要手动导出到 JSON
文档再添加到 git repo,确实多了一步操作。
这些问题虽然不大,但作为一个超过十年的 Arch Linux 用户,尽管因为 M 系列处理器的 ARM 平台能耗优势转投了 macOS,还是总会怀念 Linux。尤其是在深入了解了 NixOS 的设计哲学后,我决定将 PC 的操作系统换成 NixOS,这时 iTerm2 最大的弊端——不支持多平台——就显露出来了。于是,我尝试了 Kitty 和 Alacritty 这两个终端。
选择 Kitty 的原因
Kitty 和 Alacritty 都是默认使用 GPU 加速的现代终端。它们的主要开发者都个性鲜明且坚持自我。
Kitty 的开发者是知名电子书管理软件 Calibre 的开发者 Kovid Goyal。他在开发 Calibre 时闹出不少风波,比如 Calibre and setuid 和 calibre not online - https proxy fault。在开发 Kitty 时,他对 tmux
的观点 kitty tmux like daemon 也引发了不少争议。
Alacritty 的开发者同样固执,他对性能的执着使得许多功能至今未被合并。8chan 的创始人 Fredrick Brennan 对此有一篇有趣的评论 Rust maintainer perfectionism。
最终我选择 Kitty 作为常用终端的原因很简单,Alacritty 仍然过于简陋,不支持图像协议和 ligatures。在使用一段时间后,我并未感觉出明显的性能优势(可能我是个对性能不太敏感的人)。
考虑到 Vim 的开发体验和对 yazi
的支持(一个非常有潜力的 TUI 文档管理器,有空我会单独开一篇文章谈谈),我选择了 Kitty。
结语
最后,但同样重要的是,猫好人坏。
我的 Kitty 配置文档可以在我的 dotfiles git repo 中找到。当然,由于 Kitty 开发者的一些坚持,我的迁移并非一帆风顺,比如 powerlevel10k
对 block elements 的使用导致了一些问题。具体可以查看我的[迁移日志]。
#TODO