Ghostty 是一款 快速、功能丰富且原生 的终端模拟器。它旨在解决现有终端模拟器在速度、功能和原生 UI 之间进行选择的难题。Ghostty 力求在所有这三个方面都具有竞争力。

Ghostty 是什么?

Ghostty 是由 Mitchell Hashimoto 开发的一个个人项目,它是一个跨平台的终端模拟器,目前支持 macOS 和 Linux。其核心是一个名为 libghostty 的跨平台 C-ABI 兼容库,负责终端仿真、字体处理和渲染等核心功能。Ghostty 的 GUI 应用构建于 libghostty 之上,macOS 版本使用 Swift 和 AppKit/SwiftUI,Linux 版本使用 Zig 和 GTK4。

Ghostty 的特色功能

Ghostty 具有以下几个主要特点:

原生

Ghostty 被设计成在其各自的桌面环境中具有本地应用程序的外观、感觉和行为。它使用本地 UI 组件,例如 macOS 上的 AppKit 和 SwiftUI,以及 Linux 上的 GTK4。

  • 在 macOS 上,Ghostty 支持 Quick Look、Force Touch、macOS 安全输入 API 和内置窗口状态恢复等原生功能。
  • 在 Linux 上,Ghostty 使用 GTK4,这是最接近标准 GUI 工具包的。

功能丰富

Ghostty 提供了大量对日常使用有用的功能。

  • 终端功能:支持 Kitty 图形协议、明/暗模式通知和超链接等。
  • 应用程序功能:支持原生标签、拆分、macOS 上的下拉终端和系统明/暗模式下的主题切换等。

快速

Ghostty 的目标是达到最快终端模拟器的同等水平。虽然在某些基准测试中更快,而在其他测试中较慢,但 Ghostty 的速度不会让人感到缓慢。Ghostty 关注启动时间、滚动速度、I/O 吞吐量、控制序列吞吐量和帧速率等多个方面的性能。

libghostty

Ghostty 的核心是一个跨平台 C-ABI 兼容库,名为 libghostty。此架构实现了终端仿真和 GUI 之间的清晰分离。此架构允许其他终端仿真器项目构建在共享核心之上,从而促进了更多样化的终端仿真器生态系统。

更多功能亮点

  • 跨平台:支持 macOS 和 Linux,未来计划支持 Windows。
  • 窗口、标签和拆分:支持多个窗口,每个窗口都有自己的标签和拆分,所有这些都使用原生 UI 组件呈现。
  • GPU 加速渲染:macOS 上使用 Metal,Linux 上使用 OpenGL 进行终端屏幕渲染。
  • 主题:内置数百个主题,可以使用一行配置进行选择,并能根据系统明/暗模式自动切换,用户也可以创建自己的主题。
  • 连字:可以正确渲染具有连字的字体,并支持启用或禁用特定的字体功能。
  • 字形聚类:多代码点表情符号(如标志、肤色)被正确渲染为单个字符。
  • Kitty 图形协议:允许终端应用程序直接在终端中渲染图像。

macOS 平台原生特性

  • 快速终端:从菜单栏下方动画显示,可快速访问。
  • 原生标签、拆分等:使用原生的 macOS 组件。
  • 代理图标:在标题栏中拖动代理图标以移动或访问终端会话文件。
  • 快速查看:使用三指轻点或 Force Touch 来查看定义、网络搜索等。
  • 安全键盘输入:自动检测密码提示或手动启用安全键盘输入来保护密码。

如何安装 Ghostty?

macOS

  1. 从下载页面下载官方 macOS 二进制文件(.dmg 文件)。
  2. 打开 .dmg 文件,并将 Ghostty 应用程序拖到 “应用程序” 文件夹。
  3. 或者,使用 Homebrew Cask 安装:brew install --cask ghostty

Linux

Ghostty 项目不提供 Linux 的预构建二进制文件,但由各个发行版提供。下面是官方和社区维护的安装方法。

官方包

  • Arch Linux
    • 使用 pacman -S ghostty 安装最新版本。
    • 使用 yay -S ghostty-git 从 AUR 安装 main 分支的最新版本。
  • Gentoo:使用 emerge -av ghostty 安装。
  • Nix Flake:使用 packages.ghosttypackages.default
  • Void Linux:使用 xbps-install ghostty 安装。

