☰
Espanso应用专属文本补全规则配置指南
2026/11/3 14:16:38 网站建设 项目流程

1. 为什么需要应用专属的文本补全规则

在日常工作中,我们经常遇到这样的场景:同一个文本缩写,在不同应用中需要展开成不同的内容。比如在邮件客户端输入":sig"可能希望展开为正式的公司签名,而在聊天软件中可能只需要简短的姓名缩写。这就是espanso的filter_exec和extra_includes功能大显身手的地方。

espanso作为一款跨平台的文本扩展工具,其强大之处在于可以根据当前焦点应用动态调整补全规则。想象一下这样的工作流:

  • 在VS Code中输入":pyfor"自动展开为Python的for循环模板
  • 在Chrome地址栏输入相同的":pyfor"却没有任何反应
  • 在Slack中":thanks"展开为英文感谢语,而在微信中却展开为中文感谢语

这种智能的上下文感知能力,正是通过应用专属配置实现的。它不仅避免了误触发,还能针对不同场景提供最合适的文本扩展。

2. 配置应用专属补全的核心要素

2.1 理解filter_exec的工作原理

filter_exec是espanso识别当前应用的钥匙。它的值应该是目标应用的进程名或窗口标题。在Windows上可以通过任务管理器查看进程名,在macOS上可以使用以下命令获取当前前台应用的信息:

osascript -e 'tell application "System Events" to get name of first application process whose frontmost is true'

Linux用户则可以使用xprop工具:

xprop -id $(xdotool getactivewindow) WM_CLASS

常见应用的filter_exec值示例:

  • VS Code: "Code" (Windows/Linux) 或 "Visual Studio Code" (macOS)
  • Chrome: "chrome" (Windows/Linux) 或 "Google Chrome" (macOS)
  • Slack: "slack" (全平台)

2.2 组织你的补全规则文件

合理的文件结构是管理复杂补全规则的基础。建议采用这样的目录结构:

~/.config/espanso/ ├── config/ │ ├── chrome.yml # Chrome专属配置 │ ├── vscode.yml # VS Code专属配置 │ └── default.yml # 默认配置 └── match/ ├── _email.yml # 邮件模板(带_表示不自动加载) ├── _code.yml # 代码片段 └── common.yml # 通用补全规则

带下划线前缀的文件(_email.yml)不会被自动加载,需要通过extra_includes显式引入,这给了我们更精细的控制权。

3. 实战:为VS Code配置专属代码片段

3.1 创建代码片段文件

首先在match目录下创建_code.yml:

# ~/.config/espanso/match/_code.yml matches: - trigger: ":pyfor" replace: | for i in range(10): {{cursor}} vars: - name: cursor type: cursor

注意文件名带下划线,这样它不会自动加载干扰其他应用。

3.2 配置VS Code专属规则

创建config/vscode.yml:

# ~/.config/espanso/config/vscode.yml filter_exec: "Code|Visual Studio Code" extra_includes: - "../match/_code.yml"

这里使用了正则表达式"Code|Visual Studio Code"来匹配不同平台下的VS Code进程名。

3.3 验证配置效果

  1. 重启espanso服务使配置生效:
    espanso restart
  2. 在VS Code中键入":pyfor"应该会展开为for循环模板
  3. 在其他应用中键入":pyfor"应该不会有反应

4. 高级配置技巧与排错指南

4.1 处理多应用共享规则的情况

当多个应用需要共享同一组补全规则时,可以使用YAML的锚点(anchors)和引用(aliases)来避免重复:

# ~/.config/espanso/config/shared_config.yml base_config: &base extra_includes: - "../match/_shared_rules.yml" chrome_config: <<: *base filter_exec: "chrome" firefox_config: <<: *base filter_exec: "firefox"

4.2 调试filter_exec匹配问题

如果应用专属规则不生效,很可能是filter_exec没有正确匹配。可以:

  1. 检查espanso日志:

    espanso log

    在日志中搜索"Current filter"查看espanso检测到的当前应用信息。

  2. 临时修改配置增加日志输出:

    filter_exec: ".*" extra_includes: - "../match/_debug.yml" log_level: debug

4.3 性能优化建议

当配置大量应用专属规则时,可能会影响espanso的响应速度。以下优化策略很实用:

  1. 合并相似应用的配置:

    filter_exec: "chrome|firefox|edge"
  2. 使用更精确的正则表达式避免过度匹配:

    # 好 - 精确匹配VS Code主进程 filter_exec: "^Code$" # 不好 - 可能匹配到其他含"Code"的应用 filter_exec: "Code"
  3. 将不常用的规则移到按需加载的带下划线文件中

5. 实际案例:为开发环境定制智能补全

5.1 终端专属命令补全

为iTerm2或Windows Terminal配置常用命令:

# ~/.config/espanso/config/terminal.yml filter_exec: "iTerm2|WindowsTerminal" extra_includes: - "../match/_terminal.yml"

_terminal.yml内容示例:

matches: - trigger: ":gpush" replace: "git push origin $(git branch --show-current)" - trigger: ":dockerps" replace: "docker ps --format 'table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'"

5.2 数据库客户端中的SQL模板

为DBeaver或TablePlus配置SQL片段:

# ~/.config/espanso/config/sql_client.yml filter_exec: "DBeaver|TablePlus" extra_includes: - "../match/_sql.yml"

_sql.yml内容示例:

matches: - trigger: ":seljoin" replace: | SELECT {{table1}}.*, {{table2}}.* FROM {{table1}} JOIN {{table2}} ON {{table1}}.id = {{table2}}.{{table1}}_id WHERE {{cursor}} vars: - name: table1 type: input params: prompt: "主表名" - name: table2 type: input params: prompt: "关联表名" - name: cursor type: cursor

5.3 跨平台配置同步方案

如果你在多台设备上使用espanso,可以通过以下方式保持配置同步:

  1. 将配置目录放入云同步服务(Dropbox, iCloud等)
  2. 创建符号链接:
    ln -s ~/Dropbox/espanso ~/.config/espanso
  3. 在每台设备上安装espanso时指向同一同步目录

我在实际使用中发现,将match目录按功能分类(_email.yml, _code.yml等)比按应用分类更易于维护,因为同一组片段可能被多个应用共享。同时,为每个主要应用创建独立的config文件(chrome.yml, vscode.yml)可以让配置更加清晰。

当配置不生效时,最常见的错误是filter_exec没有正确匹配应用进程名。这时查看espanso日志是最快的排错方法。另外,记得在修改配置后执行espanso restart命令使更改生效。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询