深夜提醒

现在是深夜,建议您注意休息,不要熬夜哦~

🏮 🏮 🏮

新年快乐

祝君万事如意心想事成!

share-image
ESC

用 Kimi K3 + Swift 从 0 写一个剪贴板工具 ClipVault

如果你每天要在浏览器、IDE、文档、聊天窗口之间复制粘贴几十次,就会明白一件事:剪贴板才是最常用的生产力工具。但它又是最被忽视的——系统默认只记住最后一条,一旦手滑复制了新内容,刚才那段文字就再也找不回来。

我之前用 Rust 写过一个剪贴板工具,一直在 Windows 上用。基本功能都有,但越用越觉得受限:想要更顺滑的 UI 动画、更跟手的拖拽交互、更深度的系统集成,在 Windows 上绕路太多。

后来我转到 macOS 主力环境,索性用 Swift 重新写了一遍,并全程用 Kimi K3 做辅助。结果发现,Swift + AppKit/SwiftUI 能做出很多 Rust 版本难以实现的效果——比如直接把文件拖到面板里保存、更精准的全局热键、与系统钥匙串和 iCloud 的原生集成。

新版本仍然叫 ClipVault,但它已经是从 0 开始、为 macOS 重新设计的一版。

它解决的不是”能不能找到”,而是”找起来爽不爽”

剪贴板工具的核心就一件事:你曾经复制过的东西,现在能迅速再找回来。但”迅速”两个字,包含了很多细节。

ClipVault 的交互完全围绕一个底部面板展开。按 ⇧⌘V,面板从屏幕底部滑出,最近复制的内容以卡片形式横向排列。你不需要离开当前窗口、不需要打开一个完整应用,视线几乎不用移动,手指也不需要离开键盘。

  • 左右箭头切换选中
  • 回车直接粘贴
  • ⌘1⌘9 一键粘贴前 9 条
  • ⌥⌘F 展开搜索框,输入关键词即时过滤

这些快捷键都可以在设置里自己改。对我来说,理想状态是”肌肉记忆替代鼠标”,所以所有高频操作都给了键盘入口。

不只是历史,更是你的知识碎片

复制的内容种类很杂:一段 URL、一个颜色值、一张截图、几行报错日志、一句临时想到的灵感。

ClipVault 会自动识别类型:链接会显示网站 favicon,hex 颜色会直接渲染成色块,图片会显示缩略图,文本会显示字符数。这样你不用点开卡片,扫一眼就知道是不是自己要找的那一条。

但历史条目终究会被清掉。真正需要长期保留的东西,我会拖到”集合”(Pinboard)里。集合就像一个个小抽屉:常用代码片段、设计参考、写作素材、待读链接……每个集合可以命名、配不同颜色,双击即可重命名。放进集合的内容会永久保留,不受自动清理策略影响。

从”临时复制”到”主动收藏”,这个边界很重要。历史是流水,集合是书架。

Swift 带来的新能力:把文件直接拖进面板

这是 Rust 版本让我最遗憾的一点:Windows 上要实现文件拖拽进窗口,要么依赖第三方框架,要么自己处理大量 COM 和窗口消息,做到最后体验总是很生硬。而 macOS 上的 SwiftUI/AppKit 对拖放有原生支持,几行代码就能让面板接受文件拖拽。

在 ClipVault 里,你可以直接从 Finder 拖一个文件到面板里,它会变成一个文件类型的剪贴板条目,显示文件名、图标和路径。需要时按回车或 ⌘1 就能把它重新写回剪贴板,再粘贴到聊天窗口、邮件或命令行里。

这个能力看起来小,但用起来很顺:图片素材、PDF、配置文件、脚本……只要拖一下就能暂存,不用专门打开一个文件管理器或云盘。

搜索和筛选,是剪贴板的第二大脑

当历史超过几百条,滚动就找不到了。ClipVault 的搜索框支持全局搜索,同时覆盖历史和所有集合。输入的同时结果即时更新,150ms 的防抖让频繁输入也不会卡顿。

如果只记得”大概是个图片”、”从微信里复制的”或者”是某个颜色”,还可以用筛选气泡按类型、来源应用、集合进一步缩小范围。这种组合查询在日常使用中非常高效:

“找昨天从浏览器复制的那个蓝色色值”——输入 blue + 筛选”颜色” + 看相对时间,基本秒定位。

数据放在本地,加密是我给自己设的门

这可能是 ClipVault 和大多数剪贴板工具最不一样的地方:所有数据默认只存在本机

历史记录、集合、图片,全部经过加密后落盘,密钥保存在系统钥匙串里。即使别人拿到你的电脑硬盘文件,也无法直接读取内容。同步也走了 iCloud Drive,但同步目录里的文件同样是加密的。