社区包

  • Fedora:使用 dnf copr enable pgdev/ghosttydnf install ghostty 安装。

如果你的平台没有可用的包,则必须从源代码构建 Ghostty。

如何使用 Ghostty?Ghostty 的命令行用法

Ghostty 的命令行用法主要围绕如何启动终端模拟器以及如何通过命令行参数配置和执行特定操作。

启动 Ghostty

基本用法: 在没有指定 +action 的情况下运行 ghostty 命令,将会启动 Ghostty 终端模拟器。在 macOS 上,直接从命令行启动终端模拟器是不被支持的,只能使用命令行来执行特定的操作。安装成功后在应用程序中可以找到 Ghostty.app,通过图像界面启动。

可以使用 --key=value 的语法来设置配置选项,keyvalue 的格式与在配置文件中的格式相同。 例如:--font-size=12 或者 --font-family="Fira Code"

所有的配置键都可以在命令行中使用,要查看可用的配置选项,可以参考 src/config/Config.zig 文件。 未来版本将会支持从命令行查看可用的配置选项。

可用操作 (+action)

Ghostty 提供了多种操作,可以通过 ghostty +action 的方式来调用。以下是一些主要的操作:

  • +version: 显示 Ghostty 的版本信息。
  • +help: 显示帮助信息,可以结合具体操作使用 +<action> --help 来查看特定操作的帮助信息。
  • +list-fonts: 列出可用的字体。
  • +list-keybinds: 列出当前的快捷键绑定。
  • +list-themes: 列出可用的主题。
  • +list-colors: 列出可用的颜色。
  • +list-actions: 列出可用的操作。
  • +show-config: 显示当前使用的配置。
  • +validate-config: 验证当前的配置是否有效。
  • +crash-report: 生成崩溃报告。
  • +show-face: 显示字体信息。

相关阅读:Ghostty 默认快捷键列表

Ghostty 相比其他终端的优势

Ghostty 与其他终端模拟器的区别在于它同时关注速度、功能和原生 UI。许多其他终端模拟器往往只注重其中两项,而 Ghostty 则力求在所有三方面都具有竞争力。

Ghostty与其他终端的对比

此外,Ghostty 的架构也使其独具特色:

  • libghostty: 核心库 libghostty 将终端仿真与 GUI 分离,使其更易于维护和扩展。
  • 可共享的核心: libghostty 的目标是成为一个可供其他终端模拟器项目使用的共享核心,从而创建一个更加多样化的终端生态系统。

Ghostty 详细配置指南

Ghostty 使用基于文本的配置文件进行配置,默认情况下,Ghostty 可以在没有配置的情况下工作。

配置文件位置

配置文件 config 按以下顺序从这些位置加载:

  1. XDG 配置路径(所有平台):$XDG_CONFIG_HOME/ghostty/config,如果 XDG_CONFIG_HOME 未定义,则默认为 $HOME/.config/ghostty/config
  2. macOS 特定路径(仅限 macOS):$HOME/Library/Application\ Support/com.mitchellh.ghostty/config

如果两个位置都存在,则按上述顺序加载,后面文件中的冲突值会覆盖前面的值。

配置语法

Ghostty 使用自定义但非常简单的 key = value 语法。

  • 键区分大小写。例如,backgroundBackground 不同。Ghostty 始终使用小写键。
  • 值可以用引号引起来,也可以不引起来。例如,font-family = "JetBrains Mono"font-family = JetBrains Mono 相同。
  • 每个配置键都是从命令行启动 Ghostty 时的有效 CLI 标志。例如,可以使用 ghostty --background=282c34 设置 background 键。
  • 可以使用 ? 前缀使配置文件可选,例如:config-file = ?optional/config

主题配置

Ghostty 附带数百个内置主题,可以使用 theme 配置选项进行选择。例如,使用 Catppuccin 主题:theme = catppuccin-frappe

可以使用 +list-themes CLI 列出可用主题进行预览:ghostty +list-themes

Ghostty主题预览

Ghostty 还支持指定单独的明暗主题:theme = dark:catppuccin-frappe,light:catppuccin-latte

主题文件可以设置任何配置选项,例如光标样式、字体等。主题文件可以位于文件系统上的任何位置。 如果要按名称引用主题,则必须将它们放置在特定目录中:

  1. $XDG_CONFIG_HOME/ghostty/themes
  2. $PREFIX/share/ghostty/themes

