功能特性

从一个触发词,到一整套文本自动化

Espanso 的基础模型只有「触发器 → 替换内容」,但在这条主线之上,它提供了正则触发、表单、脚本、包管理等扩展能力。下面按能力层次逐项说明,每项都附可运行的配置示例。若还不熟悉这类工具的基本原理,建议先读文本扩展工具指南。

触发层

单触发词、多触发词、整词匹配、大小写传递、正则触发词,以及同一触发词的多选消歧。

内容层

纯文本、多行文本、图片、Markdown 与 HTML,以及可从主题继承的富文本格式。

逻辑层

日期、剪贴板、随机、选择、回显、Shell 命令、外部脚本与表单,可组合出完整的输入流程。

01 · 触发方式

六种触发策略,避免误触与漏触

触发词是你在输入时键入的字符串,本身可以是任意字符组合。社区习惯以 : 开头,因为它几乎不会出现在正常词语的开头,能显著降低误触发概率。

基础与多触发词

一个 trigger 对应一段 replace;需要多个别名时改用 triggers 列表,它们展开为同一段内容。

match/base.yml
matches:
  - trigger: ":tel"
    replace: "0755-8601-XXXX"

  - triggers: [":wx", ":wechat", ":微信"]
    replace: "微信号:espanso_cn"

整词匹配与大小写传递

用于纠错类场景:word: true 只在该词独立成词时触发,不会把 other 误改成 othere;propagate_case: true 会保留你输入时的大小写风格。

match/base.yml
  - trigger: "alh"
    replace: "although"
    word: true
    propagate_case: true

# alh  → although
# Alh  → Although
# ALH  → ALTHOUGH

正则触发词

用 regex 取代 trigger,即可用完整正则语法定义触发条件。Espanso 会把命名分组自动转换为变量,直接写进替换内容或传给脚本。

match/base.yml
  - regex: ":id-(?P<num>\\d{4})"
    replace: "工单编号 #{{num}}"

# 输入 :id-2048 → 工单编号 #2048

命名分组必须写成 (?P<名称>…),缺少 P 不会生效——Espanso 使用的是 Rust regex 语法。

同一触发词的多选消歧

如果多条规则共用同一个触发词,Espanso 不会随机选一个,而是弹出选择框让你挑。签名、报价模板这类有多版本的场景很实用。

match/base.yml
  - trigger: ":sig"
    replace: "此致敬礼,\n张工 · 产品部"
    label: "正式签名"

  - trigger: ":sig"
    replace: "祝好,\n张工"
    label: "简短签名"

02 · 动态内容

八种扩展,让替换内容不再写死

在 vars 中声明变量,再在 replace 里用双花括号引用。变量可以组合使用,也可以声明为全局变量在多个规则间复用。

Espanso 支持的扩展类型
扩展 type 值 主要参数 适用场景
日期 date format、offset、locale、tz 插入今天、昨天、一周后的日期,支持时区
剪贴板 clipboard 无 把当前复制的内容嵌入模板,如链接文本
随机 random choices 从预设列表中随机取一句,避免重复措辞
选择 choice values(可含 label 与 id) 弹窗让你从候选项中挑一个值
回显 echo echo 定义常量,常配合全局变量复用
Shell 命令 shell cmd、shell、trim、debug 执行系统命令并插入标准输出
外部脚本 script args(解释器与脚本路径) 调用 Python、Node、Shell 等任意脚本
表单 form 字段定义 多字段输入,结果可继续传给脚本

日期扩展

format 使用 Rust chrono 的格式串:%Y 年、%m 月、%d 日、%H:%M 时分。offset 以秒为单位,负数表示过去。

match/base.yml
  - trigger: ":nextweek"
    replace: "{{d}}"
    vars:
      - name: d
        type: date
        params:
          format: "%Y年%m月%d日"
          offset: 604800  # 7 天

剪贴板扩展

把复制的内容包进指定格式。$|$ 用于指定展开后光标停留的位置,省去再按方向键的步骤。

match/base.yml
  - trigger: ":link"
    replace: "[{{clip}}]({{url}})$|$"
    vars:
      - name: clip
        type: clipboard
      - name: url
        type: clipboard

关于性能:官方文档明确建议,script 与 shell 只用于执行很快的命令。若脚本耗时较长,展开时会出现可感知的等待,影响输入连贯性。

03 · 表单与脚本

需要填参数时,弹出表单而不是改配置

表单在底层同样以扩展形式实现,但会弹出一个带字段的输入窗口。填入的值不仅能拼进文本,还能作为参数传给脚本,从而把一次展开变成一次小型工作流。

match/base.yml
  - trigger: ":quote"
    form: |
      客户:[[customer]]
      金额:[[amount]] 元
      有效期:[[valid]]
      备注:[[note]]

    form_fields:
      valid:
        type: choice
        values:
          - "30 天"
          - "60 天"
          - "90 天"
      note:
        type: text
        multiline: true
Espanso 表单弹窗截图:邮件模板中嵌入了姓名输入框与回复语气下拉选择,底部为提交按钮
官方文档中的表单示例

