新一代终端工具ghostty简介

推荐词

已经用了一段时间了,足够简单,还好看

原文

本文由 简悦 SimpRead 转码, 原文地址 zerorust.cn

深入解析新兴终端模拟器 Ghostty 的特点与优势,包括其性能、原生功能、与 Kitty 的对比分析,以及未来发展方向,帮助开发者了解这款新型终端工具。

Ghostty 1.0 近日发布了,引起了国内外开发者群体的广泛讨论,这是一款用 zig 语言开发的跨平台终端模拟器。

这个名字由 ghost(幽灵、鬼) 和 tty(终端的通常写法) 两个单词组合而成,巧妙地省略了一个中间重复的”t”。

作为终端领域的新玩家,它号称要成为 macOS 和 Linux 上最佳的终端模拟器,它有什么过人之处呢?

Ghostty 是什么?

Ghostty 是一款用 Zig 语言编写的终端模拟器,由 HashiCorp 的创始人 Mitchell Hashimoto 开发。

它的设计目标是在 macOS 和 Linux 上提供快速、功能丰富、平台原生的终端体验,并且未来还计划支持 Windows。

Ghostty 的功能亮点

Ghostty 的功能可以分为两大类:针对最终用户的功能针对终端应用开发者的功能

针对最终用户的功能

  • 多窗口、选项卡和分割:Ghostty 支持多个窗口,每个窗口都有自己的选项卡和分割,使用原生 UI 组件呈现,操作更加流畅。
  • GPU 加速渲染:在 macOS 上使用 Metal,在 Linux 上使用 OpenGL,确保终端屏幕的渲染速度更快。
  • 主题支持:Ghostty 内置数百个主题,用户可以根据系统暗 / 亮模式自动切换主题,甚至可以自定义主题。
  • 连字和字素聚类:支持连字字体,并能正确显示多码点表情符号(如旗帜、肤色等),某些语言(如阿拉伯语和希伯来语)也能正确显示。
  • Kitty 图形协议:支持 Kitty 图形协议,允许终端应用程序直接在终端中渲染图像。

针对终端应用开发者的功能

  • Kitty 键盘协议:支持 Kitty 键盘协议,提供更丰富的输入体验。
  • 同步渲染:确保终端应用程序的渲染更加流畅。
  • 亮 / 暗模式通知:终端应用程序可以根据系统模式自动切换亮 / 暗主题。

Ghostty 的平台原生功能

Ghostty 的一个主要设计目标是让其外观、感觉和行为都像每个平台上专门构建的原生应用程序。以下是 Ghostty 在 macOS 上的一些原生功能:

  • 快速终端:轻量级终端,可以在菜单栏下方动画显示,快速访问而不中断工作。
  • 原生选项卡和分割:使用 macOS 的原生 UI 组件,而不是自定义绘制的文本。
  • 代理图标:拖动标题栏中的代理图标可以移动或访问终端会话文件。
  • 安全键盘输入:自动检测密码提示或手动启用安全键盘输入,保护密码不被其他进程窃取。

性能表现

Ghostty 在性能方面做了大量优化

  • 默认进行垂直同步,支持可变刷新率
  • 智能选择集成 GPU 而非独立显卡,更省电
  • 针对电池续航进行了优化
  • 窗口被遮挡时会降低渲染速度,更省电

与现有终端的对比

Ghostty 的作者提到,目前主流的终端模拟器各有优劣:

  • Alacritty: 速度快但功能较少,非平台原生 GUI
  • Kitty: 速度快功能多,但非平台原生 GUI
  • iTerm2: 功能丰富且是平台原生,但速度较慢且不支持 Linux

Ghostty 试图在这些方面取得平衡,提供一个速度快、功能齐全且具有原生体验的终端模拟器。

技术特色

Ghostty 使用 Zig 语言开发,这也是一个值得关注的亮点,zig 是性能表现不逊色于 rust 的系统级编程语言。

继 Bun 之后,Ghostty 成为又一个使用 Zig 开发且广受关注的项目,显示出 Zig 语言在系统软件开发领域的潜力。

Ghostty 的远大愿景

Ghostty 不仅仅是一个终端模拟器,它还有更远大的计划。未来,Ghostty 将在两个主要领域进行扩展:

  1. libghostty:这是 Ghostty 的核心跨平台库,目标是允许开发者在各种平台上构建多样化的终端仿真器应用程序,包括专用应用程序、编辑器中的嵌入式终端、通过 WebAssembly 支持基于 Web 的终端等。

  2. 终端应用程序功能扩展:Ghostty 计划引入更多现代功能,如提高转义序列的安全性、支持更多现代输入方法(如触摸手势、动量滚动等),以及允许终端应用程序提供本机上下文菜单等。

Ghostty 的财务和可持续性

Ghostty 是一个开源项目,采用 MIT 许可证发布。开发者 Mitchell Hashimoto 表示,Ghostty 是一个充满激情的项目,他没有任何计划将其商业化。他希望通过非营利结构确保 Ghostty 的长期可持续性,并为贡献者提供补偿。

