Mac 有 8 个应该能好好朗读的文本编辑器。这是让它们都变成「可听」的方案。
我在 Mac 上写很多东西 —— BBEdit 里的代码、Stickies 里的草稿、备忘录里的会议记录、一小时后要回头翻的 Terminal 输出。每个 App 都有同一个小毛病:你选中文字,按 Option-Escape,macOS 开始读。一个机械的嗓音,没有停顿,没有高亮,不能变速也不能倒退,播放一开始你的眼睛就无处可放。走神。漏掉你最在意的那一行。再抬头看屏幕,已经找不到读到哪里了。这个问题 macOS 有二十年了,苹果没修过。
这篇是在 Mac 上每一个原生编辑器里都把它修好的指南 —— 八个 App,免费,一次安装。
为什么是 8 个?Mac 为什么一直做不好这件事?
你可以说大多数 Mac 用户一辈子就打开过一次 TextEdit。可以。但如果你是写作者、研究者、开发者,你一天的工作大概散落在四五个文本界面上。我认识的一个文学译者用 CotEditor 写初稿,因为它启动不到一秒。我认识的一个会计师桌面上挂着三百张 Stickies,全是客户信息。我自己 TextMate 写 Ruby、Terminal 跑 shell、BBEdit 写长文、Script Editor 里有一个 2019 年写到现在还在维护的 AppleScript,负责把博客草稿备份到 iCloud。每个 App 都在处理文字。每个 App 的朗读体验都同样糟糕。
macOS 提供了一个 AX API —— 辅助功能 API,让辅助类 App 读取任意其他 App 的选中文字。VoiceOver 就是这么工作的。CastReader 用的是同样的底层,但目的不同:不是读整个屏幕,而是只读你关心的选区,逐字高亮同步滑过你真实的文档窗口。同样的水管,不一样的用法。
下面按应用分述每个编辑器,以及朗读真正能解锁的工作流。
TextEdit —— 没人真正用好的默认编辑器
TextEdit 是 macOS 自带的文本编辑器。大多数人一辈子就打开它一次,确认一个文件是不是纯文本,然后再也不用。但如果你写 RTF 信件、临时便笺,或者就想粘贴文字去格式,TextEdit 是最快的路径。听一遍自己写的信能抓到再读十遍都发现不了的语气问题 —— 你在两段里写了三遍「希望一切顺利」,眼睛扫过去完全没感觉。耳朵会。
选中正文,点选区旁边浮出的 ▶ 按钮,高亮会在真实的 TextEdit 窗口里逐字滑动。完整说明在 TextEdit 朗读。
Stickies —— 小字号、大隐藏档案库
我桌面上现在挂着 47 张 Stickies。大部分是 2024 年的菜单清单,但里面还有几个我现在还要用的电话号码,以及一段我当时想背下来的书里的话。Stickies 默认字号是 10 点,眼睛十五岁的人没事,其他人都得眯着看。听一张便签比眯眼看一张便签轻松得多。
Stickies 特别适合音频化,因为内容通常短、直接、指令性强。早上边煮咖啡边免动手过一遍待办清单。这个 App 的朗读说明在 Stickies 朗读。
苹果备忘录 —— 什么都往里放的那个 App
备忘录已经变成大多数 Mac 用户实际思考的地方。扫描的收据、菜谱步骤、会议记录、书里的摘录、清单、密码提示、一封没发出去的道歉草稿 —— 它现在是 Mac 上的通用草稿纸。苹果偏偏没有在 Mac 上为它做逐字朗读 —— iOS 上做了。
如果你在会议间隙的走廊里曾经希望快速过一遍早上随手记的项目笔记,那就是这个功能的目标场景。选中一段,点 ▶,走路时听。详细说明在 苹果备忘录朗读。
Script Editor —— AppleScript 本来就是为朗读生的
AppleScript 的语法本身就接近英语 —— tell application "Finder" to make new folder at desktop with properties {name:"Archive"}。写得好的 AppleScript 用自然人声读出来真的像一段散文。这意味着 bug 会凸显出来。拼错的 handler 名听起来不对。缺了参数的句子会在半空断掉。这是整个列表里被低估最多的一个场景。
详细说明:Script Editor 朗读。JavaScript for Automation (JXA) 也一样 —— 在 Script Editor 里它只是另一种文本模式。
BBEdit —— 严肃的 Mac 编辑器
BBEdit 是 Mac 上的专业文本编辑器。能打开 VS Code 会崩的文件。处理 G 级别的日志面不改色。1992 年就存在了,Bare Bones Software 一直是马萨诸塞州一个小团队在做,那种仔细劲在今天越来越少见。BBEdit 一直有严肃作者或开发者需要的所有功能 —— 就是没一个像样的朗读。
对用 BBEdit 做长文初稿环境的写作者(很多),听能抓到重复。「这篇文章有五段都在换种说法讲同一件事」是耳朵能发现、眼睛发现不了的。对开发者,提交前听一遍函数加头部注释,比再读一遍一堵语法墙快得多。完整指南:BBEdit 朗读。
CotEditor —— 安静的那个开源编辑器
CotEditor 是一个在日本起家的开源项目,在本土市场之外没怎么火起来,但值得被更多人用。启动瞬间完成。UI 干净。你扔给它的任何文本编码它都能处理 —— 这对要处理 2008 年在 Windows 上保存过的文件的人来说很重要。没有广告、没有账号、没有遥测。整个理念是「做好一件事,一直做」。
CastReader 和这个理念很契合 —— 没账号、免费、本地。选区朗读和 BBEdit 工作方式一样,因为两个 App 都渲染标准的 NSTextView 内容。见 CotEditor 朗读。
TextMate —— 经典的 Ruby 编辑器
TextMate 1 是 Ruby on Rails 当年的开发环境。字面意义上的 —— 你能找到 DHH 当年演示 Rails 的录像,屏幕上用的就是 TextMate。TextMate 2 现在是 GPL 开源,还在被一群特定的开发者坚守 —— 他们没有切到 Sublime、VS Code 或 Cursor。它的 bundle 系统无人能及,Command-T 模糊查找是后面所有编辑器在抄的对象。
听 Ruby 或 Python 代码的注释,对音频 code review 特别合适 —— 尤其是超过 40 行的长函数,眼睛读到 40 行就开始恍惚。选区 API 在 TextMate 1 和 TextMate 2 上都工作。完整页在 TextMate 朗读。
Terminal —— 最意外的那个
这是我个人用得最多的一个。kubectl describe 吐三屏 YAML,或者跑单元测试吐 60 行 stack trace,我不想读。我想一边伸懒腰一边听,或者一边想这个 test 究竟是它错了还是我的代码错了,一边听。Terminal.app 把 scroll-back 缓冲区也暴露给了 AX API,这意味着选区朗读在那里也能干净工作。
一个前提:这里指的是苹果自带的 Terminal。iTerm2 和 Warp 有自己的文本渲染引擎,暂时不走同一条 AX 路径。这件事已经和两个团队提过功能请求。目前 Mac 上音频化 shell 输出的复盘还是在 Terminal.app 上做。指南:Terminal 朗读。
一个 App,八个编辑器,三步
下载 CastReader for Mac。弹出辅助功能授权时点允许 —— 这一步就同时解锁了全部八个编辑器,因为它们共用 macOS 的同一套 AX 水管。在任意一个里选中文字,点选区旁边浮出的小 ▶,开始听。同样的手势、同样的高亮行为、同样的语音选择器,贯穿你全部的文本工作流。没有别的要配置。
变速控件在浮动播放器上 —— 技术内容 0.5× 慢慢啃,随便看看的 1.5× 扫过去。点任意段跳到该处播放。换语言就换语音,中途切也行。辅助功能权限一次性授权。App 永久免费 —— 无账号、无订阅、无日限额。如果你之前一直在付 Speechify 一年上千块读网页,这是你编辑器侧工作流的直接平替。
往大了说,macOS 十多年前就把水管架好了。苹果只是一直没把体验做好。八个不同的编辑器,一个缺失的功能,一天的工作量就能把它补齐。这就是这个项目的起点。看 CastReader for Mac 获取完整功能列表,或点开上面任意一个编辑器页面看针对那个编辑器的详细走查。