首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >espanso:每天帮你省掉几百次重复打字的开源工具

espanso:每天帮你省掉几百次重复打字的开源工具

原创
作者头像
小明互联网技术分享社区
发布于 2026-09-21 09:33:03
发布于 2026-09-21 09:33:03
1480
举报
文章被收录于专栏:运维运维

每天打字打到手腕疼的时候,我就在想,这世上有多少重复输入是可以省掉的。

邮箱地址、公司全称、常回的客服话术、固定格式的日期时间、甚至那个该死的邮箱签名——这些东西每天敲几十遍,每个字都是多余的。

图片
图片

后来在 GitHub 上翻到一个叫 espanso 的项目,用了一段时间,觉得值得好好聊聊。

官网:https://github.com/espanso/espanso

01 文本扩展是个什么东西

文本扩展(Text Expander)这个概念不新。macOS 上有个商业软件叫 TextExpander,一年要收几十美金。Windows 上有 PhraseExpress,也有人用 AutoHotkey 凑合。

原理很简单:你设一个关键词,比如「:hi」,敲完它,软件自动把这几个字母替换成「你好,我是XX公司的XXX,很高兴认识你」。

听起来不起眼。但用上手之后会发现,这种省力是全身性的——你不再需要切到记事本找模板复制粘贴,不需要在浏览器里翻收藏夹找邮箱,不需要记住哪个格式的日期时间该怎么手敲。

打几个字母,剩下的交给软件。

图片
图片

espanso 2025 版演示,关键词触发即时替换

02 为什么是 espanso

同类工具不少,espanso 有几个地方不太一样。

跨平台,Windows、macOS、Linux 全支持。这一点直接干掉了一大半竞品。TextExpander 只有 macOS,PhraseExpress 的 Mac 版半死不活,AutoHotkey 是 Windows 独占。在三个系统之间切换的人,espanso 是少有的选择。

100% 本地,不联网。配置文件是本地 YAML,数据不离开你的电脑。没有账号,没有云同步,没有「我们收集了你的使用数据来改善体验」。在这个什么都要上云的年代,这种克制让人安心。

用 Rust 写的。这点不是技术炫耀。Rust 编译出来的二进制文件小、内存占用低、运行速度快。一个常驻后台监听键盘输入的工具,不应该吃 200MB 内存。espanso 不会。

和几乎所有软件兼容。它在系统层面拦截键盘事件,不依赖特定 API 或无障碍接口。这意味着浏览器、终端、代码编辑器、甚至远程桌面里的输入,它都能管。这个兼容性是很多竞品做不到的。

03 配置长什么样

espanso 的配置是纯 YAML 文件,没有图形界面。这点见仁见智,但对程序员来说反而是优点。

最基本的写法长这样:

代码语言:txt
复制
matches:
  - trigger: ":hi"
    replace: "你好,我是张三"
  - trigger: ":mail"
    replace: "zhangsan@example.com"
  - trigger: ":date"
    replace: "{{date}}"
    vars:
      - name: date
        type: date
        params:
          format: "%Y-%m-%d"

敲「:hi」自动变成「你好,我是张三」。敲「:date」变成今天的日期。变量、日期格式、时区都支持,v2.3.0 之后时区可以直接写 IANA 格式,比如「Asia/Shanghai」。

配置文件可以拆分到多个 YAML,按类别管理。比如邮件一个文件、代码片段一个文件、emoji 一个文件。改完保存即生效,不用重启。

04 不只是替换文本

如果只是替换文本,AutoHotkey 也能干。espanso 多了几层东西。

Shell 命令和自定义脚本。触发关键词的时候,不只是替换成固定文本,可以执行 shell 命令,把输出注入到光标位置。比如设一个「:ip」,触发后执行 curl ifconfig.me,直接把你的公网 IP 贴到当前输入框里。不用切到终端复制粘贴了。

搜索栏。快捷词设多了记不住?按 Alt+Space 唤出搜索栏,模糊搜索你的所有片段。这个设计很聪明——你不需要记住几十个触发词,只需要记住 Alt+Space。

Forms。v2 之后加了表单功能,触发关键词后弹出一个表单,填几个字段,值会被填入模板的对应位置。客服回复、邮件模板这种需要填变量的场景,用表单比硬写模板灵活得多。

应用级配置。不同软件可以走不同的替换规则。在代码编辑器里敲「:todo」展开成一段 TODO 注释,在 Slack 里同样的词展开成给同事看的消息。同一个关键词,不同语境不同输出。

包管理器。espanso 有自己的 Hub(hub.espanso.org),可以一键安装社区贡献的包。德语重音符号、数学符号、emoji 全家桶、甚至 XSS payload 模板,都有人打包好了。一行命令安装。

05 谁在维护,还活着吗

开源项目最怕的就是没人维护。espanso 在这一点上还行。

