ByteNoteByteNote

字节笔记本

2026年6月10日

ClipHistory:不到 1MB 的开源 macOS 剪贴板历史工具,AES-256 加密存储

API中转
¥120

macOS 自带剪贴板只能记一条内容。复制新东西,旧的就没了。很多人用 Paste 或者 Raycast 来解决这个问题,但 Paste 要订阅费,Raycast 功能太多嫌重。

ClipHistory 是一个轻到几乎没有存在感的开源替代品。一个快捷键弹出剪贴板历史窗口,支持文本和图片,加密存储,不收钱,不留遥测。Swift 写的,编译后不到 1 MB。

项目地址 github.com/weiykong/ClipHistory,MIT 协议,2 周前刚发布,目前 24 个 star,单作者维护。

用起来是什么感觉

按 ⌥V(Option+V),在任何应用里都会弹出一个半透明窗口,显示最近的剪贴板历史。窗口不会抢走当前应用的焦点,你的光标还在原来的输入框里闪。选中一条记录按回车,内容直接粘贴到原来的应用,整个过程不需要切换窗口。

支持文本和图片。截图、浏览器里复制的图片、Finder 里复制的文件图标,都会被记录。图片在历史列表里显示缩略图,点眼睛图标可以切换纯文本模式隐藏图片。

搜索是即时的,输入关键词立即过滤,搜索范围包括内容本身和来源应用名。置顶的条目会永远排在最前面,不会被新内容挤走。来源应用图标会显示在每条记录旁边,一眼就能看出这段文字是从哪里复制的。

几个值得说的地方

剪贴板历史用 AES-256-GCM 加密存储在本地磁盘上。密钥在首次启动时生成,存在 macOS Keychain 里,从不写入磁盘。加密存储对剪贴板工具来说不是标配,大部分同类工具是明文保存的。如果你担心剪贴板里的密码或敏感信息被磁盘扫描工具捞到,这个功能有实际价值。

密码保护也做了。1Password 等密码管理器在复制密码到剪贴板时会设置 org.nspasteboard.ConcealedType 标记,ClipHistory 检测到这个标记后会自动跳过,不记录。这比你手动记得去清剪贴板可靠得多。

可以设置按应用排除。比如你不想记录银行客户端或密码管理器里的复制内容,把它加到排除列表里就行。

技术实现

零外部依赖。整个项目就是一个 Swift Package Manager 可执行目标,十几个 Swift 文件。弹窗用 NSPanel 实现,设置为 .nonactivatingPanel,这样窗口能接收点击事件但不激活应用,当前应用的文本光标不会丢失。

键盘事件拦截用的是 session 级别的 CGEventTap,弹窗可见时捕获按键事件,路由到搜索和导航逻辑,不偷焦点。

图片缩略图在捕获时生成,用 NSImage(size:flipped:drawingHandler:) 强制渲染懒加载的剪贴板图片(有些图片报告 size 为 0x0),然后缩小到 480px 以内的 PNG。解码后的 NSImage 实例缓存在 NSCache 里,按 UUID 索引,避免每次渲染都重新解码。

历史保存是防抖的(1 秒),连续快速复制只触发一次写入。

安装

从 GitHub Releases 下载 DMG,拖进 /Applications。因为是个人开发者签名,macOS 会阻止打开,需要先在终端跑一行命令解除隔离:

xattr -d com.apple.quarantine /Applications/ClipHistory.app

然后双击打开,首次启动会引导你授予辅助功能权限(弹出窗口需要),设置快捷键。之后就可以用了。支持开机启动,macOS 14 Sonoma 或更高版本。

项目还很年轻,发布不到两周。但核心功能已经够用,代码结构清晰,Swift 工程做得比较规范。如果你需要一个免费的、轻量的、能存图片的剪贴板历史工具,ClipHistory 是一个值得试试的选择。

项目地址:https://github.com/weiykong/ClipHistory 官网:https://weiykong.github.io/ClipHistory/

分享: