You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Espanso替换规则终端外失效:URL丢失冒号问题排查

Espanso替换URL丢失冒号的原因及解决方法

问题场景

我为Espanso编写了调用Imgflip API获取梗图URL的替换脚本,配置片段如下:

- regex: ":spongebob\((?P<meme>.*)\)"
    replace: "{{meme_result}}"
    vars:
      - name: meme_result
        type: shell
        params:
          cmd: "curl -s --request POST 'https://api.imgflip.com/caption_image?template_id=182442076&text0={{meme}}&username=user&password=paswword' | jq -r '.data.url'"

curl配合jq能正确提取https://i.imgflip.com/6ybmkf.jpg这类完整URL,终端中执行正常,但在表单等非终端场景,输入:spongebob(sd)后得到的URL会丢失冒号,变为https//i.imgflip.com/6ybxtu.jpg,无法正常访问。

原因分析

这是Espanso的剪贴板格式处理逻辑导致的:

  • 非终端场景下,Espanso默认使用富文本/HTML格式插入内容,部分应用解析这类格式时,会误将URL中的:识别为富文本标记的一部分并过滤;
  • 或者Espanso在处理shell输出文本时,对特殊字符做了不必要的转义/过滤操作。

解决方法

方法1:强制使用纯文本模式输出

在规则中添加force_mode: "text",让Espanso始终以纯文本格式插入内容,避免富文本解析的干扰,这是最直接有效的方案:

- regex: ":spongebob\((?P<meme>.*)\)"
    replace: "{{meme_result}}"
    force_mode: "text"  # 强制纯文本模式
    vars:
      - name: meme_result
        type: shell
        params:
          cmd: "curl -s --request POST 'https://api.imgflip.com/caption_image?template_id=182442076&text0={{meme}}&username=user&password=paswword' | jq -r '.data.url'"

方法2:转义URL中的冒号

在shell命令里对提取到的URL进行字符串替换,确保冒号被保留,适合无法修改Espanso规则模式的场景:

cmd: "curl -s --request POST 'https://api.imgflip.com/caption_image?template_id=182442076&text0={{meme}}&username=user&password=paswword' | jq -r '.data.url' | sed 's/:/\\:/g'"

方法3:调整全局配置

如果上述方法无效,检查Espanso全局配置文件(通常路径为~/.config/espanso/config/default.yml),关闭全局HTML格式化:

enable_html_formatting: false

内容的提问来源于stack exchange,提问作者ggonmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:10:30