Mac mini 折腾记(Raycast):(三):Snippets:文本片段快速插入

Snippets:文本片段快速插入

在日常工作中,我们经常需要输入一些重复性的内容:邮箱地址、常用回复、代码模板、个人信息等。每次手动输入不仅效率低下,还容易出错。Raycast 的 Snippets(文本片段)功能可以将这些常用内容保存为模板,通过简短的关键字快速插入,极大提升输入效率。

2.3.1 Snippets 的设计理念

在深入学习 Snippets 的使用方法之前,我们需要理解它的设计理念和适用场景。

与系统文本替换的区别

macOS 系统自带了文本替换功能(系统偏好设置 → 键盘 → 文本),可以将短语自动替换为完整内容。例如,输入 omw 自动替换为 On my way!

Raycast 的 Snippets 与系统文本替换有以下区别:

特性系统文本替换Raycast Snippets
触发方式自动触发(输入后自动替换)手动触发(需要按快捷键)
动态内容❌ 不支持✅ 支持(日期、剪贴板等)
光标定位❌ 不支持✅ 支持
多行内容⚠️ 支持但不直观✅ 完美支持
分类管理❌ 不支持✅ 支持
云端同步✅ iCloud 同步✅ Raycast 云同步(Pro)
搜索功能❌ 不支持✅ 支持

从功能完整性来看,Raycast Snippets 更加强大和灵活。但系统文本替换的自动触发特性在某些场景下更方便(如输入常见的拼写错误自动纠正)。

