看到这个标题,我第一反应是想转给几个还在纠结"要不要买 CleanShot X"的朋友。说实话,macOS 上从来不缺效率工具,但缺的是"功能够用、免费开源、不膈应人"的那一款。标题里说的 Snipaste、Kap、ColorSlurp、XtraFinder 我基本都用过,它们各自都算得上某条赛道里的好手,但要凑齐截图标注、录屏、取色、Finder 增强、OCR 翻译、二维码识别、屏幕测距这一整套,你至少得装四五个软件,还要忍受不同软件的快捷键逻辑、更新节奏和授权方式。
我自己组装这套"全免费开源方案"已经跑了两个月,期间把截图、取色、翻译、扫码、量尺寸这些高频操作全部收到几个全局快捷键下面。这篇文章就把我的完整选型、配置步骤、踩坑记录都放出来。如果你是 macOS 用户、效率工具爱好者,或者单纯不想再给商业软件交订阅费,这篇应该能帮你省下不少折腾时间。
1. 先拆解需求:"神器"到底要解决什么问题
1.1 从四个软件的名字说起
先说标题里被"干翻"的四个工具,它们各自解决什么问题。
Snipaste 在 Windows 上确实是截图标注神器,但 macOS 版本有个很现实的问题:它不是免费的,体验也远没有 Windows 版顺手。核心痛点在于"截图后随手把图钉在屏幕上"这个操作,macOS 上很多截图工具做了功能但做得不干脆。
Kap 是 macOS 上比较出名的开源录屏工具,本身免费,支持导出 GIF 和 MP4。它的问题不是收费,而是定位太单一——它只管录屏,不负责截图、取色这些邻域功能。
ColorSlurp 的取色功能做得很漂亮,支持多种颜色格式、放大镜、历史记录,但它同样只解决"取色"这一个问题,而且部分高级功能要付费解锁。
XtraFinder 是很多老 macOS 用户的 Finder 增强首选,但项目更新比较慢,在新系统上偶尔会出现兼容性问题。它最吸引人的双窗口模式、标签页增强、多彩标签等功能,现在 macOS 原生 Finder 已经吸收了一部分,加上一些开源小工具,完全能替代。
这四个工具分开看都挺好,但"装四五个软件管理四五个快捷键"这件事本身就够让人心累的,更别说有些还是付费软件。这就是标题里"一款神器全干翻"这个愿望的现实基础。
1.2 为什么我用"开源组合拳"而不是等一个全能 App
坦白说,我把 GitHub 翻了一圈,macOS 上目前没有一个完全开源、且同时搞定截图、录屏、取色、Finder 增强、OCR 翻译、二维码识别、屏幕测距的单体应用。与其等一个不存在的"瑞士军刀",不如用一套开源工具把它拼出来。
这个思路有点像做饭:全家桶 App 是预制菜,一顿饭全给你配齐,但口味固定、不能替换;开源组合是买菜自己炒,每样食材都可以换成你更喜欢的。我最终选的这套组合,日常使用中几乎感受不到"这是一个拼装方案",因为所有高频操作都被 Hammerspoon 统一收口到少量快捷键上,体感就是"一个神器"。
这个方案的好处有三个:一是全部免费且开源,所有代码你都看得到,不用担心后门或埋点;二是每块都能独立替换,比如你不喜欢 Flameshot 可以换别的截图工具,不影响其他部分;三是可折腾空间大,我自己就是靠 Hammerspoon 把屏幕测距这个"没有开源现成方案"的需求给补上了,体验还比很多商业软件更顺手。
1.3 整体方案一览
这是我最终固定下来的选型表,后面的安装配置都会围绕这几项展开。
| 功能需求 | 开源工具 | 主要能力 | 对应的商业/闭源替代 |
|---|---|---|---|
| 截图、标注、钉图 | Flameshot | 区域截图、箭头/马赛克/文本标注、贴图到屏幕 | Snipaste、CleanShot X |
| 录屏、导出 GIF/MP4 | Kap | 区域/窗口录制、GIF 导出、快捷剪辑 | ScreenFlow, CleanShot X |
| 取色、格式化颜色值 | Pika | 屏幕取色、多格式复制、放大镜 | ColorSlurp |
| Finder 增强 | OpenInTerminal + Finder 原生设置 | 当前目录打开终端/编辑器、标签页增强 | XtraFinder, Path Finder |
| OCR 翻译 | Easydict | 截图 OCR、划词、多翻译源 | Bob、TextSniper |
| 二维码识别 | zbarimg + Automator | 快捷操作识别图片二维码 | iShot 的扫码功能 |
| 屏幕测距 | Hammerspoon 脚本 | 屏幕上测量两点距离、显示 dx/dy | Xnip 的尺子功能 |
这套方案选完后,我只有一个额外的要求:把它们的"入口"统一。这个工作在后面第 3 部分专门讲。
2. 七件套逐个装齐:安装、配置、上手技巧
2.1 截图与标注:让 Flameshot 扛起 Snipaste 的旗
Flameshot 是个跨平台开源截图工具,我一开始对它没抱太大期望,毕竟macOS上能"能用"的跨平台截图工具不多。但实际用下来,它的核心体验和 Snipaste 非常接近,尤其是在"钉图"这个操作上。
安装很简单:
brew install --cask flameshot装完第一次运行会提示需要"屏幕录制"权限,这个权限是 macOS 所有截图工具都绕不开的。去"系统设置 → 隐私与安全性 → 屏幕录制"里勾选 Flameshot 就行。如果之后截图黑屏,十有八九是权限没给全。
Flameshot 的默认调用方式比较直接:打开 App 后它会出现在菜单栏,你可以自己设置快捷键,也可以在终端里用命令触发。我建议直接用 Hammerspoon 绑定一个快捷键来调用flameshot gui,这样触发方式是完全可控的。
截图后你会看到一个工具栏,里面没有乱七八糟的滤镜特效,就是干活用的:矩形框选、椭圆、箭头、画笔、马赛克、文本、高亮,以及右下角的"钉住"按钮。
钉图是这个方案替代 Snipaste 的关键:截完图不需要保存文件,点一下"钉住"按钮,图像就直接贴在桌面最上层,可以多张同时钉着,适合做方案对比、临时参考。如果不需要了,按 Esc 或者点击图的关闭按钮就行。
2.2 录屏与 GIF:Kap 本来就是"友军"
标题里说把 Kap 也"干翻",但说实话,Kap 本身就是开源免费的,我们截屏上传的时候保留它比替换它更划算。你可能会问:"既然是免费开源,为什么不算进方案里?" 对,我也这么想,所以直接把 Kap 作为这套方案的录屏模块。
安装:
brew install --cask kapKap 的界面很轻,打开后就是一个很小的控制条,可以选择录制整个屏幕、选中窗口、或者手动拖拽一个区域。点下录制按钮,它会在右上角菜单栏显示一个跳动的小红点,再点一下结束。
Kap 最让我喜欢的是它输出 GIF 的能力。以前做技术演示、写文档配图时,我还用 ffmpeg 把视频转成 GIF,KAP 直接把整个流程做成了"录制 → 预览 → 导出 GIF/MP4/WebM",导出前还能调整帧率、缩放尺寸、是否循环。以前要给公众号文章配一张动图,从录到导可能要十分钟,现在 Kap 里三十秒搞定。
一个小坑:Kap 默认导出的 GIF 如果帧率保持 30fps,文件会比较大。建议录制屏幕操作类内容时,导出设置里把帧率降到 15fps,尺寸缩到 50% 或 75%,文件体积能下降一大半,观感基本不受影响。
2.3 取色:Pika,开源界最好看的取色器之一
取色这件事,很多截图工具也能"顺便做一下",但做得专业的不多。Pika 是一个开源 macOS 取色器,界面颜值在线,功能也足够。
安装:
brew install --cask pika启动后在菜单栏点它,屏幕上会出现一个带放大镜的取色面板。鼠标滑到任何位置,放大镜区域会放大像素,键盘上下左右键可以逐像素微调颜色选择目标,点击即可锁定当前颜色。
Pika 的亮点是颜色格式支持非常全:HEX、RGB、HSL、UIColor、NSColor,还有 SwiftUI 的 Color 格式。对于写代码、做设计稿的人很方便。默认复制格式是 HEX,可以在设置里换成自己常用的格式,我一般会设成"HEX + RGB"两个一起复制,方便贴到设计文件和注释里。
取色历史记录也很好用,它会保留最近取过的颜色,你可以在面板底部看到一排色块,点一下就能重新复制。
如果你要精确到像素的取色,注意先把 macOS 的"显示缩放"关掉。如果在带 Retina 屏的 Mac 上开着缩放,取到的坐标和实际像素会有换算偏差,具体表现是取色位置总差那么两三个像素。
2.4 Finder 增强:OpenInTerminal + 原生设置,补上 XtraFinder 常用的 70%
XtraFinder 的作用曾经是解决 Finder "难用"的问题。到了现在的 macOS,Finder 已经有标签页、多窗口、快速查看等功能,大部分文件管理场景并不需要额外加"双窗口"这种重量级改造。我把这部分的优化分成两小块,一块是原生设置,一块是开源小工具。
原生设置只需两步:打开 Finder → 设置 →"打开文件夹时在标签页中打开",这样以后在访达里按 Cmd+T 就可以开新标签,不会弹出一堆新窗口。同时在"显示"里勾上"显示路径栏"和"显示状态栏",文件路径和剩余空间一目了然。
真正能提升效率的是 OpenInTerminal,它解决的是"我在这堆文件目录里,想立刻打开终端操作一下"的需求。这个动作在程序员日常工作里非常高频,以前我只能手动复制路径再切到终端 cd,现在点一下 Finder 工具栏的按钮就开好了。
安装:
brew search openinterminal它可能有两个版本,Lite 版功能更简单,A 版支持 iTerm2、Hyper、Alacritty 以及 VS Code 等编辑器。装完在 Finder 工具栏右键——自定义工具栏——把图标拖到工具栏上,完成。之后在任意目录里,点击图标可以选择打开当前目录的终端、VS Code 或其他编辑器。
这个方案没完全复刻 XtraFinder 的双窗格功能,但对于绝大多数不搞双栏文件管理的用户,"标签页 + 路径栏 + 上下文打开终端"已经足够,而且所有操作都稳、快,不拖累系统。
2.5 OCR 翻译:Easydict,开源界的 Bob 替代
OCR 翻译是我这波选型里最满意的一环。Easydict 是 macOS 上免费开源的翻译工具,它的定位类比 Bob,但完全开源,而且 OCR 能力用的是 macOS 内置的 Vision 框架,离线状态下也能识别图片里的文字,识别中文和英文的准确率都很不错。
安装:
brew install --cask easydictEasydict 内置的 OCR 识别是离线的;翻译会联网调用翻译源,比如 DeepL、Google、Bing、Apple 翻译等,你可以在设置里自由勾选用哪几个源。我个人习惯只保留 DeepL 和 Apple,避免翻译源太多导致结果区域太乱。
使用流程很简单:全局快捷键触发截图 OCR,框选屏幕上的文本区域,Easydict 会自动识别文字并翻译,结果直接显示在小窗口里。它还支持划词翻译,在任意应用里选中文字按下快捷键,弹出翻译窗口。对于看英文文档、读 PDF、跟外国同事沟通的场景,这个工具省去了"复制文本 → 打开网页翻译"的繁琐步骤。
对中文场景来说更贴心的是,Easydict 会优先使用苹果词典对一些生词做解释,相当于附带一个轻量词典功能。
2.6 二维码识别:zbarimg + Automator 右键服务
macOS 自带的"预览"其实能识别二维码,但操作路径太长:右键图片 → 打开方式 → 预览 → 再用预览里的"选择文本"去识别,根本不符合效率党的习惯。所以我把二维码识别做成了一个"右键快速动作",选中任意图片文件,右键一下就能出结果。
核心依赖是 zbar,一个老牌开源条形码/二维码识别库,命令行工具zbarimg可以一行命令识别图片:
brew install zbar测试一下,准备一张二维码图片,执行:
zbarimg -q --raw /path/to/qrcode.png终端会直接打印二维码内容。如果二维码里包含中文,终端可能显示乱码,不要慌,后续用 Automator 把它复制到剪贴板就不会有编码问题。
Automator 配置步骤:
- 打开自动操作,选择"快速操作"。
- 工作流程收到:图像文件,位于:访达。
- 拖入"运行 Shell 脚本"操作,Shell 选
/bin/zsh,传递输入选"作为参数"。 - 粘贴下面这段脚本:
for f in "$@"; do result=$(zbarimg -q --raw "$f" 2>/dev/null) if [[ -n "$result" ]]; then echo -n "$result" | pbcopy osascript -e 'display notification "二维码内容已复制到剪贴板" with title "识别成功"' else osascript -e 'display alert "没有识别到二维码" message "'"$f"'"' fi done- 保存,命名为"识别二维码"。
从此之后,你要在访达里识别任意二维码图片,右键 → 快速操作 → 识别二维码,识别结果会复制到剪贴板,同时右上角弹一个通知。比用手机扫屏幕截图方便太多了。
2.7 屏幕测距:Hammerspoon 把最后一块拼图补上
屏幕测距是标题里最有意思的新功能,但 GitHub 上确实没有特别成熟的开源"屏幕尺子" App。于是我选择了 Hammerspoon,一个老牌 macOS 自动化工具,它几乎能操控 macOS 的一切 UI 事件,画线、监听鼠标、弹提示都不在话下。用它写一个"按住鼠标拖动测量距离"的小脚本,比找一个半成品 App 靠谱得多。
Hammerspoon 安装:
brew install --cask hammerspoon安装完成后,它会在菜单栏出现一个图标,首次打开需要去系统设置里给它"辅助功能"权限。Hammerspoon 的一切配置都在~/.hammerspoon/init.lua这个文件里,我后面第 3 部分会详细给出这段尺子脚本,这里先卖个关子——它是整个方案的"灵魂"之一,也是最能体现"开源灵活度"的地方。
3. 用 Hammerspoon 把散装工具串成"一把神器"
3.1 总调度思路:让所有工具只有一个入口
工具装多了以后,最大的痛点不是功能性欠缺,而是记不住快捷键。Flameshot 一套快捷键,Kap 一套快捷键,Easydict 又有自己的快捷键,全都堆在肌肉记忆里会混乱。我的解法是让 Hammerspoon 做统一入口,所有高频工具都绑定到我知道规律的组合键上,另外再加一个"测距模式"的全局开关。
在~/.hammerspoon/init.lua里,我最开始配置了这样一段简单调度:
-- 截图:Cmd+Ctrl+1 启动 Flameshot hs.hotkey.bind({"cmd", "ctrl"}, "1", function() hs.execute("open -a Flameshot", true) end) -- OCR 翻译:Cmd+Ctrl+2 唤起 Easydict hs.hotkey.bind({"cmd", "ctrl"}, "2", function() hs.execute("open -a Easydict", true) end) -- 录屏:Cmd+Ctrl+3 唤起 Kap hs.hotkey.bind({"cmd", "ctrl"}, "3", function() hs.execute("open -a Kap", true) end)这段配置本身不复杂,但它解决了一个很实际的问题:所有工具的入口都被我记成一个规律,"Cmd+Ctrl+数字"就是工作流入口,数字递增对应不同功能。如果你不喜欢 open -a 这种方式,Hammerspoon 也支持直接执行可执行文件的完整路径,比如 Flameshot 实际是/Applications/Flameshot.app/Contents/MacOS/flameshot。
3.2 屏幕测距:Hammerspoon 脚本从零实现
这是我最想展开的部分。屏幕测距,其实就是要做到:在屏幕上按下鼠标左键,记下一个起点;拖动到目标位置松开,测量起点和终点的距离。这里的"距离"可以拆成水平方向 dx、垂直方向 dy,以及直线距离 dist。对 UI 设计师、前端工程师来说,这三个数都很实用。
我写了这么一段脚本,放在~/.hammerspoon/init.lua或单独引入的screen-ruler.lua里:
ruler = ruler or {} -- 保持单例,方便重载 -- 存储测距起点 ruler.startPoint = nil -- 存储事件监听器,方便退出时清理 ruler.tap = nil -- 存储退出用的 Esc 快捷键 ruler.escKey = nil local function formatPoint(pt) return string.format("%d, %d", math.floor(pt.x + 0.5), math.floor(pt.y + 0.5)) end -- 鼠标按下/抬起时的处理函数 local function onMouseEvent(event) local etype = event:type() local p = hs.mouse.getAbsolutePosition() if etype == hs.eventtap.event.types.leftMouseDown then ruler.startPoint = p elseif etype == hs.eventtap.event.types.leftMouseUp then if ruler.startPoint then local sp = ruler.startPoint local dx = math.abs(p.x - sp.x) local dy = math.abs(p.y - sp.y) local dist = math.floor(math.sqrt(dx * dx + dy * dy) + 0.5) local msg = string.format( "起点(%s) -> 终点(%s)\ndx=%d dy=%d 直线距离=%dpx", formatPoint(sp), formatPoint(p), dx, dy, dist) hs.alert.show(msg, 3) hs.pasteboard.setContents(string.format("dx=%d dy=%d dist=%dpx", dx, dy, dist)) ruler.startPoint = nil end end return false -- 不阻塞事件继续传播 end local function disableRuler() if ruler.tap then ruler.tap:stop() ruler.tap = nil end if ruler.escKey then ruler.escKey:delete() ruler.escKey = nil end hs.alert.show("测距模式已退出") end local function enableRuler() -- 如果已经在测距模式,再按一次则退出 if ruler.tap then disableRuler() return end ruler.tap = hs.eventtap.new({ hs.eventtap.event.types.leftMouseDown, hs.eventtap.event.types.leftMouseUp }, onMouseEvent) ruler.tap:start() hs.alert.show("测距模式已开启:按住左键拖动测距,Esc 退出") -- 在测距模式期间,用 Esc 退出 ruler.escKey = hs.hotkey.bind({}, "escape", disableRuler) end -- 绑定全局快捷键:Cmd+Ctrl+Option+R 切换测距模式 hs.hotkey.bind({"cmd", "ctrl", "alt"}, "R", enableRuler)这段脚本的逻辑并不复杂,但每个细节都踩过坑。我逐个讲:
第一,hs.eventtap.new是 Hammerspoon 的事件监听 API。它可以监听系统级别的事件类型,比如leftMouseDown和leftMouseUp。这个监听是全局的,不限于某个应用内,所以你在浏览器、设计稿、代码编辑器里都能用。
第二,回调返回值是false,意思是"我不拦截这个事件,你继续往后传"。如果你返回true,系统事件就会被吞掉,表现出来就是鼠标点击没有反应。我第一次测试时顺手返回了true,结果把整个系统的左键拖拽搞失灵了,吓得我立刻重启。记住:只监听,不拦截。
第三,hs.mouse.getAbsolutePosition()返回的坐标是 Retina 逻辑像素,不是物理像素。在 Retina 屏上,逻辑像素和物理像素的比例是 2 倍或 1.5 倍,如果你要测的元素正好是 50pt,它会显示 50pt,和设计稿里的 pt 单位一致,这在日常前端、设计对稿中反而是最方便的单位。
第四,hs.pasteboard.setContents会把测量结果同时复制到剪贴板。这样做的好处是:测完不弹出窗口去抄数字,直接 Cmd+V 就能把坐标数据贴到代码注释或对话里。
使用效果:按下全局快捷键 Cmd+Ctrl+Option+R,屏幕中央会提示"测距模式已开启",然后按住鼠标左键从 A 点拖到 B 点,松开后屏幕中央弹出包括起点、终点、dx、dy、直线距离的提示,同时剪贴板里已经自动复制好了dx=... dy=... dist=...px。不需要打开任何独立应用,也不会打断手头工作。
这个脚本的实用性比预想高很多。以前我用 Sketch 量标注、用浏览器开发者工具看元素尺寸,遇到"想量一下这个弹窗和屏幕边缘的距离"这种需求,只能打开各种工具去查坐标,现在直接在屏幕上拖一下就出来了。更重要的是,这套方案零依赖、纯开源、完全可控,所以我也放心把它作为"神器"的核心功能之一。
3.3 把这些能力连在一起:截图完立刻 OCR,扫码完立刻找终端
工具链的价值在联动。我平时最高频的一个操作是:看到一张截图或网页里有一段文字想翻译,直接 Cmd+Ctrl+2 唤起 Easydict,框选文字区域,翻译结果直接就出来了。如果那段文字需要引用到文档里,Easydict 也支持直接复制翻译结果,这个路径比"打开网页翻译"少了好几步。
另一个联动是截图与钉图的组合:用 Flameshot 截了一张对比图,确认不需要后按 Esc 关闭;如果还需要参考,就点"钉住",把它固定在屏幕上。这个交互用来做多方案对比、临时参考图非常顺手。
Hammerspoon 在联动里最擅长的是"桥接"。比如你可以写一个脚本,让二维码识别结果直接用系统浏览器打开:
qr=$(zbarimg -q --raw /tmp/qrcode.png 2>/dev/null) if [[ $qr == http* ]]; then open "$qr" fi把它做成 Automator 快速操作后,在访达里对一个二维码图片右键 → 快速操作 → 识别并打开链接,直接帮你跳转到对应网页。这个在很多场景里很省事,比如你的手机收到一张带二维码的图片,拖到桌面上右键一下就能打开网页,不用再拿起手机扫。
3.4 给 Hammerspoon 加速:重载配置、查看日志
Hammerspoon 改完脚本不会自动生效,需要重载配置。我在 init.lua 里加了这行,这样我用 Cmd+Ctrl+Shift+R 就能立刻重载所有配置,不用跑去菜单栏点 Reload:
hs.hotkey.bind({"cmd", "ctrl", "shift"}, "R", function() hs.reload() end)如果某个快捷键或事件监听器没有按预期工作,Hammerspoon 也自带一个控制台,菜单栏图标里打开 Console 就能看运行日志。我排查测距脚本时,就是靠 console 里的 Lua error 提示定位到一处变量名写错。这个工具对愿意动手折腾的人来说,能力上限很高。
4. 真实踩坑:常见问题与排查技巧实录
4.1 截图、录屏工具总是黑屏或者没图像
这个问题的原因九成是权限。macOS 的屏幕录制权限是独立于辅助功能的,而且不同应用需要单独授权。Flameshot、Kap、Easydict 如果出现"截图黑屏""录制内容为空"的现象,去"系统设置 → 隐私与安全性 → 屏幕录制"里确认是否已经勾选对应 App。
有时候即使勾选了,也要重启一次 App 才会真正生效。我最开始装 Flameshot 时,权限给了,但截图还是全黑,重启系统后才恢复正常。这种东西属于 macOS 权限框架的"好坏参半"——安全是安全,就是排查时费劲。
4.2 快捷键冲突,按下没反应
开源工具多了,快捷键撞车是家常便饭。比如 Easydict 默认的截图 OCR 快捷键和 Flameshot 的截图快捷键可能在某个 app 内冲突,表现就是按下没反应或者两个工具同时弹出。
排查思路是"先切干净,再加回来":在系统设置的键盘快捷键面板里把相关全局快捷键改成无,然后重新设置成自己的统一方案。我给 Hammerspoon 定的快捷键基本都带 Cmd+Ctrl+Alt 前缀,这样就极少和系统默认的 Cmd+Ctrl+某字母冲突。
如果某个命令行工具需要全局快捷键,但它的快捷键设置又不太灵活,就直接用 Hammerspoon 绑定一个你熟悉的快捷键,然后让 Hammerspoon 调它,相当于把所有快捷键统一到一个入口。
4.3 OCR 识别不准、翻译源不可用
Easydict 的 OCR 基于 macOS 内置 Vision 框架,离线识别中文和英文的准确率相当不错,但如果识别的截图里字体太小、有重叠、有背景干扰,准确率还是会掉。这种情况我一般会先放大截图区域再框选,或者调整系统放大镜的倍数。识别结果里如果出现明显错字,也不必惊讶,毕竟图片 OCR 从来不是 100% 准确。
翻译源不可用是另一个高频问题。部分翻译源在某些网络环境下访问并不稳定,表现是"请求失败"或一直在转圈。我去设置里只保留两三个稳定可用且速度明显的翻译源,比如 Apple 翻译和 DeepL,实际体验会好很多。
4.4 二维码识别失败或输出乱码
zbarimg 识别不了小尺寸二维码是常见问题。如果图片上的二维码太小或像素模糊,可以先在"预览"里放大一两倍再识别,识别率会明显提升。
输出乱码则完全是终端编码的问题,不是因为识别失败。zbarimg 在终端里直接打印中文内容时,终端可能用 UTF-8 之外的编码显示,看起来像乱码。只要把它通过pbcopy复制到剪贴板,再贴到文本编辑器里,内容就是正常的。
4.5 Hammerspoon 脚本不生效或报错
Hammerspoon 最常见的两个坑:一是改了 init.lua 没有重载,二是脚本里语法错误导致整个配置加载失败。建议每次改完脚本都用 Cmd+Ctrl+Shift+R 重载,然后在菜单栏的 Console 里看一眼有没有 error 信息。
我给测距脚本调试时遇到一个非常隐蔽的问题:事件监听器开启了但没停,导致我后面写别的快捷键时,系统总觉得"有东西卡着"。后来写了disableRuler里ruler.tap:stop()才好。大家如果在 Hammerspoon 里做任何 eventtap 监听,一定要记得给开关加上"停止"逻辑,不然性能会逐步下降。
| 症状 | 大概率原因 | 解决办法 |
|---|---|---|
| 截图黑屏、录屏无画面 | 屏幕录制权限未开启 | 设置 → 屏幕录制 → 勾选对应 App,重开 App |
| 快捷键按下无响应 | 快捷键冲突 | 切换或者用 Hammerspoon 统一绑定 |
| OCR 错别字多 | 字体过小、背景复杂 | 放大截图区域再识别 |
| 翻译请求一直失败 | 网络原因/翻译源不稳定 | 设置里只保留 2-3 个稳定翻译源 |
| zbarimg 识别不出 | 图片分辨率低/二维码过小 | 先放大图片再识别 |
| 测量结果不对 | Retina 缩放导致坐标换算偏差 | 确认是否在 Retina 屏逻辑像素下工作 |
| Hammerspoon 配置不生效 | 语法错误或未重载 | 打开 Console 看日志,Cmd+Ctrl+Shift+R 重载 |
5. 这套开源方案和"商业全家桶"到底怎么选
5.1 我的实测感受:哪些场景够用,哪些有落差
从日常效率角度,这套方案覆盖了我 95% 的需求,其中截图、取色、OCR 翻译、屏幕测距这四项的体验已经完全不输我当年用的付费工具。
如果非要说和全家桶的差距,主要是三方面:一是"一键联动"的爽感。商业全家桶通常会做统一设置面板,不用自己花时间调 Hammerspoon;开源方案第一天的配置成本是实打实的。二是某些极致渲染能力。比如 Kap 导出 GIF 的压缩能力和 ScreenFlow 这种付费录屏软件比还是有差距,导出大文件时体积控制需要手动调参数。三是 UI 美观度。Pika、Flameshot、Kap 的界面都比较务实,不像某些商业产品那样设计得花哨。
但对我来说,这些差距换来的回报是决定性的:所有工具完全免费、代码完全开放、没有订阅提醒、没有遥测统计,而且可以随时按自己的需求改脚本。一个电工不会抱怨工具箱里的螺丝刀不好看,他只会关心合不合手。这套流程就是合手。
5.2 建议:工具宁缺毋滥,按需加入你的工作流
我见过很多人看了效率文章之后就一口气装十几个工具,最后桌面上全是菜单栏图标,真正用起来的没几个。我的建议是,你只需要根据自己真实的痛点选其中两到三个开始:
- 如果你经常截图做标注、贴图对比:先装 Flameshot。
- 如果你经常读外文资料、截图翻译:先装 Easydict。
- 如果你做设计或前端,经常需要取颜色、量尺寸:装 Pika,再把 Hammerspoon 的测距脚本配置好。
- 如果经常需要写文档配图:加装 Kap 就齐活了。
装好之后,用 Hammerspoon 把快捷键统一成你自己熟悉的一套。只要习惯一天,你会发现日常操作的开销真的降下来了。
5.3 根据我个人经验,再分享两个扩展思路
屏幕测距脚本其实还有很大的扩展空间。比如你可以让它同时识别多个点、绘制一条实际测距线段到屏幕上,或者把它和 macOS 自带的截图工具联动,量完直接画一条带箭头的标注线。只要你对 Hammerspoon 的 canvas 元素足够熟,这些都不难实现。
另一个我觉得很有价值的扩展是"文本采集流水线":用 Easydict 截取一段文字,再通过 Hammerspoon 自动整理格式、存入备忘录或 Todo 工具,等于给自己组装一个轻量知识管理链路。这套流程真的能帮你把"看到有用信息 → 保存下来"这个动作的损耗降到最低。
开源工具的乐趣就是这样:它不承诺给你一个完美成品,但它给足了你把它打磨成趁手工具的自由。我希望这篇记录能帮你少走一些弯路,也欢迎你按自己的习惯把方案改得更顺手——毕竟,这套"神器"的权力只属于你自己。