我目前在用哪款终端模拟器?(2024版)
长话短说:我选择了 Kitty 终端模拟器。
在尝试了多款终端模拟器后,我最终选定了 Kitty。这篇文章详细记录了我最近选择新终端模拟器的过程,特别是从长期使用的 iTerm2 切换到 Kitty 的原因和考量。
选择 Kitty 的核心原因在于它完美地满足了我对现代终端的需求:跨平台支持 (macOS 和 Linux)、GPU 加速渲染、同时支持连字特性 (ligatures) 与 GPU 渲染、内置图像协议支持 (这对 yazi 等工具至关重要) 以及易于通过 Git 管理的纯文本配置文件。
什么是终端模拟器?
在深入探讨之前,让我们先明确一下讨论的对象。大多数读者可能知道什么是终端,但为了完整起见:
终端模拟器(terminal emulator)或终端应用程序(terminal application)是一种计算机程序,它在某个其他的显示架构里模拟一个视频终端。
来源:维基百科
简单来说,它就是我们用来与命令行界面和 shell(如 Bash 或 Zsh)交互的软件窗口。硬件终端大多已成为历史,所以我们通常直接称这些模拟器为「终端」。
我的终端使用历史与 iTerm2 体验
多年来,我用过不少终端,包括 Konsole、Alacritty 和 Kitty。但由于我大部分时间都在 macOS 上工作,iTerm2 是我长期以来的日常主力。
尽管 iTerm2 常因性能问题受到诟病,但它在标准 60Hz 显示器上表现尚可,速度差异并不总是那么明显。它满足了我的大部分需求,但有几个小问题一直让我觉得不够完美:
- 无法同时启用连字和 GPU 渲染:启用字体连字(例如将
!=合并显示为≠)会迫使 iTerm2 使用苹果的 Core Text 框架而非 GPU 进行渲染,这可能影响性能或视觉一致性 (iTerm2 文档)。 - 没有纯文本配置:iTerm2 的配置只能导出为
.plist或.json文件。对于通过 Git 管理 dotfiles 的开发者来说,这意味着每次更改后都需要手动导出配置,相比简单的文本配置文件要麻烦得多。
这些虽然只是小烦恼,但也代表了我希望能够克服的局限性。
寻求改变的契机:走向跨平台
真正促使我寻找替代品的动力,是我决定在我的 PC 上采用 NixOS。作为一名曾经的 Arch Linux 用户,后来主要因为 M 系列 ARM 芯片的高能效而转向 macOS,NixOS 的声明式哲学理念又重新吸引我,让我考虑在桌面上回归 Linux。
这一转变凸显了 iTerm2 对我新工作流的主要缺点:它仅适用于 macOS。我需要一个能在 macOS 和 Linux 上无缝工作的终端。这促使我认真评估了现代、跨平台、GPU 加速的选项,主要是 Kitty 和 Alacritty。
评估替代品:Kitty vs. Alacritty
Kitty 和 Alacritty 都是流行且性能优异的终端,利用了 GPU 加速。它们也都因其维护者观点鲜明而闻名(Kitty 的 Kovid Goyal,也因 Calibre 闻名;Alacritty 团队则专注于极简主义,有时被认为固执)。
- Alacritty:以其对简洁和速度的专注而闻名。然而,这种专注意味着它刻意缺少一些特性,如字体连字和对终端图形协议(如 Kitty 图形协议或 Sixel)的内置支持。
- Kitty:同样性能出色,但内置了更多功能,例如多路复用(类似 tmux)、各种「kittens」(辅助脚本)、连字支持,以及用于在终端中直接显示图像的自有图形协议。
为什么我选择了 Kitty
最终,Kitty 更符合我的需求:
- 跨平台:原生支持 macOS 和 Linux。
- GPU 加速:提供流畅、快速的体验。
- 支持连字:能正确渲染编程连字,且不牺牲 GPU 渲染。
- 支持图像协议:对于像
yazi(我重度使用的 TUI 文件管理器)这样直接在终端显示图片预览的工具来说至关重要。Alacritty 对此的缺乏对我来说是一个显著缺点。 - 基于文本的配置:使用简单的
kitty.conf文件,非常适合通过 dotfiles 进行管理。 - 可扩展性:提供标签页、窗口(多路复用)以及可编写脚本的「kittens」等特性。
虽然 Alacritty 的极简主义在理论上很吸引人,但 Kitty 更丰富的功能集在我的日常开发工作流中提供了更多实际好处,并且在我的使用中没有感受到明显的性能损失。
结论与配置
切换到 Kitty 的体验是积极的。它满足了我对跨平台、功能丰富且高性能终端的技术要求。迁移过程并非完全没有波折——例如,我不得不调整我的 powerlevel10k Zsh 主题设置,因为 Kitty 处理某些块元素的方式不同。我将来会写一篇文章来讨论这个问题。
对我的配置感兴趣的读者,可以在我的 dotfiles 仓库(暂不可用) 中找到完整的 Kitty 配置。
最后,正如其开发者因 Calibre 而闻名,并且他对猫科动物的喜爱也反映在项目名称中:Kitty 确实是一只好猫。
