剪存:让剪贴板完成自动化工作(入选阮一峰周刊, GitHub 200+ Stars) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
snso
1.68D
V2EX    分享创造

剪存:让剪贴板完成自动化工作(入选阮一峰周刊, GitHub 200+ Stars)

  •  1
     
  •   snso 2025 年 12 月 10 日 4940 次点击
    这是一个创建于 121 天前的主题,其中的信息可能已经有所发展或是发生改变。

    剪存:让剪贴板成完成自动化工作

    一个强大的剪贴板历史管理工具,现已支持自定义脚本功能,让你的剪贴板操作自动化起来!

    最新进展

    入选阮一峰周刊

    GitHub 200+ Stars

    • 项目在 GitHub 上已获得 200+ Stars (刚刚 200)
    • 感谢每一位支持者的 Star 和反馈!
    • 特别感谢 v 佬们的支持和提供的建议

    关于剪存

    剪存是一个跨平台的剪贴板历史管理工具,基于 Wails + Vue 3 构建,支持 macOS 和 Windows 。关于基础功能(自动保存、搜索过滤、图片处理等)可以参考之前的推广文。今天重点介绍的是自定义脚本功能这个让剪存变成的强大。

    自定义脚本功能:让剪贴板更智能

    核心特性

    1. Javascript 脚本支持:使用熟悉的 Javascript 编写脚本,无需学习新语言
    2. 两种触发方式
      • 手动执行:通过快捷键或菜单手动触发脚本
      • 自动执行:剪贴板内容保存后自动运行(可配置过滤条件)
    3. 灵活的过滤机制
      • 按内容类型过滤(文本/图片/URL/JSON 等)
      • 按关键词过滤(支持正则表达式)
    4. 完整的浏览器 API:可以使用 fetchcryptoDate 等所有浏览器 API
    5. 内置 API 函数:通过 import 导入 csRequest( HTTP 请求)和 csCopyText(剪贴板复制)等函数

    丰富的使用场景

    1. 开发场景

    JSON Mock 数据生成

    复制一个 JSON Schema 或 API 响应模板,自动生成符合格式的 Mock 数据。支持智能识别字段类型(邮箱、手机号、日期、图片 URL 等),生成真实感的数据。

    适用场景

    • 前端开发时快速生成测试数据
    • API 接口联调时生成模拟响应
    • 数据库填充测试数据

    JWT Token 生成

    复制用户信息或配置,自动生成 JWT Token ,方便 API 测试和调试。

    适用场景

    • API 开发测试
    • 身份验证调试
    • 微服务间通信测试

    时间戳转换

    复制时间戳或日期字符串,自动转换为可读格式,支持双向转换。

    适用场景

    • 日志分析
    • 时间格式转换
    • 调试时间相关问题

    2. 数据处理场景

    Base64 编码/解码

    快速对文本进行 Base64 编码或解码,支持 Unicode 字符。

    适用场景

    • 图片转 Base64
    • 数据传输编码
    • 配置文件处理

    文本信息提取

    从文本中自动提取邮箱、URL 、手机号、身份证号、银行卡号、IP 地址等结构化信息。

    适用场景

    • 数据清洗和整理
    • 隐私信息检查
    • 批量信息提取

    3. 通知协作场景

    钉钉/企业微信消息推送

    复制重要信息后,自动推送到钉钉群或企业微信群,实现跨设备通知。

    适用场景

    • 重要信息及时通知团队
    • 跨设备内容同步
    • 工作流自动化

    Pushover 推送

    将剪贴板内容推送到手机,支持优先级设置。

    适用场景

    • 个人重要信息提醒
    • 跨平台内容同步
    • 紧急信息通知

    4. 内容处理场景

    URL 短链接生成

    复制长链接,自动生成短链接,方便分享。

    适用场景

    • 社交媒体分享
    • 文档中的链接简化
    • 二维码生成前的链接处理

    AI 文本分析

    复制文本内容,调用 AI API (如阿里云百炼)进行情感分析、内容总结、错别字检测等。

    适用场景

    • 文本情感分析
    • 内容摘要生成
    • 智能文本处理

    5. 工作流自动化场景

    数据格式转换

    复制不同格式的数据,自动转换为目标格式( CSV JSON 、Markdown HTML 等)。

    适用场景

    • 数据格式转换
    • 文档格式处理
    • 批量数据处理

    内容验证

    复制内容后自动验证格式(邮箱格式、URL 有效性、JSON 合法性等)。

    适用场景

    • 数据质量检查
    • 格式验证
    • 错误检测

    实际案例分享

    案例 1:前端开发者的 Mock 数据生成器

    场景:前端开发时需要大量测试数据,但手动编写太繁琐。

    解决方案

    1. 复制 API 返回的 JSON Schema
    2. 运行 Mock 数据生成脚本
    3. 自动生成 10-20 条符合格式的测试数据
    4. 数据包含真实的邮箱、手机号、日期等格式

    效果:从 10 分钟手动编写数据 → 3 秒自动生成

    案例 2:团队协作的信息同步

    场景:开发过程中复制了重要的错误信息或配置,需要及时通知团队成员。

    解决方案

    1. 配置钉钉推送脚本
    2. 设置关键词过滤(如包含 "error" 或 "config")
    3. 复制相关内容后自动推送到团队群

    效果:重要信息自动同步,无需手动发送消息

    案例 3:日志分析的时间戳转换

    场景:查看日志时遇到大量时间戳,需要快速转换为可读格式。

    解决方案

    1. 复制时间戳
    2. 运行时间戳转换脚本
    3. 自动识别秒级/毫秒级时间戳并转换

    效果:无需打开在线工具,一键转换

    如何开始使用?

    1. 安装剪存

    2. 创建你的第一个脚本

    1. 打开剪存应用
    2. 进入设置 → 脚本管理
    3. 点击"新建脚本"
    4. 填写脚本信息(名称、描述、触发时机等)
    5. 编写 Javascript 代码
    6. 保存并启用

    3. 使用示例脚本

    项目提供了多个开箱即用的脚本示例:

    • JSON Mock 数据生成器
    • Base64 编码/解码
    • JWT Token 生成
    • 文本信息提取
    • 钉钉/Pushover 消息推送
    • URL 短链接生成
    • 时间戳转换

    你可以在 GitHub 仓库 中找到这些脚本,直接复制使用或作为参考。

    脚本编写示例

    简单示例:文本转大写

    if (item.ContentType !== "Text") { return { error: "只支持文本类型" }; } return item.Content.toUpperCase(); 
    <3>进阶示例:调用外部 API
    import { csRequest } from '@clipsave/api'; // 使用内置的 csRequest 函数调用 API (绕过 CORS 限制) const respOnseJson= await csRequest( 'POST', 'https://api.example.com/process', JSON.stringify({ 'Content-Type': 'application/json' }), JSON.stringify({ text: item.Content }) ); const respOnse= JSON.parse(responseJson); return response.body.result; 

    复制到剪贴板示例

    import { csCopyText } from '@clipsave/api'; // 生成结果后自动复制到剪贴板 const result = processData(item.Content); await csCopyText(result); return result; 

    为什么选择剪存?

    1. 跨平台:支持 macOS 、Windows
    2. 开源免费:MIT 许可证,完全开源
    3. 轻量高效:基于 Go + Vue 3 ,性能优秀
    4. 扩展性强:通过脚本功能无限扩展能力
    5. 隐私安全:数据本地存储,不上传云端
    6. 持续更新:活跃的开发和社区支持

    更多资源

    参与贡献

    我们欢迎社区贡献更多实用的脚本!如果你有好的脚本想法或已经编写了有用的脚本,欢迎提交 Pull Request 。


    让剪贴板成为你的自动化工作流中心,从今天开始!

    如果这个工具对你有帮助,欢迎给项目点个 Star ,这是对我们最大的支持!

    28 条回复    2026-01-04 15:29:18 +08:00
    rayg0
        1
    rayg0  
       2025 年 12 月 10 日
    挺有意思的,可扩展空间很大。
    snso
        2
    snso  
    OP
       2025 年 12 月 10 日
    @rayg0 哈哈 欢迎贡献脚本
    hafuhafu
        3
    hafuhafu  
       2025 年 12 月 10 日
    剪切板内容可以通过 js 脚本拓展这个想法还是挺好也挺实用的。
    就是作为剪切板历史记录工具本身的功能还是得完善一下。
    zarvin
        4
    zarvin  
       2025 年 12 月 10 日
    使用了一下,挺好的,已 star
    510908220
        5
    510908220  
       2025 年 12 月 10 日
    体验了下,不错。
    ikw
        6
    ikw  
       2025 年 12 月 10 日
    体验了一下,效果确实还可以,有几个地方感觉可以优化一下
    1. 建议用 https://gitlab.com/cznic/sqlite 去掉 cgo 开发体验好很多
    2. CleanShot X 的截图识别成文件了,Paste 是能识别到是图片的,或许可以针对 File 类似多识别一下文件类型?
    snso
        7
    snso  
    OP
       2025 年 12 月 10 日
    @ikw 感觉你提的建议 学到了新知识,后面更新优化
    BlackkCCCat
        8
    BlackkCCCat  
       2025 年 12 月 10 日
    终于看到了一个和 Mac 端 pastebot 有类似功能的剪切板 app 了,pastebot 是支持 awk 等命令来扩展剪切板内容,强
    BlackkCCCat
        9
    BlackkCCCat  
       2025 年 12 月 10 日
    @BlackkCCCat star 了,但是我看目前好像不支持像常规剪切板 app 一样的极简模式或快捷面板( issue 有人提),希望能尽快支持
    snso
        10
    snso  
    OP
       2025 年 12 月 11 日   1
    @ikw 识别成文件问题已解决发布了
    Wcowin
        11
    Wcowin  
       2025 年 12 月 11 日
    好强,向你学习 我最近是开发的一款转为 Mac 的粘贴板工具 https://github.com/Wcowin/OneClip
    liuliuliuliu
        12
    liuliuliuliu  
    PRO
       2025 年 12 月 12 日
    20M 对于一个剪切板工具来说还是大了点……
    litianyunq
        13
    litiayunq  
       2025 年 12 月 12 日
    参考下 iCopy 这种快捷展示模式可以不(虽然也是参考别人的),大部分情况不需要专门唤起窗口,快捷展示更人性化。
    snso
        14
    snso  
    OP
       2025 年 12 月 12 日
    @litianyunq 已经安排上了 过几天就可以上了
    stinkytofux
        15
    stinkytofux  
       2025 年 12 月 12 日
    算了, 实在是不想连剪贴板工具都跑在浏览器上.
    YsHaNg
        16
    YsHaNg  
       2025 年 12 月 12 日 via iPhone
    阮一峰是啥
    maemolee
        17
    maemolee  
       2025 年 12 月 12 日
    有点意思,装了看看
    diudiuu
        18
    diudiuu  
       1 月 4 日
    go 那个 sqlite 驱动换下 cgo 有点恶心
    diudiuu
        19
    diudiuu  
       1 月 4 日
    snso
        20
    snso  
    OP
       1 月 4 日
    @canteon 其它地方也用到了 CGO ,sqlite 换了,也不能完全去除 CGO 。然后我开发时没有什么影响( Mac 系统),不知道你那边是什么问题
    eluotao
        21
    eluotao  
       1 月 4 日
    感谢你的软件,挺好的。
    1 、脚本管理的按钮,直接放到设置 主界面旁边,可以直接点击进入脚本管理界面,更快。适合频繁操作的情况。
    2 、可以设置组合按钮,左边是点击进入脚本管理,右边点击新增脚本。
    3 、可以自定义脚本的摆放顺序和位置。目前设置顺序好像只要新增脚本,还是会在最前面。按道理设置好 1 2 3 的位置,之后添加都是在脚本的后面才对。

    关于脚本搜索 一键添加,后期慢慢优化吧。
    snso
        22
    snso  
    OP
       1 月 4 日
    @eluotao 感谢反馈
    脚本顺序的调整,我是放在脚本管理第一列(顺序),那个是输入框是可以自己调整的排序位置
    脚本市场现在已经上线了,可以一键安装
    eluotao
        23
    eluotao  
       1 月 4 日
    @snso #22



    你看我设置的效果,明显是倒序的。
    eluotao
        24
    eluotao  
       1 月 4 日
    建议直接改成拖动顺序的方式,不要设置手动设置数字,如果脚本多,数字就不靠谱,每次都要重新设置所有脚本顺序的数字,拖动简单省事。每次添加就默认在最后,需要调整顺序,直接手动拖动即可。
    snso
        25
    snso  
    OP
       1 月 4 日
    @eluotao 哈哈 是的 我就是按倒序排的,我的想法是新加的排在最前面
    snso
        26
    snso  
    OP
       1 月 4 日
    @eluotao 可以的 马上安排
    eluotao
        27
    eluotao  
       1 月 4 日
    1 、小建议,针对手动运行的脚本,在软件界面的时候直接可以针对当前的复制的内容,使用快捷键触发运行脚本的窗口选择,然后在通过数字键快速选择某个脚本运行。这样可以减少两次鼠标移动和点击。

    操作流程:进入软件界面->选择任意的剪切板历史内容->快捷键触发打开脚本选择窗口->数字键选择相应脚本,无需使用鼠标即可完成,符合大多数 apple 的用户习惯。

    至于处理完的数据,是否支持自动复制结果 还是不复制结果,这个不重要,取决于脚本的处理方式。可以设置一个固定的返回变量 copy_text ,只要返回到这个变量 就表示需要复制的处理文本,那可以根据设置触发自动复制,如果只是显示处理结果,那软件默认不执行复制操作。
    snso
        28
    snso  
    OP
       1 月 4 日
    @eluotao
    1 、command+r 可以弹出脚本选择框。command+数字 可以选择执行的脚本。 你如果是 windows 系统,快捷键是 control
    2 、复制的功能可以在脚本里实现,有提供对应的 API ,csCopyText('要复制的文本内容');
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5893 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 02:51 PVG 10:51 LAX 19:51 JFK 22:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86