CopyQ 命令分享

CopyQ

CopyQ 是一款开源的、跨平台剪贴板管理工具,支持 Windows、macOS、Linux,可以帮你管理保存在剪贴板中的多个文本、图像、HTML 等格式内容,并在需要的时候快速检索,支持全局快捷键、自定义外观、标签、多标签页(分类)、编辑等功能,还支持自动运行命令,比如检测到网页链接则自动添加标签等高级功能。

强大的自定义功能是 CopyQ 区别其他常见剪贴板增加工具的,CopyQ 拥有强大的命令行和脚本接口、可以创建命令,类似具备脚本编辑的软件有收费软件 ClipboardFusion

CopyQ 可通过菜单、快捷键或剪贴板内容更改时执行的自定义操作:

创建命令的方法:

  1. 打开命令对话框(F6快捷键),
  2. 点击“添加”按钮,选择预定义命令或创建新命令。
  3. (可选)更改命令详细信息(快捷方式、名称),
  4. 单击“确定”保存命令。

命令的保存和分享

你可以导入导出备份文件的方式,也可以使用粘贴命令的方式导入其他人分享的命令。

你可能会遇到类似这样的代码:

[Command]
Name=Show/hide main window
Command=copyq: toggle()
Icon=\xf022
GlobalShortcut=ctrl+shift+1

这段代码表示 CopyQ 中可以使用的一个命令(具体来说,它会在按下 Ctrl+Shift+1 时打开主窗口)。要在 CopyQ 中使用此命令:

  1. 复制以上代码。
  2. 打开“命令”对话框(F6 快捷键)。
  3. 点击对话框底部的“粘贴命令”按钮。
  4. 点击“确定”按钮。

(现在你应该可以使用 Ctrl+Shift+1 打开主窗口了。)

要共享您的命令,您可以从“命令”对话框的命令列表中选择命令,然后按“复制选择项”按钮(或直接按 Ctrl+C)。

访问开源共享的命令示例
查看如何编写命令的帮助文档


我分享一下自用的 CopyQ 脚本命令,也欢迎大家补充分享自己的脚本命令:

将换行符转为一行,尤其适合将复制的多行标题文字设为文件名时

[Command]
Name=多行粘贴为一行
Command="
    copyq: 
    var text = str(clipboard()); 
    // 使用正则表达式替换所有类型的换行符为一个空格
    var cleaned = text.replace(/\\r\\n|\\r|\\n/g, ' '); 
    //setData('text/plain',cleaned)
    copy(cleaned)
    copySelection(cleaned)
    paste()"
IsGlobalShortcut=true
Icon=
GlobalShortcut=ctrl+shift+r

将带格式内容粘贴为纯文本,尤其粘贴到Word和WPS时去掉格式

[Command]
Name=剪贴板粘贴为纯文本
Command="
    copyq: 
    var text = clipboard()
    copy(text)
    copySelection(text)
    paste()"
IsGlobalShortcut=true
Icon=
GlobalShortcut=ctrl+shift+t

自己找一个单击.wav文件,放到CopyQ所在文件夹即可

