Skip to content
Fluxo
Go back

Ghostty:一款面向claude code的终端

Edit page

我用了快五年的 iTerm2,一直觉得挺好。成熟,稳定,功能也够用。不是说 iTerm2 不行,而是说,用久了之后你会习惯它的一切,包括那些偶尔卡顿的瞬间,你也会觉得「嗯,大概就是这样了吧」。

直到前阵子在一个技术群里,好几个人同时在推荐一个叫 Ghostty 的终端。

不是那种「我发现了新大陆」式的兴奋,更像是一种「这东西终于有人认真做了」的语气,我就去装了一个。

brew install —cask ghostty,一行命令的事。打开之后第一眼,嗯,一个终端窗口。黑底白字,跟 iTerm2 没什么区别。

我当时还心想,就这?

但用了两天之后,我开始觉得有点意思了。

先聊聊终端这个东西本身吧。很多朋友可能不知道,我们每天打开的那个黑框框,到底是个什么存在。

它叫终端模拟器。模拟的是上世纪那种真正的物理终端,一个大显示器加一个键盘,连到大型机上用的。现在我们用的终端,其实是在图形界面里模拟那种字符终端的行为,让你能跑 shell,用 ssh,开 vim,敲 git 命令。

iTerm2 是终端模拟器。macOS 自带的 Terminal 也是。Ghostty 也是。

但 Ghostty 有点不一样。它不是哪个大厂出的产品,而是一个叫 Mitchell Hashimoto 的开发者在做的开源项目。这个人之前做过 Vagrant 和 Packer,在开发者工具圈子里算是老熟人。

他做 Ghostty 的出发点挺简单的。就是觉得,现有的终端模拟器,配不上现在的开发场景了。

你想想看。一个开发者,一天可能有八九个小时都泡在终端里。写代码,跑测试,看日志,ssh 到远程机器,用 tmux 管理会话。这个终端窗口,是你每天盯着看时间最长的界面之一,仅次于你的编辑器。

但大部分终端模拟器的发展,基本上处于停滞状态。

iTerm2 很好,但它的架构是很多年前设计的,后来不断往上堆功能。Kitty 很强,但主要在 Linux 上体验好。Alacritty 很快,但功能极简,得配 tmux 才能用。

Ghostty 想做的事,就是在现代图形性能和传统终端兼容性之间,找一个平衡点。

坦率的讲,我一开始对这个说法是持保留态度的。谁不想做平衡呢,但平衡这种事说起来容易做起来难。

不过用了几天之后,我的感受是,这玩意确实有点东西。

最直观的是滚动。在 iTerm2 里快速滚动几千行日志的时候,偶尔会有那种微妙的卡顿感。不是卡死,是你能感觉到渲染跟不上你的手速。Ghostty 里几乎没有。它用了 GPU 加速渲染,不是那种为了透明效果才用 GPU 的花架子,是真正用图形 API 来做文本渲染的。

就是那种,你平时不太注意,但一旦注意到了就回不去的体验。

说到 GPU 加速,可能有小伙伴纳闷,终端用 GPU 是不是杀鸡用牛刀。

我寻思了一下,好像还真是有道理。但仔细想想,终端真不是一直在干轻松的活。你快速滚动编译输出,好几个分屏同时在刷新,跑那种频繁更新的 CLI TUI 程序像 lazygit 和 k9s,这些场景下渲染压力是实打实的。如果渲染管线效率不够,输入延迟、滚动卡顿、窗口缩放不流畅,都会出来。

但这只是表象。Ghostty 真正下功夫的地方,在一些你看不到的地方。

终端模拟器这个产品类别,兼容性才是命根子。

你想啊,一个终端如果 ANSI 控制序列处理不对,宽字符对齐有问题,跟 tmux 配合出现错位,那它再快也没人会用。因为开发者每天依赖的那些工具,vim、ssh、htop、less,全都是建立在几十年来积累的终端协议之上的。几十年啊。VT100 的语义是 1978 年定义的,你现在用的终端还在兼容它。

Ghostty 在处理这些历史终端语义上花了不少功夫。ANSI 控制序列、光标移动、256 色、真彩色、Unicode 宽度、组合字符、Emoji 和 Nerd Font 图标、替代屏幕、鼠标上报模式。这些东西单独拿出来每个都不难,但合在一起就是无数边缘情况。

我自己还没遇到什么兼容性问题,但想想就觉得这东西的工作量挺吓人的。

愚钝如我,之前从来没想过一个终端要处理这么多东西。

有个细节挺有意思的。Ghostty 在中日韩字符显示这块做得不错。如果你是个中文用户,用过某些终端里光标错位、表格对不齐、prompt 抖动的痛苦,大概能理解我在说什么。中英文混排、Emoji 跟中文并列、Nerd Font 图标,这些东西看着简单,终端的字符宽度和字体 fallback 处理不好就容易翻车。

我装了个 JetBrainsMono Nerd Font 进去,中英文显示都挺舒服的。配置也很简单,建个配置文件,写一行 font-family 就完事了。

说到配置,这块 Ghostty 的思路我很认可。一个纯文本文件,key = value 的格式,一行一个设置。不像某些终端需要在 GUI 偏好设置和配置文件之间反复跳转。你可以把这个文件放到 dotfiles 里用 Git 管理,多台机器同步也方便。

我自己配了几项。字体、字号、背景色、几个快捷键。十来分钟就搞定了。

说真的,Ghostty 现在肯定还没法完全替代我的 iTerm2。我在 iTerm2 上攒了好多年的配置和工作习惯,迁移成本是实打实的。而且 iTerm2 有些功能 Ghostty 还没有,比如那种很细粒度的 session 管理。我非常理解那种「我的工具链已经跑起来了为什么要换」的心态,我自己也是这样。

但我觉得 Ghostty 代表了一个方向。

终端模拟器这个东西,长期以来被当成一个「能跑 shell 就行」的基础工具。但开发者对终端的需求早就不是这样了。它是编辑器的载体,是远程工作的入口,是日志观察台,是运维操作面板,是项目控制中心。

这让我想到一个挺有意思的事。我们对每天用的工具其实是有感情的,但大多数时候这种感情是隐形的。你不会觉得你的椅子有什么特别的,直到你换了一把人体工学椅坐了一周,再回去坐原来的椅子。

Ghostty 的尝试,是把这些需求放到一个统一、现代、高性能的终端体验里去解决。

它未必能成。开源项目嘛,谁知道呢。但至少有人在认真做这件事了,我觉得挺好的。

你如果也是终端重度用户,我建议你去装一个试试。brew install —cask ghostty,五分钟的事。不用替换你的主力终端,就放那儿偶尔用用,感受一下。

说不定你也会觉得有点意思。

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标。

谢谢你看我的文章,我们,下次再见。


Edit page
Share this post on:

Previous Post
How to configure AstroPaper theme
Next Post
Customizing AstroPaper theme color schemes