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
相关产品推荐
相关产品推荐

