我目前在用哪款终端模拟器?(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 加速的选项,主要是 KittyAlacritty

评估替代品:Kitty vs. Alacritty

Kitty 和 Alacritty 都是流行且性能优异的终端,利用了 GPU 加速。它们也都因其维护者观点鲜明而闻名(Kitty 的 Kovid Goyal,也因 Calibre 闻名;Alacritty 团队则专注于极简主义,有时被认为固执)。

  • Alacritty:以其对简洁和速度的专注而闻名。然而,这种专注意味着它刻意缺少一些特性,如字体连字和对终端图形协议(如 Kitty 图形协议或 Sixel)的内置支持。
  • Kitty:同样性能出色,但内置了更多功能,例如多路复用(类似 tmux)、各种「kittens」(辅助脚本)、连字支持,以及用于在终端中直接显示图像的自有图形协议。

为什么我选择了 Kitty

最终,Kitty 更符合我的需求:

  1. 跨平台:原生支持 macOS 和 Linux。
  2. GPU 加速:提供流畅、快速的体验。
  3. 支持连字:能正确渲染编程连字,且不牺牲 GPU 渲染。
  4. 支持图像协议:对于像 yazi(我重度使用的 TUI 文件管理器)这样直接在终端显示图片预览的工具来说至关重要。Alacritty 对此的缺乏对我来说是一个显著缺点。
  5. 基于文本的配置:使用简单的 kitty.conf 文件,非常适合通过 dotfiles 进行管理。
  6. 可扩展性:提供标签页、窗口(多路复用)以及可编写脚本的「kittens」等特性。

虽然 Alacritty 的极简主义在理论上很吸引人,但 Kitty 更丰富的功能集在我的日常开发工作流中提供了更多实际好处,并且在我的使用中没有感受到明显的性能损失。

结论与配置

切换到 Kitty 的体验是积极的。它满足了我对跨平台、功能丰富且高性能终端的技术要求。迁移过程并非完全没有波折——例如,我不得不调整我的 powerlevel10k Zsh 主题设置,因为 Kitty 处理某些块元素的方式不同。我将来会写一篇文章来讨论这个问题。

对我的配置感兴趣的读者,可以在我的 dotfiles 仓库(暂不可用) 中找到完整的 Kitty 配置。

最后,正如其开发者因 Calibre 而闻名,并且他对猫科动物的喜爱也反映在项目名称中:Kitty 确实是一只好猫。

![Kitty](https://img.eigenigma.io/what-terminal-emulator-am-i-using-in-2024/kitty.app.png)