我当然可以把数据上传到某个服务端实现跨设备同步,但剪贴板这个场景太敏感了。它可能包含 token、身份证号、内部链接、私人对话。本地优先 + 端到端加密,是我能接受的最低标准。

另外,ClipVault 会主动忽略两类内容:

  • 密码管理器标记为”机密”的内容
  • 应用标记为”临时”的内容

不该记的,它不会记。

一些贴心的小设计

  • 暂停记录:临时要复制一些敏感内容,可以暂停 5 分钟到 1 天,到期自动恢复。
  • 粘贴方式可选:可以直接模拟 ⌘V 粘贴到当前应用,也可以只写回剪贴板,由你自己决定。
  • 新建文本项:有时候突然想到一句话,按快捷键就能写一条纯文本进去,支持简单格式。
  • 菜单栏常驻:左键呼出面板,右键进入设置或退出。
  • 登录时启动:随 Mac 启动,安静待在后台。
  • 面板位置可选:底部、顶部、左侧、右侧,甚至左右侧会自动切换为竖向布局。
  • 外观与语言:跟随系统或单独设置浅色/深色模式,支持简体中文与 English。

ClipVault 通用设置

这些设置都在同一个窗口里,左侧边栏切换,不需要翻来翻去。

从 Rust 到 Swift:我为什么决定重写

ClipVault 并不是第一次出现。我之前用 Rust 写过一个版本,在 Windows 上用了挺久,核心逻辑其实早就想清楚了:本地存储、卡片历史、快速搜索、集合收藏。

但转到 macOS 后,我发现很多体验在原版里只能妥协:没有原生的系统钥匙串集成、拖放文件进窗口很别扭、UI 动画和面板行为很难做到”像原生应用”。于是我决定用 Swift 在 macOS 上完整重写——一来性能足够好,二来能深度调用 NSPasteboard、全局热键、钥匙串和 iCloud Drive。

Kimi K3 是这次重写的”结对程序员”

整个开发过程我几乎都在用 Kimi K3。它帮我完成了大量 Swift 代码的生成、调试和重构,尤其是处理 NSPasteboard、底部面板动画、全局热键这些 macOS 特有的 API 时,K3 的长上下文和代码理解能力省了很多时间。

Kimi K3 控制台

上图是我在 Kimi 后台的截图,K3 已经正式上线,最高支持 1M 上下文。对这类需要反复打磨 UI 细节和系统交互的桌面应用来说,能把整段 SwiftUI 视图代码、事件处理逻辑一次性丢进去讨论,效率提升非常明显。

下面是 ClipVault 的实际界面:

ClipVault 底部面板

这是刚安装完、还没有历史记录时的底部面板。顶部的「剪贴板 / 图片 / 文件」标签就是集合入口,右侧搜索和筛选会在这里展开。整个面板没有复杂的窗口边框,呼出和收起都很轻。

ClipVault 实际使用效果

实际使用时,面板可以停靠在屏幕右侧(也可以选底部、顶部或左侧)。上图里我把刚写好的博客正文复制了进去,ClipVault 自动识别为文本类型,显示来源应用和字符数,按 ⌘1 就能直接粘贴回来。

ClipVault 隐私设置

隐私设置页是我花时间最多的地方之一。这里可以开启「忽略机密内容」和「忽略瞬时内容」,也可以把 1Password 这类密码管理器加入忽略应用列表。辅助功能权限按需授权,不需要时 ClipVault 只会把内容写回剪贴板,不会自动帮你粘贴。

用 Swift 写 macOS 应用、用 Kimi K3 做辅助,这个组合让我一个周末就能把原型跑起来,再花一两个晚上把细节打磨到能日常使用的程度。如果你也有类似”何不自己做一个”的想法,现在的工具链真的已经够用了。

写在最后

ClipVault 不是一个大而全的工具,它只是把”复制粘贴”这件小事做到了我觉得舒服的程度:响应快、不联网、能搜索、能收藏、能加密。

目前它只支持 macOS 14 以上系统。如果你也受够了订阅制剪贴板工具,或者只是想找一款真正本地的替代品,可以试试看。

下载地址:ClipVault-Swift v1.1.0 Release,欢迎提 issue 或 PR。

文章作者:阿文
文章链接: https://www.awen.me/post/f340115f.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿文的博客

评论

0 条评论
😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘 🛑📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭 ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️ 🈯💹❇️ ✳️🌐 💠Ⓜ️🌀 💤🏧🚾 🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️
加载中...

留言反馈

😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘 🛑📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭 ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️ 🈯💹❇️ ✳️🌐 💠Ⓜ️🌀 💤🏧🚾 🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️