项目由 Federico Terzi 创建,现在有一个五人的维护团队,Lead Maintainer 是 Auca。1649 次提交,14,000+ star,510 个 issue——有的已关闭,有的还在排期。

最新版 v2.4.0 上个月刚发布,重点是 Linux Wayland 兼容性、macOS 稳定性修复和依赖安全升级。v2.3.0 加了时区选择、Markdown 渲染引擎换成了 pulldown-cmark。从版本节奏看,项目在持续迭代,不是那种两年没更新的僵尸仓库。

社区活跃度也不错。Discord 有服务器,Reddit 有 subreddit,GitHub Discussions 有人提功能建议也有人回。开发者、安全研究员、客服、销售都有人在用——因为重复输入这件事,不分行业。

06 该不该用

说了这么多,回到一个实际问题:什么人该装这个。

如果你每天有超过十次输入同一段文字——邮件签名、固定回复、代码模板、地址电话——那装一个试试不亏。

如果你是程序员,espanso 的 YAML 配置 + 脚本扩展 + 包管理器,基本就是给你设计的。

如果你跨平台办公,在 Windows 和 Mac 之间切,espanso 可能是唯一一个两边都能用、配置还能同步的选择。

重复劳动不是努力的证明,是工具没到位。

项目地址:github.com/espanso/espanso

GPL-3.0 协议,Windows、macOS、Linux 全平台,免费。装完花十分钟写几条规则,接下来几年里每天省下来的那几十秒,就是它给你的回报。

07 完整模板办公+程序员

base.yml配置文件内容

代码语言:txt
复制
# ====================== Espanso base.yml 完整模板 办公+程序员 ======================

matches:

  # ========== 基础个人信息 ==========
  - trigger: ":name"
    replace: "小明"

  - trigger: ":phone"
    replace: "13800138000"

  - trigger: ":mail"
    replace: "demo@example.com"

  - trigger: ":addr"
    replace: "江苏省苏州市昆山市XX路XX号\n邮编:215300"

  - trigger: ":sig"
    replace: "此致\n敬礼\n小明\n电话:13800138000\n邮箱:demo@example.com"

  # ========== 日期时间模板 ==========
  - trigger: ":date"
    replace: "{{now}}"
    vars:
      - name: now
        type: date
        params:
          format: "%Y-%m-%d"

  - trigger: ":datetime"
    replace: "{{now}}"
    vars:
      - name: now
        type: date
        params:
          format: "%Y-%m-%d %H:%M:%S"

  - trigger: ":todaycn"
    replace: "{{now}}"
    vars:
      - name: now
        type: date
        params:
          format: "%Y年%m月%d日"

  - trigger: ":week"
    replace: "{{now}}"
    vars:
      - name: now
        type: date
        params:
          format: "%Y-%m-%d %A"

  # ========== Markdown 写作模板 ==========
  - trigger: ":mdlink"
    replace: "[{{cursor}}](https://)"

  - trigger: ":mdimg"
    replace: "![{{cursor}}](url)"

  - trigger: ":mdcode"
    replace: "```{{cursor}}\n\n```"

  - trigger: ":mdtbl"
    replace: "| 字段 | 说明 |\n| ---- | ---- |\n| {{cursor}} |  |"

  - trigger: ":mdquote"
    replace: "> {{cursor}}"

  # ========== Git 提交模板 ==========
  - trigger: ":gitfeat"
    replace: "feat: {{cursor}} 新增功能"

  - trigger: ":gitfix"
    replace: "fix: {{cursor}} 修复问题"

  - trigger: ":gitdocs"
    replace: "docs: {{cursor}} 更新文档"

  - trigger: ":gitref"
    replace: "refactor: {{cursor}} 代码重构"

  - trigger: ":gitstyle"
    replace: "style: {{cursor}} 格式调整,无逻辑变更"

  # ========== SQL 常用片段 ==========
  - trigger: ":sqlsel"
    replace: "SELECT * FROM {{cursor}} WHERE 1=1;"

  - trigger: ":sqlcount"
    replace: "SELECT COUNT(*) FROM {{cursor}} WHERE 1=

default.yml推荐配置(可选)

代码语言:txt
复制
# default.yml

#触发分隔符,输入缩写后按空格/tab/回车触发

trigger_shortcuts:

space

tab

enter

#是否区分大小写

ignore_case: false

#单词边界,防止在单词中间误触发

word_boundary: true

#不启用的应用(示例:VSCode 内禁用,按需开启)

# exclude_apps:

#

"Code"

#最大等待时间

backspace limit: 5

# 自动补全提示(可选)

enable_suggestions: true

修改后重新重载配置

图片
图片

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 01 文本扩展是个什么东西
  • 02 为什么是 espanso
  • 03 配置长什么样
  • 04 不只是替换文本
  • 05 谁在维护,还活着吗
  • 06 该不该用
  • 07 完整模板办公+程序员
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档