主要配置选项

以下是一些常见的配置选项:

  • 字体font-familyfont-family-boldfont-family-italicfont-family-bold-italic 用于设置字体系列。可以使用 ghostty +list-fonts 查看有效的字体值。
    • 可以使用 font-style 配置禁用字体样式。
    • 可以使用 font-synthetic-style 配置启用或禁用合成样式。
    • 可以使用 font-feature 配置启用或禁用字体功能。
    • font-size 用于设置字体大小(以磅为单位)。
  • 主题theme 用于设置主题,可以指定内置主题、自定义主题的名称或自定义主题文件的绝对路径。
  • 光标cursor-style 用于设置光标样式(块、条、下划线、空心块)。cursor-style-blink 用于设置光标是否闪烁。
  • 窗口window-padding-xwindow-padding-y 用于设置窗口的水平和垂直内边距。window-vsync 用于设置是否启用垂直同步。window-inherit-working-directorywindow-inherit-font-size 用于设置新窗口是否继承工作目录和字体大小。
  • 命令command 用于设置要运行的命令(通常是 shell)。initial-command 用于设置第一次启动 Ghostty 时运行的命令。
  • 滚动scrollback-limit 用于设置滚动缓冲区的大小。
  • 键盘绑定:可以使用 keybind 选项自定义键盘绑定。 例如:keybind = ctrl+z=close_surface
    • 可以使用 all: 前缀将键盘绑定应用于所有终端表面。
    • 可以使用 global: 前缀使键盘绑定全局生效。 global: 前缀仅在 macOS 上可用,并且需要授予 Ghostty 辅助功能权限.
    • 可以使用 unconsumed: 前缀使键盘绑定不消耗输入。
    • 可以使用 > 字符指定触发序列。例如:keybind = ctrl+a>n=new_window。触发序列不允许用于 global:all: 前缀的触发器。
  • 其他配置:可以使用 link 配置匹配终端文本的正则表达式,并将点击操作与打开 URL 或文件等操作相关联。可以使用 background-opacity 配置背景透明度。可以使用 clipboard-readclipboard-write 配置是否允许程序读写系统剪贴板。可以使用 shell-integration 配置是否启用 shell 集成。

有关所有配置选项的完整列表,请参阅文档或运行 ghostty +show-config --default --docs

相关阅读:Ghostty 终端配置指南

重新加载配置

可以通过按 ctrl+shift+,(Linux)或 cmd+shift+,(macOS)重新加载配置。并非所有配置选项都可以在运行时重新加载。

Ghostty 的 Terminal API

Ghostty 提供了用于编写在 Ghostty 中运行的应用程序的 API。程序使用控制序列(也称为 VT 序列或转义代码)与终端进行交互。

  • 控制序列:用于移动光标、更改文本颜色、清除屏幕等。
  • 支持的控制序列类型
    • 控制字符
    • 转义序列
    • CSI 序列
    • DCS 序列
    • APC 序列
  • 光标:光标是下一个字符将被打印或执行位置敏感控制序列的行和列。光标初始状态位于屏幕的左上角。
  • 转义序列格式: 以 0x1B 开头,后跟中间字符和最终字符。 例如:ESC D
  • CSI 序列格式:以 0x1B[ 开头,后跟参数、中间字符和最终字符。例如:ESC [ 1 ; 2 m

以下是一些常用的 VT 序列:

  • BEL (0x07):发出哔声。
  • BS (0x08):将光标向后移动一个位置。
  • TAB (0x09):将光标向右移动到下一个制表位。
  • LF (0x0A):将光标向下移动一行。
  • CR (0x0D):将光标移动到左边距。
  • DECSC (ESC 7): 保存光标。
  • DECRC (ESC 8): 恢复光标。
  • CUP (CSI Py ; Px H): 将光标移动到指定行和列。
  • ED (CSI Pn J): 擦除显示。
  • EL (CSI Pn K): 擦除行。

有关 Ghostty 支持的所有 VT 序列的完整列表,请参阅参考文档

总结

Ghostty 是一款功能强大、速度快、高度可定制的终端模拟器。它旨在为用户提供最佳的终端体验,并为开发者提供强大的工具。如果你正在寻找一款现代化的终端模拟器,Ghostty 绝对值得一试。


也可以看看