个人观点

与 kitty 的对比

上图中,上面是 kitty,下面是 ghostty。

作为一个长期的 Kitty 用户,我认为 Ghostty 确实带来了一些令人期待的改进。

比如在 Linux 上,Kitty 曾经存在输入中文的问题 (新版本已修复),而 Ghostty 使用系统原生 GUI 应该不会有这个问题。

另外,随着 Linux 桌面从 X11 向 Wayland 迁移,终端模拟器的 Wayland 支持变得越来越重要。Kitty 在这方面还有一些小问题,希望 Ghostty 能在这个方面有更好的表现。

还有,kitty 的作者明确表示不会支持 windows(但可以通过 wslg 的方式运行),因为 kitty 使用了很多 unix 平台特有的 api,而 Ghostty 未来计划支持 windows,考虑到 windows 平台巨大的用户数量,这也是一个很大的优势。

缺失的 AI

在当前 AI 大热的背景下,终端领域也出现了一些集成 AI 功能的产品,比如 Warp 终端就主打 AI 辅助功能,能够:

  • 解释命令的作用和参数含义
  • 根据自然语言生成命令
  • 帮助调试和解决错误
  • 提供智能命令历史搜索

相比之下,Ghostty 目前还没有任何 AI 相关的功能。这种取舍反映了不同的产品理念:

  1. 专注与取舍:Ghostty 选择专注于终端模拟器的核心功能 - 性能、兼容性和原生体验,而不是追随 AI 潮流。这种专注可能有助于保持软件的简洁性和稳定性。

  2. 成本和依赖:AI 功能通常需要依赖外部服务,这可能带来额外的成本和隐私考虑。Ghostty 的完全本地化运行方式可能更符合某些用户的需求。

  3. 用户群体差异:Warp 等集成 AI 的终端更多地针对需要 AI 辅助的初学者和中级用户,而 Ghostty 似乎更倾向于服务那些更注重性能和原生体验的专业用户。

虽然缺少 AI 功能可能会让 Ghostty 在当前趋势下显得有些保守,但这也许恰恰体现了它对终端本质的坚持。对于那些更看重终端性能和原生体验的用户来说,这反而可能是一个优势。

结语

Ghostty 的出现为终端用户和开发者带来了新的选择。虽然目前还需要时间检验,但其快速、功能丰富、平台原生的特点确实很吸引人。对于经常使用终端的开发者来说,不妨关注一下这个新玩家。

原文链接

原文

在 Linux 上我使用 [[Guake]],到后来换成 macOS 之后使用 Kitty,直到前段时间更换成 Warp,但是没想到这几天又发现一款不错的终端 Ghostty。没查不知道,但是一查之后才发现 Ghostty 背后的作者的故事是多么精彩,并且 Ghostty 使用的 Zig 语言也是我第一次听说。

Ghostty 由著名的开发者 Mitchell Hashimoto(HashiCorp 联合创始人)使用 Zig 语言编写的一款终端模拟器,在速度,功能性方面都有不错的优势。

Ghostty 目标是成为一个更快,功能更丰富的下一代终端应用,它不仅支持 GPU 加速,macOS 上使用 SwiftUI 构建,Linux 基于 GTK 构建,还内置了很多现代化的功能,在性能和易用性之间找到了一个平衡点。

Mitchell Hashimoto

再进一步介绍 Ghostty 之前,我想先隆重介绍一下其作者 Mitchell Hashimoto。如果你在 DevOps,云计算以及软件开发领域工作,那么你一定对 Vagrant,Terraform,Packer 等等工具非常熟悉,而 Mitchell Hashimoto 就是这些作者背后的核心贡献者,他很早就热衷于编程,并且利用自己对这些技术的使用创办了 HashiCorp,极大地推动了云计算和基础设施自动化发展,深刻地改变了现代基础设施管理的构建和管理。

  • Vagrant,用于构建和管理虚拟化开发环境的工具 极大的简化了开发环境的配置和共享
  • Packer,用于创建相同机器镜像的自动化工具
  • Terraform,「基础设施及代码」IaC 的工具,让我们可以用代码来定义和管理云资源

Mitchell Hashimoto 曾担任公司 CEO 和 CTO,但最终选择回归代码,宣布了 Ghostty 终端的诞生。