推荐的使用策略

  • 系统文本替换:用于简短的、高频的、需要自动触发的内容(如 omwOn my way!
  • Raycast Snippets:用于较长的、需要动态内容的、需要精确控制的模板(如邮件模板、代码片段)

两者可以共存,互不冲突。

使用场景分析

Snippets 适用于以下场景:

场景一:邮件模板

客服、销售、HR 等岗位经常需要发送格式固定的邮件。使用 Snippets 可以快速插入邮件模板,只需填写少量个性化内容。

场景二:代码片段

开发者经常需要输入重复的代码结构(如函数模板、配置代码)。使用 Snippets 可以避免手动输入,减少语法错误。

场景三:常用回复

在聊天工具中,某些回复内容会频繁使用(如"收到,马上处理"、“已安排,预计明天完成”)。使用 Snippets 可以快速回复,提升沟通效率。

场景四:个人信息

填写表单时经常需要输入个人信息(姓名、邮箱、电话、地址)。使用 Snippets 可以一键填充,避免重复输入。

场景五:特殊符号

某些特殊符号(如 emoji、数学符号、外文字符)不容易通过键盘输入。使用 Snippets 可以快速插入。

数据同步机制

Raycast 的 Snippets 数据存储在本地,默认不会上传到云端。如果需要在多台设备之间同步 Snippets,有两种方式:

方式一:手动导出导入

在设备 A 上导出 Snippets 为 JSON 文件,传输到设备 B,再导入。这种方式适合偶尔同步的场景。

方式二:云端同步(Pro 版)

升级 Raycast Pro 后,Snippets 会自动通过 Raycast 云端同步到所有登录了同一账号的设备。这种方式适合需要频繁同步的场景。


2.3.2 创建与管理 Snippets

掌握 Snippets 的创建和管理方法是高效使用的基础。让我们从最简单的创建流程开始。

基础 Snippet 创建

步骤 1:打开 Snippets 管理界面

打开 Raycast(Command + Space),输入 create snippet,按 Enter

步骤 2:填写 Snippet 信息

在弹出的表单中填写以下信息:

  • Name(名称):为 Snippet 起一个描述性的名称,如"邮箱地址"
  • Keyword(关键字):触发 Snippet 的快捷输入,如 !email
  • Text(内容):Snippet 的实际内容,如 example@gmail.com

步骤 3:保存

点击 “Create Snippet” 保存。

步骤 4:测试

打开任意文本编辑器(如备忘录、浏览器地址栏),输入 !email,然后按下 Snippet 触发快捷键(默认是 Command + Shift + S),观察是否正确插入了邮箱地址。

关键字设计原则

关键字的设计直接影响 Snippets 的使用效率。一个好的关键字应该具备以下特点:

原则一:简短易记

关键字应该尽可能短,减少输入成本。例如:

  • ✅ 好的关键字:!email!addr!sig
  • ❌ 不好的关键字:!myemailaddress!homeaddressfull

原则二:使用统一前缀

建议所有 Snippet 关键字使用统一的前缀(如 !;/),这样可以:

  • 避免与正常输入内容冲突
  • 形成肌肉记忆,提升输入速度
  • 方便搜索和管理

常见的前缀选择:

  • !:感叹号,容易输入,推荐使用
  • ;:分号,适合英文输入环境
  • /:斜杠,适合习惯 Slack 等工具的用户
  • ..:双点,适合不想使用特殊符号的用户

原则三:使用助记词

关键字应该与内容有明显的关联,方便记忆。例如:

  • 邮箱地址:!email!em
  • 家庭地址:!addr!home
  • 电话号码:!phone!tel
  • 签名:!sig!signature

原则四:分类编码

对于同一类型的多个 Snippets,可以使用分类编码。例如:

  • 邮件模板:!mail1!mail2!mail3
  • 代码片段:!code1!code2!code3

或者使用更具描述性的编码:

  • 邮件模板:!mail-welcome!mail-followup!mail-thanks
  • 代码片段:!code-func!code-class!code-import

分类与标签管理

当 Snippets 数量增多时,分类管理变得非常重要。

使用命名规范

我们可以通过命名规范来组织 Snippets。例如:

  • 工作相关:!work-email!work-sig!work-addr
  • 个人相关:!personal-email!personal-phone
  • 代码相关:!code-func!code-class

这种方式的优点是可以通过搜索快速定位(输入 !work 可以看到所有工作相关的 Snippets)。

导入导出功能

Raycast 支持将 Snippets 导出为 JSON 文件,方便备份或迁移到其他设备。

导出步骤

  1. 打开 Raycast,输入 export snippets
  2. 选择导出位置(如桌面)
  3. 保存为 JSON 文件

导出的 JSON 文件包含所有 Snippets 的信息(名称、关键字、内容、所属 Collection 等)。

导入步骤

  1. 打开 Raycast,输入 import snippets
  2. 选择要导入的 JSON 文件
  3. 确认导入

导入时,如果发现关键字冲突(已存在相同关键字的 Snippet),Raycast 会提示选择:

  • Skip(跳过):保留现有 Snippet,不导入新的
  • Replace(替换):用新的 Snippet 替换现有的
  • Keep Both(保留两者):为新 Snippet 自动生成一个不冲突的关键字

2.3.3 动态占位符的使用

Snippets 的强大之处在于支持动态占位符,可以在插入时自动填充变量内容或提示用户输入。这让 Snippets 不再是静态的文本模板,而是具备了一定的"智能"。

{cursor} 光标定位

{cursor} 占位符用于指定插入 Snippet 后光标的位置。这在需要填写个性化内容的场景非常有用。

使用示例

创建一个邮件问候语 Snippet:

  • Name: “Email Greeting”
  • Keyword: !hi
  • Text: Hi {cursor},\n\nHope this email finds you well.

使用时,输入 !hi 并触发,会插入:

1
2
3
Hi |,

Hope this email finds you well.

光标会自动定位到 | 位置(即 {cursor} 的位置),可以直接输入收件人姓名,无需手动移动光标。

多个占位符

一个 Snippet 中可以包含多个 {cursor} 占位符,但只有第一个会生效。如果需要多个输入点,应该使用自定义变量(见下文)。

{date} 日期插入

{date} 占位符会在插入时自动替换为当前日期。Raycast 支持多种日期格式:

占位符输出示例说明
{date}2025-02-03ISO 格式(YYYY-MM-DD)
{date format="MMMM d, yyyy"}February 3, 2025自定义格式
{date format="yyyy/MM/dd"}2025/02/03斜杠分隔
{date format="dd.MM.yyyy"}03.02.2025点分隔(欧洲格式)
{time}14:30当前时间(24 小时制)
{time format="h:mm a"}2:30 PM12 小时制
{datetime}2025-02-03 14:30日期 + 时间

使用示例

创建一个日志记录 Snippet:

  • Name: “Daily Log”
  • Keyword: !log
  • Text: ## {date format="MMMM d, yyyy"}\n\n{cursor}

使用时,输入 !log 并触发,会插入:

1
2
3
## February 3, 2025

|

这样可以快速创建带日期的日志条目。

日期格式说明

日期格式使用 Unicode 标准的日期格式模式:

  • yyyy:四位年份(2025)
  • yy:两位年份(25)
  • MMMM:完整月份名称(February)
  • MMM:缩写月份名称(Feb)
  • MM:两位月份(02)
  • M:月份(2)
  • dd:两位日期(03)
  • d:日期(3)
  • EEEE:完整星期名称(Monday)
  • EEE:缩写星期名称(Mon)

可以自由组合这些模式创建所需的日期格式。

{clipboard} 剪贴板内容

{clipboard} 占位符会在插入时自动替换为当前剪贴板的内容。这个功能可以将 Snippets 与剪贴板历史结合使用,实现更复杂的文本处理。

使用示例一:Markdown 链接生成

创建一个 Markdown 链接 Snippet:

  • Name: “Markdown Link”
  • Keyword: !link
  • Text: [{clipboard}](https://)

使用流程:

  1. 复制链接文本(如 “Raycast 官网”)
  2. 在编辑器中输入 !link 并触发
  3. 会插入 [Raycast 官网](https://)
  4. 手动补充 URL

使用示例二:代码注释生成

创建一个代码注释 Snippet:

  • Name: “Code Comment”
  • Keyword: !comment
  • Text: // TODO: {clipboard}\n{cursor}

使用流程:

  1. 复制待办事项描述(如 “优化性能”)
  2. 在代码编辑器中输入 !comment 并触发
  3. 会插入:
    1
    2
    // TODO: 优化性能
    |

使用示例三:引用格式化

创建一个引用格式 Snippet:

  • Name: “Quote”
  • Keyword: !quote
  • Text: > {clipboard}\n\n— {cursor}

使用流程:

  1. 复制要引用的文本
  2. 输入 !quote 并触发
  3. 会插入引用格式,光标定位到署名位置

自定义变量

除了内置的占位符,Raycast 还支持自定义变量,可以在插入时提示用户输入。

语法格式

1
{{variable_name:default_value}}
  • variable_name:变量名称(用于标识)
  • default_value:默认值(可选)

使用示例:邮件模板

创建一个客户跟进邮件 Snippet:

  • Name: “Follow-up Email”
  • Keyword: !followup
  • Text:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Hi {{name}},

    Thank you for your interest in {{product:our product}}.

    I wanted to follow up on our conversation from {{date format="MMMM d"}}.

    {{message}}

    Best regards,
    {{sender:Your Name}}

使用时,输入 !followup 并触发,Raycast 会依次提示输入:

  1. name:客户姓名(必填)
  2. product:产品名称(默认值 “our product”)
  3. message:邮件正文(必填)
  4. sender:发件人姓名(默认值 “Your Name”)

填写完所有变量后,会插入完整的邮件内容。

变量的高级用法

多行变量

变量支持多行输入,适合邮件正文等较长内容:

1
2
3
4
{{message:
Please enter your message here.
You can use multiple lines.
}}

条件变量

虽然 Raycast 不直接支持条件逻辑,但可以通过设计多个 Snippets 来实现类似效果。例如:

  • !mail-formal:正式邮件模板
  • !mail-casual:非正式邮件模板

根据场景选择不同的 Snippet。


2.3.4 实战案例集

理论知识掌握后,让我们通过四个真实场景来演示如何创建和使用 Snippets。

场景一:邮件模板快速插入

需求

客服团队需要频繁发送以下类型的邮件:

  1. 欢迎邮件(新用户注册后)
  2. 问题确认邮件(收到用户反馈后)
  3. 解决方案邮件(问题处理完成后)
  4. 满意度调查邮件(问题关闭后)

Snippet 设计

欢迎邮件

  • Keyword: !mail-welcome
  • Text:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Hi {{name}},

    Welcome to {{company:Our Company}}! We're thrilled to have you on board.

    To get started, here are a few resources that might be helpful:
    - Getting Started Guide: {{guide_url}}
    - FAQ: {{faq_url}}
    - Support: support@company.com

    If you have any questions, feel free to reach out. We're here to help!

    Best regards,
    {{sender:Customer Success Team}}

问题确认邮件

  • Keyword: !mail-confirm
  • Text:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Hi {{name}},

    Thank you for reaching out. We've received your inquiry regarding {{issue}}.

    Our team is currently investigating this matter. We'll get back to you within {{timeframe:24 hours}} with an update.

    Ticket ID: {{ticket_id}}

    Best regards,
    {{sender:Support Team}}

解决方案邮件

  • Keyword: !mail-solution
  • Text:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Hi {{name}},

    Good news! We've resolved the issue you reported (Ticket ID: {{ticket_id}}).

    {{solution}}

    Please let us know if this resolves your concern or if you need further assistance.

    Best regards,
    {{sender:Support Team}}

满意度调查邮件

  • Keyword: !mail-survey
  • Text:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Hi {{name}},

    We hope your issue has been resolved to your satisfaction.

    We'd love to hear your feedback! Please take a moment to complete this brief survey:
    {{survey_url}}

    Your input helps us improve our service.

    Thank you,
    {{sender:Customer Success Team}}

使用流程

  1. 打开邮件客户端,新建邮件
  2. 输入对应的关键字(如 !mail-welcome
  3. 按下 Snippet 触发快捷键(Command + Shift + S
  4. 依次填写变量(客户姓名、公司名称等)
  5. 检查邮件内容,发送

通过这种方式,可以将邮件撰写时间从 5-10 分钟缩短到 1-2 分钟。

场景二:代码片段管理

需求

前端开发者经常需要输入以下代码结构:

  1. React 函数组件模板
  2. useState Hook 声明
  3. useEffect Hook 声明
  4. API 请求函数模板
  5. 错误处理代码

Snippet 设计

React 函数组件模板

  • Keyword: !react-component
  • Text:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import React from 'react';

    interface {{ComponentName}}Props {
    {cursor}
    }

    export const {{ComponentName}}: React.FC<{{ComponentName}}Props> = (props) => {
    return (
    <div>
    {{ComponentName}}
    </div>
    );
    };

useState Hook

  • Keyword: !use-state
  • Text:
    1
    const [{{stateName}}, set{{StateName}}] = useState<{{type:any}}>({{initialValue:undefined}});

useEffect Hook

  • Keyword: !use-effect
  • Text:
    1
    2
    3
    useEffect(() => {
    {cursor}
    }, [{{dependencies}}]);

API 请求函数

  • Keyword: !api-fetch
  • Text:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    const fetch{{FunctionName}} = async ({{params}}) => {
    try {
    const response = await fetch('{{endpoint}}', {
    method: '{{method:GET}}',
    headers: {
    'Content-Type': 'application/json',
    },
    body: JSON.stringify({{body}}),
    });

    if (!response.ok) {
    throw new Error(`HTTP error! status: ${response.status}`);
    }

    const data = await response.json();
    return data;
    } catch (error) {
    console.error('获取数据失败:', error);
    throw error;
    }
    };

错误处理代码

  • Keyword: !try-catch
  • Text:
    1
    2
    3
    4
    5
    6
    try {
    {cursor}
    } catch (error) {
    console.error('操作失败:', error);
    // 处理错误
    }

使用技巧

  1. 组合使用:先插入组件模板,再在组件内部插入 Hook 声明
  2. 快速迭代:使用 Snippet 快速生成基础结构,再根据具体需求修改
  3. 保持一致性:团队成员使用相同的 Snippets,确保代码风格统一

场景三:常用回复话术

需求

在即时通讯工具(Slack、微信、钉钉)中,某些回复内容会频繁使用。使用 Snippets 可以快速回复,提升沟通效率。

Snippet 设计

确认收到

  • Keyword: !ok
  • Text: 收到,马上处理 ✅

已完成

  • Keyword: !done
  • Text: 已完成,请查收 ✓

需要时间

  • Keyword: !time
  • Text: 好的,预计 {{timeframe:今天下午}} 完成,到时通知你

需要更多信息

  • Keyword: !info
  • Text: 了解,能否提供更多信息:{{details}}

会议安排

  • Keyword: !meeting
  • Text: 好的,我们安排 {{date format="MM月dd日"}} {{time}} 开会讨论,地点:{{location:线上会议}}

感谢回复

  • Keyword: !thanks
  • Text: 非常感谢!👍

稍后回复

  • Keyword: !later
  • Text: 收到,我正在处理其他事情,{{timeframe:稍后}} 回复你

使用技巧

  1. 保持简洁:回复话术应该简短明了,避免冗长
  2. 适度使用 emoji:emoji 可以让回复更友好,但不要过度使用
  3. 个性化调整:根据沟通对象(上级、同事、客户)调整语气

场景四:个人信息快速填写

需求

在填写各种表单时,经常需要输入个人信息。使用 Snippets 可以一键填充,避免重复输入。

Snippet 设计

基础信息

  • Keyword: !name

  • Text: 张三

  • Keyword: !email

  • Text: zhangsan@example.com

  • Keyword: !phone

  • Text: 138-0000-0000

  • Keyword: !id

  • Text: 110101199001011234

地址信息

  • Keyword: !addr-home

  • Text: 北京市朝阳区某某街道某某小区 1 号楼 101 室

  • Keyword: !addr-work

  • Text: 北京市海淀区中关村大街 1 号

  • Keyword: !zip

  • Text: 100000

公司信息

  • Keyword: !company

  • Text: 某某科技有限公司

  • Keyword: !title

  • Text: 高级软件工程师

  • Keyword: !dept

  • Text: 技术部

完整信息模板

  • Keyword: !info-full
  • Text:
    1
    2
    3
    4
    5
    姓名:张三
    邮箱:zhangsan@example.com
    电话:138-0000-0000
    地址:北京市朝阳区某某街道某某小区 1 号楼 101 室
    邮编:100000

使用技巧

  1. 分级设计:既提供单项信息 Snippet(如 !email),也提供完整信息模板(如 !info-full
  2. 多场景适配:为不同场景(家庭、工作)创建不同的地址 Snippet
  3. 隐私保护:敏感信息(如身份证号)建议不要保存在 Snippet 中,或使用部分脱敏(如 110101********1234

安全提醒:Snippets 数据存储在本地,但如果开启了云同步(Pro 版),数据会上传到 Raycast 服务器。建议不要在 Snippets 中保存密码、银行卡号等高度敏感信息。


2.3.5 本节小结

本节完成了 Snippets 功能的全面学习,从设计理念到创建管理,再到动态占位符的使用和实战案例。我们掌握了如何设计高效的关键字,如何使用动态占位符创建智能模板,并通过四个真实场景演示了 Snippets 在不同工作场景中的应用。

要点何时使用关键动作
创建 Snippet发现重复输入的内容时create snippet 命令
触发 Snippet需要插入模板时输入关键字 + Command + Shift + S
光标定位需要填写个性化内容时使用 {cursor} 占位符
动态日期需要插入当前日期时使用 {date} 占位符
自定义变量需要用户输入多个字段时使用 {{variable}} 语法