Mac mini 折腾记(Raycast):(三):Snippets:文本片段快速插入
Mac mini 折腾记(Raycast):(三):Snippets:文本片段快速插入
ProriseSnippets:文本片段快速插入
在日常工作中,我们经常需要输入一些重复性的内容:邮箱地址、常用回复、代码模板、个人信息等。每次手动输入不仅效率低下,还容易出错。Raycast 的 Snippets(文本片段)功能可以将这些常用内容保存为模板,通过简短的关键字快速插入,极大提升输入效率。
2.3.1 Snippets 的设计理念
在深入学习 Snippets 的使用方法之前,我们需要理解它的设计理念和适用场景。
与系统文本替换的区别
macOS 系统自带了文本替换功能(系统偏好设置 → 键盘 → 文本),可以将短语自动替换为完整内容。例如,输入 omw 自动替换为 On my way!。
Raycast 的 Snippets 与系统文本替换有以下区别:
| 特性 | 系统文本替换 | Raycast Snippets |
|---|---|---|
| 触发方式 | 自动触发(输入后自动替换) | 手动触发(需要按快捷键) |
| 动态内容 | ❌ 不支持 | ✅ 支持(日期、剪贴板等) |
| 光标定位 | ❌ 不支持 | ✅ 支持 |
| 多行内容 | ⚠️ 支持但不直观 | ✅ 完美支持 |
| 分类管理 | ❌ 不支持 | ✅ 支持 |
| 云端同步 | ✅ iCloud 同步 | ✅ Raycast 云同步(Pro) |
| 搜索功能 | ❌ 不支持 | ✅ 支持 |
从功能完整性来看,Raycast Snippets 更加强大和灵活。但系统文本替换的自动触发特性在某些场景下更方便(如输入常见的拼写错误自动纠正)。
推荐的使用策略
- 系统文本替换:用于简短的、高频的、需要自动触发的内容(如
omw→On 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 文件,方便备份或迁移到其他设备。
导出步骤
- 打开 Raycast,输入
export snippets - 选择导出位置(如桌面)
- 保存为 JSON 文件
导出的 JSON 文件包含所有 Snippets 的信息(名称、关键字、内容、所属 Collection 等)。
导入步骤
- 打开 Raycast,输入
import snippets - 选择要导入的 JSON 文件
- 确认导入
导入时,如果发现关键字冲突(已存在相同关键字的 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 | Hi |, |
光标会自动定位到 | 位置(即 {cursor} 的位置),可以直接输入收件人姓名,无需手动移动光标。
多个占位符
一个 Snippet 中可以包含多个 {cursor} 占位符,但只有第一个会生效。如果需要多个输入点,应该使用自定义变量(见下文)。
{date} 日期插入
{date} 占位符会在插入时自动替换为当前日期。Raycast 支持多种日期格式:
| 占位符 | 输出示例 | 说明 |
|---|---|---|
{date} | 2025-02-03 | ISO 格式(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 PM | 12 小时制 |
{datetime} | 2025-02-03 14:30 | 日期 + 时间 |
使用示例
创建一个日志记录 Snippet:
- Name: “Daily Log”
- Keyword:
!log - Text:
## {date format="MMMM d, yyyy"}\n\n{cursor}
使用时,输入 !log 并触发,会插入:
1 | ## 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://)
使用流程:
- 复制链接文本(如 “Raycast 官网”)
- 在编辑器中输入
!link并触发 - 会插入
[Raycast 官网](https://) - 手动补充 URL
使用示例二:代码注释生成
创建一个代码注释 Snippet:
- Name: “Code Comment”
- Keyword:
!comment - Text:
// TODO: {clipboard}\n{cursor}
使用流程:
- 复制待办事项描述(如 “优化性能”)
- 在代码编辑器中输入
!comment并触发 - 会插入:
1
2// TODO: 优化性能
|
使用示例三:引用格式化
创建一个引用格式 Snippet:
- Name: “Quote”
- Keyword:
!quote - Text:
> {clipboard}\n\n— {cursor}
使用流程:
- 复制要引用的文本
- 输入
!quote并触发 - 会插入引用格式,光标定位到署名位置
自定义变量
除了内置的占位符,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
10Hi {{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 会依次提示输入:
name:客户姓名(必填)product:产品名称(默认值 “our product”)message:邮件正文(必填)sender:发件人姓名(默认值 “Your Name”)
填写完所有变量后,会插入完整的邮件内容。
变量的高级用法
多行变量
变量支持多行输入,适合邮件正文等较长内容:
1 | {{message: |
条件变量
虽然 Raycast 不直接支持条件逻辑,但可以通过设计多个 Snippets 来实现类似效果。例如:
!mail-formal:正式邮件模板!mail-casual:非正式邮件模板
根据场景选择不同的 Snippet。
2.3.4 实战案例集
理论知识掌握后,让我们通过四个真实场景来演示如何创建和使用 Snippets。
场景一:邮件模板快速插入
需求
客服团队需要频繁发送以下类型的邮件:
- 欢迎邮件(新用户注册后)
- 问题确认邮件(收到用户反馈后)
- 解决方案邮件(问题处理完成后)
- 满意度调查邮件(问题关闭后)
Snippet 设计
欢迎邮件
- Keyword:
!mail-welcome - Text:
1
2
3
4
5
6
7
8
9
10
11
12
13Hi {{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
10Hi {{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
10Hi {{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
11Hi {{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}}
使用流程
- 打开邮件客户端,新建邮件
- 输入对应的关键字(如
!mail-welcome) - 按下 Snippet 触发快捷键(
Command + Shift + S) - 依次填写变量(客户姓名、公司名称等)
- 检查邮件内容,发送
通过这种方式,可以将邮件撰写时间从 5-10 分钟缩短到 1-2 分钟。
场景二:代码片段管理
需求
前端开发者经常需要输入以下代码结构:
- React 函数组件模板
- useState Hook 声明
- useEffect Hook 声明
- API 请求函数模板
- 错误处理代码
Snippet 设计
React 函数组件模板
- Keyword:
!react-component - Text:
1
2
3
4
5
6
7
8
9
10
11
12
13import 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
3useEffect(() => {
{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
21const 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
6try {
{cursor}
} catch (error) {
console.error('操作失败:', error);
// 处理错误
}
使用技巧
- 组合使用:先插入组件模板,再在组件内部插入 Hook 声明
- 快速迭代:使用 Snippet 快速生成基础结构,再根据具体需求修改
- 保持一致性:团队成员使用相同的 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:稍后}} 回复你
使用技巧
- 保持简洁:回复话术应该简短明了,避免冗长
- 适度使用 emoji:emoji 可以让回复更友好,但不要过度使用
- 个性化调整:根据沟通对象(上级、同事、客户)调整语气
场景四:个人信息快速填写
需求
在填写各种表单时,经常需要输入个人信息。使用 Snippets 可以一键填充,避免重复输入。
Snippet 设计
基础信息
Keyword:
!nameText:
张三Keyword:
!emailText:
zhangsan@example.comKeyword:
!phoneText:
138-0000-0000Keyword:
!idText:
110101199001011234
地址信息
Keyword:
!addr-homeText:
北京市朝阳区某某街道某某小区 1 号楼 101 室Keyword:
!addr-workText:
北京市海淀区中关村大街 1 号Keyword:
!zipText:
100000
公司信息
Keyword:
!companyText:
某某科技有限公司Keyword:
!titleText:
高级软件工程师Keyword:
!deptText:
技术部
完整信息模板
- Keyword:
!info-full - Text:
1
2
3
4
5姓名:张三
邮箱:zhangsan@example.com
电话:138-0000-0000
地址:北京市朝阳区某某街道某某小区 1 号楼 101 室
邮编:100000
使用技巧
- 分级设计:既提供单项信息 Snippet(如
!email),也提供完整信息模板(如!info-full) - 多场景适配:为不同场景(家庭、工作)创建不同的地址 Snippet
- 隐私保护:敏感信息(如身份证号)建议不要保存在 Snippet 中,或使用部分脱敏(如
110101********1234)
安全提醒:Snippets 数据存储在本地,但如果开启了云同步(Pro 版),数据会上传到 Raycast 服务器。建议不要在 Snippets 中保存密码、银行卡号等高度敏感信息。
2.3.5 本节小结
本节完成了 Snippets 功能的全面学习,从设计理念到创建管理,再到动态占位符的使用和实战案例。我们掌握了如何设计高效的关键字,如何使用动态占位符创建智能模板,并通过四个真实场景演示了 Snippets 在不同工作场景中的应用。
| 要点 | 何时使用 | 关键动作 |
|---|---|---|
| 创建 Snippet | 发现重复输入的内容时 | create snippet 命令 |
| 触发 Snippet | 需要插入模板时 | 输入关键字 + Command + Shift + S |
| 光标定位 | 需要填写个性化内容时 | 使用 {cursor} 占位符 |
| 动态日期 | 需要插入当前日期时 | 使用 {date} 占位符 |
| 自定义变量 | 需要用户输入多个字段时 | 使用 {{variable}} 语法 |