[Command]
Name=复制时发声
Command="
     powershell:
     (New-Object Media.SoundPlayer \"单击.wav\").PlaySync()
    "
Automatic=true
Icon=

多个剪贴项合并为一个剪贴项,可根据需要修改代码

[Command]
Name=合并条目
Command="
    copyq:
    const separator = '\\n';            //合并项目用换行分开
    //const separator = ' ';               //合并项目用空格分开
    var sel = new ItemSelection().current();
    const texts = sel.itemsFormat(mimeText);
    sel.selectAll();
    add(texts.join(separator));
    sel.invert();
    selectItems(sel.rows()[0]);"
InMenu=true
Icon=
Shortcut=ctrl+j

复制的项目带窗口标题的Tag标记,用来区分复制来源

[Command]
Name=显示窗口标题
Command="
    copyq:
    var window = str(data('application/x-copyq-owner-window-title'))
    var tagsMime = 'application/x-copyq-tags'
    var tags = str(data(tagsMime)) + ', ' + window
    setData(tagsMime, tags)"
Automatic=true
Icon=

复制的项目带复制时间的Tag标记,用来区分什么时候复制的

[Command]
Name=显示复制时间
Command="
    copyq:
    var time = dateString('yyyy-MM-dd hh:mm:ss')
    setData('application/x-copyq-user-copy-time', time)

    var tagsMime = 'application/x-copyq-tags'
    var tags = str(data(tagsMime)) + ', ' + time
    setData(tagsMime, tags)"
Automatic=true
Icon=
6 个赞

张小龙什么货色?龙哥我只认小恐龙


成品1,来自小众软件论坛

[Command]
Name=ctrl+1-9粘贴最近n项
Command="
    copyq:
    var n = str(data(mimeShortcut)).slice(-1)
    select(parseInt(n)-1)
    paste()"
IsGlobalShortcut=true
HideWindow=true
Icon=
GlobalShortcut=ctrl+1, ctrl+2, ctrl+3, ctrl+4, ctrl+5, ctrl+6, ctrl+7, ctrl+8, ctrl+9

成品2,来自作者回复issue

[Command]
Name=official-Trim Whitespace
Command="
    copyq:
    if ( dataFormats().indexOf(mimeUriList) != -1 )
        abort()

    var text = str(input())
    var newText = text.trim()
    if (newText != text) {
        copy(newText)
        paste()
    }"
Input=text/plain
InMenu=true
Icon=

成品3,来自作者回复issue

[Command]
Name=official-html Trim Whitespace
Command="
    copyq:
    if ( dataFormats().indexOf(mimeUriList) != -1 )
        abort()

    var text = str(input())
    var newText = text.trim()
    if (newText != text) {
        copy(newText)
        setData(mimeText, newText)
        removeData(mimeHtml)
        paste()
    }"
InMenu=true
Icon=

模板1,来自作者回复issue

[Command]
Name=official-Template: Modify Selected Text
Command="
    copyq:
    function modifyText(text)
    {
        // TODO: Modify text here!
        return text.replace(/\\n/g, ';')
    }

    copy()

    var text = str(clipboard())
    var newText = modifyText(text)
    if (text == newText)
        abort()

    copy(newText)
    paste()
    "
InMenu=true
Enable=false
Icon=
Shortcut=ctrl+shift+s
GlobalShortcut=ctrl+shift+s

模板2,来自作者回复issue

[Command]
Name=official-Template: Replace in Selection
Command="
    copyq:
    copy();
    const text = str(clipboard());
    if (text) {
      const r1 = 'Text';
      const r2 = 'Replace with';
      const reply = dialog(r1, '', r2, '');
      if (reply) {
        copy(text.replace(new RegExp(reply[r1], 'g'), reply[r2]));
        paste();
      }
    }"
IsGlobalShortcut=true
Enable=false
Icon=
GlobalShortcut=ctrl+alt+r
5 个赞

这些实用吗。。。
我是很早就copyQ转EcoPaste了

1 个赞

实用要看你自己的需求, 比如当你想把html转为md的时候, 你就可以自己写个脚本,而这些,通常其他剪贴板软件是肯定无法实现的。

1 个赞

我会让AI写啊。。。还花时间写脚本吗

1 个赞

当然可以啊, 你也可以让AI写脚本啊。

另外 # EcoPaste 并不支持,而且我测试过 , 它需要WebView2,占用有点高。

1 个赞

我也用CopyQ好久了,单纯是因为占用少,完全没用过CopyQ脚本,这种脚本应该很看场景,比较适合特殊场景的高频需求

感觉低频需求用文本编辑器里的功能就好了,通用的高频需求我也基本整理成了AHK脚本,不过感觉后两个打tag的脚本倒是蛮有用的

2 个赞

ecopaste有啥好处?

官网连个界面截图都没有, 我点下载吧, 没有下载链接….

最后github看了一眼, 太普通了…. 也不用装了.

粘贴板 很多格式的带 预览,文本带原来格式,方便记得哪复制的,搜索 收藏 置顶这些太基础的自然也有

它跟copyq比的优势在哪儿? 颜值吗

我也放两个

[Command]
Name=拆分选项
Command="
    copyq:
    var items = {
        \",\": \",\",
        \"换行\": \"\\n\",
        \"空格\": \" \",
        \"tab\": \"\\t\"
    }
    var sp_name = dialog('.defaultChoice', '', 'Select', Object.keys(items))
    var sp = items[sp_name];
    if (sp == null) {
        sp = sp_name
    }
    popup(sp)
    var data = str(data(mimeText)).split(sp);
    if (data.length > 1) {
        for (var i = 0; i < data.length; ++i) {
            add(data[i].trim());
        }
    }
    "
InMenu=true
Icon=
[Command]
Name=合并选择项
Command="
    copyq:
    var items ={
        \",\": \",\",
        \"换行\": \"\\n\",
        \"回车\": \"\\r\",
        \"空格\": \" \",
        \"tab\": \"\\t\"
    }
    var sp_name = dialog('.defaultChoice', '', 'Select', Object.keys(items))
    serverLog(\"sp_name:\" + sp_name)
    var separator = items[sp_name];
    serverLog(separator)
    if(!separator){
    separator = sp_name
    }
    var sel = new ItemSelection().current();
    const texts = sel.itemsFormat(mimeText);
    sel.selectAll();
    add(texts.join(separator));
    sel.invert();
    selectItems(sel.rows()[0]);"
InMenu=true
Icon=
Shortcut=space
1 个赞

嗯 这个可能更多是copyQ不好看 不是ecoPaste多好看 ant 也就那样

我也来凑个热闹 :grin:GFDGIT/CopyQ_lazy: 个人的CopyQ仓库,包括命令和配置。

4 个赞

那window下 clipcache是最好的. 支持粘贴输出的时候使用 特定应用的特定快捷键输出, 比如有些term只支持(alt+enter)粘贴.

所有clip都是挂在树上的, 还可以自己建分类树, 你说的预览是默认的.

使用sqlite数据库存储, 二次调用也很方便.

copyq 就有两个缺陷

1 同步比较麻烦 , ditto 局域网内可以实时. 还可以复制文件

2 有部分太大的对象复制,有少数情况程序会崩. ditto几乎没崩过.

别闹了。

EcoPaste 碰瓷不了 CopyQ。

功能深度和强大性不在一个层面上。

搁着讨论UI,审美这东西见仁见智,但我不觉得它比 CopyQ 好看。讲真,用这种 Web 风设计,做成这样不叫简约,叫简陋。

性能。内存占用被 CopyQ 秒。

so,自己享受就好

从一段文字中提取百度网盘分享链接并拼接提取码
必须连同提取码一起复制,不然会出错
仅修改当前剪贴板,不修改 CopyQ 内的条目

[Command]
Name=百度云链接
Match=(https?:\\/\\/pan\\.baidu\\.com\\/s\\/[\\w\\-]+)
Command="
    copyq:
    var text = str(clipboard());
    var singlelinetext = text.replace(/\\r\\n|\\r|\\n/g, '')
    var exp = /(.*)(https?:\\/\\/pan\\.baidu\\.com\\/s\\/[\\w\\-]+)(.*)(\\w{4})(.*)/g;
    var link = singlelinetext.replace(exp,\"$2?pwd=$4\");
    copy(link);
    "
Input=text/plain
Automatic=true
Icon=
2 个赞

亲测无感且好用

多行粘贴为一行这个脚本,看起来只能在全局直接使用;不知道如何修改才能在呼出菜单针对选中的条目使用它?

官方有个仓库,里面有很多命令:copyq-commands

1 个赞