表单能做什么

  • 一次填多个字段:用 [[字段名]] 声明占位,Espanso 自动生成对应输入框。
  • 多种控件可选:单行文本、多行文本(multiline: true)、下拉选择(type: choice)与列表框(type: list)。
  • 结果可再次加工:字段值既可直接拼进文本,也能作为参数传给脚本或 Shell 命令。
  • 复杂模板不必复制多份:同一份模板靠填表区分对象,比维护十几条独立规则更易管理。

脚本与命令的边界

  • Shell 命令:默认在 Windows 使用 PowerShell、Linux 使用 bash,macOS 自动探测用户 shell;可用 shell 参数显式指定 bash、zsh、fish、pwsh 等。
  • 外部脚本:官方建议把脚本放在配置目录的 scripts/ 下,用 %CONFIG%/scripts/xxx.py 写路径,换机器不用改。
  • 环境变量:执行时 Espanso 会注入 CONFIG(配置目录路径)以及此前已求值的变量。
  • 调试:给 shell 加上 debug: true 会把执行详情写入日志,用 espanso log 查看。

安全提醒:脚本与 Shell 扩展等价于让 Espanso 以你的用户身份执行命令。只使用自己编写或已审查过的脚本,不要直接安装来源不明的配置包。

04 · 富内容

不只是文字:图片、Markdown 与 HTML

替换内容可以是图片文件,也可以按 Markdown 或 HTML 渲染。这在邮件客户端、笔记软件与在线编辑器中尤其有用——同样的片段在不同程序里保持一致的样式。

插入图片

用 image_path 指向本机图片文件,适用于插入 logo、签名图、流程图截图。路径基于配置目录解析,便于整个配置目录一起迁移。

Markdown 渲染

用 markdown 字段代替 replace,展开时按 Markdown 转为富文本,适合粗体、列表、链接等结构。

HTML 渲染

用 html 字段输出 HTML 片段,配合表格、样式与内联链接,在支持富文本粘贴的程序中保留结构。

兼容性差异:富文本的实际效果取决于目标程序是否接受富文本粘贴。在终端、代码编辑器等纯文本环境中,Espanso 会自动回退为纯文本输出。若某程序表现异常,可为其单独设置 backend: clipboard 或 keys。

05 · 精细控制

为不同程序准备不同的片段库

通过 filter_title 按窗口标题匹配程序,再配合 extra_includes 引入专属片段文件。这样在 IDE 里只出现代码片段,在邮件客户端里只出现话术模板,搜索栏也不会被无关条目塞满。

config/vscode.yml
filter_title: "Visual Studio Code"

extra_includes:
  - "../match/_code_snippets.yml"

backend: "clipboard"

配置的三个层次

  • 默认配置:config/default.yml,对所有程序生效。
  • 程序配置:在 config/ 下新建文件,用 filter_title 或 filter_class 指定目标程序,覆盖默认设置。
  • 片段组织:match/ 下的文件可按主题拆分,用 extra_includes 组合,避免单文件过长。

其他实用开关

  • 退格撤销:展开后立即按退格键可回退,恢复原来的触发词。可用 undo_backspace: false 关闭。
  • 开关快捷键:可自定义一键启用 / 暂停 Espanso,临时避免干扰。
  • 搜索触发:除 Alt + Space 外,也可配置成输入某个字符串唤起搜索栏。

06 · 生态

内置包管理器,片段不必从零写

Espanso 自带包管理器,配合官方包仓库 Espanso Hub 使用。社区的包覆盖颜文字、数学符号、各国变音字符、常用命令行片段等,安装后即可直接触发。

Terminal
# 安装基础颜文字包
espanso install basic-emojis

# 若安装后未自动生效,重启一次
espanso restart

# 查看已安装的包
espanso package list

为什么值得用包

手写几百条符号映射既枯燥又容易出错。包把这类工作交给社区维护:安装一个包,就能获得一整套经过整理的触发词;后续作者更新,你重新安装即可获得改进。

也可以发布自己的包

把片段整理成符合规范的目录结构,附带一份说明文件,就能提交到 Hub 供他人安装。团队内部也可以维护私有包,统一话术与模板版本。需要注意,社区包可能包含脚本,安装前应先审查内容——相关风险说明见常见问题。

客观说明

它擅长什么,不擅长什么

为了避免预期偏差,这里如实列出 Espanso 的已知限制。这些信息同样来自官方文档,而非主观评价。

维度 实际情况
图形界面 以文件化配置为主,官方说明 GUI 仍在规划中。日常增删片段需要编辑 YAML 文件。
Linux Wayland 官方标注为实验性支持,需要额外授予 capability 权限;非美式键盘布局必须手动指定。
Windows ARM 目前仅支持 x64 架构,ARM 版本仍在计划中。
云端同步 不提供账号与云同步,跨设备需自行用 Git、网盘或同步工具管理配置目录。
移动端 仅面向桌面系统,没有 iOS 或 Android 版本。
长耗时脚本 同步执行,脚本越慢展开等待越明显,官方建议只用于快速命令。

如果你更看重图形界面、团队共享或移动端支持,这几项限制可能直接影响选型。完整的横向对比与替代方向见 工具对比与选型;各项限制的具体应对方法见 常见问题;想知道这类工具与输入法的本质区别,可先读 文本扩展工具指南。

功能已了解,接下来装起来试试

安装包 5–19 MB,装完即可用内置的 :espanso 示例验证是否生效。

使用指南