01 · 历史
按时间排好,重复的会合并
文字和图片自动进历史,新的在上面。同一段内容再复制一次,不会多出一条:合并回原来那条,命中次数加一,并把它挪到最前。
搜索是即时的,打两个字列表就收窄。图片在行首是缩略图,鼠标停上去能看到大图,以及像素尺寸和体积。macOS 上,图里认出的字也参与这次过滤。
Your clipboard follows you. The data stays yours.
菜单栏里留着你复制过的文字和图片。搜到一条,回车就粘回刚才那个应用。 换电脑时,同步进你自己的私有 Gist 或私有仓库;不想上传,就只留在这台机器上。
当前已发布的安装包是 macOS,大约 4.9 MB。给公开仓库打上 v 开头的标签后,发布流程会同时打出 Windows 安装包,先放进草稿;草稿发布前,这里仍是 macOS。Linux 从源码构建。 截图文字识别只在 macOS。
菜单栏弹窗的暗色界面。图片行会留下识别出的第一行,悬浮时能看到尺寸和体积。
Features
下面每一条都是现在就能用的行为,不是路线图。
01 · 历史
文字和图片自动进历史,新的在上面。同一段内容再复制一次,不会多出一条:合并回原来那条,命中次数加一,并把它挪到最前。
搜索是即时的,打两个字列表就收窄。图片在行首是缩略图,鼠标停上去能看到大图,以及像素尺寸和体积。macOS 上,图里认出的字也参与这次过滤。
02 · 粘贴
光标还在原来的输入框时,按 ⌘⇧V 打开列表(Windows 是 Ctrl+Alt+V)。回车、点击,或 ⌘1–9,会把那一条写回系统剪贴板,再模拟一次粘贴键送回去。
设置里有一项「选中后自动粘贴」,关掉之后就只复制、不替你按键。macOS 需要辅助功能权限;没授权时会提示「自动粘贴失败:需要辅助功能权限」,旁边可以打开系统设置。另有一组直达键 ⌘⇧⌥1–9:不弹出窗口,直接粘贴最近第 N 条。
03 · 片段
地址、工单回复、代码模板和历史分开存。Tab 在「历史 / 片段」之间切换。⌘E 打开独立编辑器(Windows 为 Ctrl+E),用文件夹管理;这个快捷键可以改,留空就关掉。
某一条可以停用,停用后不会出现在粘贴列表。整棵树能导出 JSON,也能再导入。清空历史不会动片段。
04 · 截图识别
macOS 上,截图进历史之后,本机 Vision 框架识别图中的中文和英文。识别不联网,也不经过别的服务器。结果的第一行显示在列表里,所以搜「证书」可以命中一张报错截图。
这项只在 macOS。Windows 和 Linux 仍然会保存图片、显示缩略图,只是还不能按图中文字搜索。
05 · 同步
三种后端:私有 Gist、私有仓库的 data 分支、仅本地。Personal Access Token 只进操作系统钥匙串——macOS Keychain 或 Windows 凭据管理器,service 是 ClipSync,account 是 github_pat。同步时才读取,不写进任何配置文件。
两台机器合并时,updatedAt 更新的那条胜出;置顶取并集;命中次数相加。图片按内容寻址存成 blob,同一张图不会存两份。data 分支是 orphan:每次同步 force-push 一个没有父提交的根 commit,分支上始终只有这一次提交,仓库体积约等于当前数据量。
06 · 来源忽略
设置里的「忽略来源」每行一条,末尾 * 表示前缀匹配。默认包含 1Password、LastPass、KeePassXC、Bitwarden 的 bundle id 和 Windows 进程名,命中的复制不进历史,也不会被同步。
macOS 拿 bundle id 对来源应用,默认就能跳过 1Password、LastPass、KeePassXC 和 Bitwarden。Windows 比的是前台进程名,默认包含 1Password*、KeePass*、Bitwarden*、LastPass*。Linux 目前拿不到来源。
Shortcuts
唤出弹窗的全局快捷键、片段编辑器快捷键都可以在设置里改。macOS 默认 ⌘⇧V。Windows 默认 Ctrl+Alt+V,避开输入法用来切换布局的 Ctrl+Shift;这个组合被占用时,自动退回 Ctrl+Shift+V。直达粘贴是固定的 ⌘⇧⌥1–9。
| 操作 | macOS | Windows |
|---|---|---|
| 唤出 / 隐藏弹窗 | ⌘⇧V | CtrlAltV占用则CtrlShiftV |
| 选中第 1–9 条并粘贴 | ⌘1–9 | Ctrl1–9 |
| 不弹窗,直达粘贴第 N 条 | ⌘⇧⌥1–9 | CtrlShiftAlt1–9 |
| 置顶 / 取消置顶 | ⌘P | CtrlP |
| 历史 / 片段 | Tab | Tab |
| 打开片段编辑器 | ⌘E | CtrlE |
| 上下移动 | ↑↓ | ↑↓ |
| 选中当前条 | Enter | Enter |
| 关闭 | Esc 先清搜索,再隐藏 | 同左 |
Install
macOS 可以一行命令装好。Windows 安装包由发布标签生成,发布之前仍可从源码构建。Linux 从源码构建。
脚本会按芯片下载最新的 .app.tar.gz,放进 /Applications,去掉隔离属性,做 ad-hoc 签名,然后启动。
curl -fsSL https://junhey.github.io/clipsync-app/install.sh | bash
/Applications/ClipSync.appxattr -dr com.apple.quarantine 去掉隔离属性codesign --sign - 做 ad-hoc 签名脚本源码:install.sh
从 Releases 下载 ClipSync_*_aarch64.app.tar.gz(Intel 是 x64.app.tar.gz),解压后放进「应用程序」。
第一次打开前如果被 Gatekeeper 拦住,在终端执行:
xattr -dr com.apple.quarantine /Applications/ClipSync.app
给公开仓库推送 v* 标签后,发布流程会打出 NSIS 安装包,先放进 Release 草稿。草稿发布之前,最新 Release 里还是 macOS 安装包,这时用旁边的源码构建。安装包没有代码签名,SmartScreen 可能提示未知发布者。
Windows 不需要辅助功能权限,也不需要剪贴板隐私授权。唤出快捷键是 Ctrl+Alt+V。注册失败时会提示并退回 Ctrl+Shift+V。截图识别目前没有。密码管理器默认按进程名跳过,例如 1Password*、KeePass*。
需要 Rust 1.77+ 和 Node 20+。macOS、Windows、Linux 是同一套代码。Linux 目前没有一键安装脚本。
git clone https://github.com/junhey/clipsync-app.git
cd clipsync-app
npm install
npm run tauri:build
# macOS 产物:
# src-tauri/target/release/bundle/macos/ClipSync.app
菜单栏图标 → 设置 → 同步。默认后端是私有仓库。
owner/repo,就只给那个仓库打开 Contents 读写。经典 token 则勾选 repo。你的用户名/clipsync,还没有就尝试新建私有仓库。填了别的名字就不会另建。Gist 需要一条已经存在的 ID。data 分支,或那条私有 Gist 的 history.json。默认同步间隔 60 秒。Privacy
ClipSync 没有账号,也没有自己的服务器收历史。内容只可能在两个地方:这台电脑的应用数据目录,以及你自己的 GitHub。选「仅本地」时,第二个地方也不存在。
PAT 存在 macOS Keychain 或 Windows 凭据管理器,service 为 ClipSync,account 为 github_pat。应用只在同步时读取,不写进配置文件,也不进历史记录。
macOS 上,默认的 bundle id 会跳过 1Password、LastPass、KeePassXC 和 Bitwarden。Windows 用同一张表里的进程名,默认包含 1Password*、KeePass*、Bitwarden*、LastPass*。末尾星号是前缀匹配。Linux 还没有来源信息。
截图文字用 macOS 自带的 Vision,在这台电脑上完成。没有识别请求要发出去。关掉这项能力的平台——Windows 和 Linux——本来就不会做这一步。
同步后端选「仅本地」、不填写 PAT 之后,历史、片段和图片 blob 都留在本机,不会创建 Gist,也不会往 data 分支推送。
FAQ
存在操作系统钥匙串里:macOS Keychain,或 Windows 凭据管理器。条目的 service 是 ClipSync,account 是 github_pat。ClipSync 只在同步时读取,不会把 token 写进应用数据目录或 Git 仓库。建议用 fine-grained PAT,权限只开给那个私有仓库。
不会跟着提交次数涨。data 分支是 orphan,每次同步 force-push 一个没有父节点的根 commit,分支上永远只有这一次提交。仓库体积约等于当前历史加上图片 blob。图片按内容寻址,相同的图共用一个 blob,不会重复占空间。
能。macOS、Windows、Linux 是同一套 Tauri 2 代码。Windows 10 / 11 不需要辅助功能,也不需要剪贴板隐私授权。第一次启动的快捷键是 Ctrl+Alt+V,注册失败时退回 Ctrl+Shift+V,并提示「热键被占用」。截图文字识别只在 macOS。密码管理器在 Windows 上默认按进程名跳过。Windows 安装包随版本标签生成,发布前可用源码构建。Linux 需要自己构建,还没有一键安装脚本。
打开设置,找到「忽略来源」,每行写一条。末尾的 * 表示前缀匹配。默认同时有 macOS bundle id 和 Windows 进程名,例如 com.agilebits.onepassword* 和 1Password*。改完保存即可;已经进历史的旧条目不会因此被删掉。
/Applications/ClipSync.app 拖进废纸篓。Windows:用系统的应用卸载。~/Library/Application Support/dev.junhey.clipsync。ClipSync、account 为 github_pat 的条目。可以。设置 → 同步 → 选「仅本地」。不要填写 PAT。历史和片段都写在本机应用数据目录,不会创建 Gist,也不会往 data 分支推送。换电脑时这份数据不会自己跟过去。
macOS 上,模拟 ⌘V 需要辅助功能权限。失败时会看到「自动粘贴失败:需要辅助功能权限」,并可以打开系统设置。设置里的「选中后自动粘贴」关掉之后,选中只写入剪贴板,粘贴键由你自己按。未授权时,这项旁边也会出现「系统设置」。Windows 没有这项权限门槛。
同一内容再次复制会合并成一条,命中次数累加,不会无限新增。图片以内容哈希为地址存储,相同像素只留一份 blob。列表里能看到缩略图;悬浮时显示宽高和体积。历史条数在设置里有上限,超出后优先留下置顶项。