简单来说,Ghostty 是一个跨平台的、使用 GPU 加速的现代化终端模拟器。它的核心优势在于:

  • 卓越的性能:和 Alacritty 一样,Ghostty 利用 GPU 进行渲染,确保了极低的延迟和高吞吐量,即使在处理大量输出时也能保持流畅。利用现代图形 API,将渲染任务交给 GPU,无论是快速滚动,复杂文本输出,还是运行 htop 这样实时更新的命令,Ghostty 都可以提供非常顺滑的使用体验
  • 丰富的功能:与 Alacritty 的极简主义不同,Ghostty 在保持高性能的同时,内置了许多开发者需要的功能,比如窗口/标签页管理(Multiplexing)、主题系统等。内置了终端多路复用,可以作为 Tmux 的一个代替,内置的原生窗口,标签页,Panes 等等,可以通过快捷键切换。
  • 现代化设计:Ghostty 在设计上考虑了许多现代化的使用场景,并致力于解决传统终端在交互和安全性上的一些痛点。支持 True Color,24-bit 真彩色,字体连字(Ligatures)支持,图像协议支持,超链接支持,支持数百款主题
  • 强大的可配置选项和主题支持,可以根据自己的使用习惯深度定制,从字体到颜色,到快捷键等等。Ghostty 已经拥有非常活跃的社区,大量的用户分享了自己的配置和主题。Ghostty 使用纯文本的配置选项,可以在 TOML 格式中完成配置

Ghostty 的目标是解决现有终端模拟器在性能,功能,稳定性和跨平台一致性方面的痛点,虽然 Ghostty 目前还在快速迭代和开发过程中,但是从 Mitchell 分享的内容和项目目标中可以看到 Ghostty 的一些核心特性和设计哲学。

安装

macOS 上可以使用如下的命令

brew install --cask ghostty

Ghostty 主要通过一个纯文本配置文件来自定义,这对于熟悉 Linux 环境喜欢通过文本编辑器来配置的用户来说(比如说)非常友好,并且可以通过 dotfiles 来管理我的配置。

使用

配置文件路径

首次启动之后配置文件会在如下的位置。

  • Linux – $HOME/.config/ghostty/config
  • macOS – $HOME/Library/Application\ Support/com.mitchellh.ghostty/config

配置文件使用键值对格式。

font-family = "Monaco"

记得编辑配置文件之后,在 Ghostty 中重新加载一下配置。在 Ghostty 菜单中「Reload Configuration」。

颜色和主题

背景和前景色

background = #ff66ccforeground = #000000

主题

Ghostty 内置了上百个主题。你可以使用 ghostty +list-themes 命令列出所有可用主题,这个命令会给出每个主题外观的预览

theme = GruvboxDark

字体配置

Ghostty 提供了丰富的字体配置选项。

  • font-family:设置首选字体系列。可以多次指定,用于字符回退
  • font-family-bold, font-family-italic, font-family-bold-italic:分别设置粗体、斜体和粗斜体的字体系列
  • font-style, font-style-bold, font-style-italic, font-style-bold-italic:指定用于终端字体样式的命名字体样式,例如 “Iosevka Heavy” 的样式为 “Heavy”。可以将值设为 false 来禁用特定样式
  • font-synthetic-style:控制是否合成字体样式(粗体、斜体、粗斜体)。可以设为 truefalse,或使用 “no-bold”, “no-italic” 等禁用特定合成样式
  • font-feature:应用字体特性,例如 ss20-ss20(禁用)。要禁用编程连字 (ligatures),可以使用 -calt
  • font-size:设置字体大小(以磅为单位),支持非整数值
  • font-variation, font-variation-bold, font-variation-italic, font-variation-bold-italic:为可变字体设置字体变体值,格式为 id=value,例如 wght=700

要列出系统上可用的字体,可以使用命令 ghostty +list-fonts

快捷键

可以自定义键盘快捷键来执行特定操作。例如,创建一个快捷键 Ctrl+d 将当前 Ghostty 窗口向右分割成两个窗格

keybind = ctrl+d=new_split:right

Ghostty 还支持许多其他配置,涵盖鼠标和剪贴板行为、终端行为、启动会话等。例如,可以通过创建会话文件并使用 --session 命令行标志来控制启动时的标签页、窗口布局、工作目录和启动程序。

完整的配置选项列表可以在 Ghostty 的官方文档或相关配置指南中找到。

使用

配置快捷键 Ctrl+D 分割窗口

keybind = ctrl+d=new_split:right

自定义主题

列出主题

ghostty +list-themes

在配置文件中使用

theme = Unikitty

可以配置将 Ghostty 窗口和内容使用相同的主题色

window-theme = ghostty

Ghostty 的出现,为我们这些追求极致效率的开发者提供了又一个新的选择。它不仅仅是一个简单的终端模拟器,更像是一个现代化的开发工作台。它融合了 Alacritty 的速度和 Kitty 的功能,并在此基础上进行了创新和优化。

虽然 Ghostty 还很年轻,但凭借其出色的设计理念、强大的性能和活跃的社区,我相信它有潜力成为未来终端模拟器领域的有力竞争者。如果你正在寻找一款新的终端工具,不妨给 Ghostty 一个机会,或许它会给你带来意想不到的惊喜。

  • [[Guake]]
  • [[Kitty]]
  • [[wezterm-terminal]]
  • [[Alacritty 终端]]
  • [[Mac 应用 iTerm2]]
  • [[Warp]]