# 片段

> 保存常用的 SQL 和命令文本，用参数和当前日期时间展开后复制，在多台 Mac 之间共用一个片段库，或从其他应用直接创建片段。

---

LLMS 索引： [llms.txt](/llms.txt)

---

片段是常用的 SQL、命令或说明文字，保存在片段库中。用的时候填好参数，复制到剪贴板，再粘贴到需要的地方。Crib 不会在其他应用里自动展开片段。

## 片段库 {#library}

片段库在“设置 › 片段”中，“文件 › 打开片段库”直接打开这一页。

- 顶部的“启用片段”和“在搜索结果中显示片段”都勾选时，片段才出现在主搜索结果中。
- 列表上方可以按名称、触发词或正文搜索，也可以按标签筛选。
- “新建片段…”新建；“更多操作”菜单中有“从剪贴板新建…”“导入片段库…”“导出片段库…”。
- 选中一个片段后可以“复制”“复制原文”“编辑…”“创建副本”或“删除”。

“文件”菜单中的“新建片段…”和“从剪贴板新建片段…”也会打开这一页并直接进入编辑。

## 新建与编辑 {#edit}

| 字段 | 规则 |
| --- | --- |
| 名称 | 必填，1–80 个字符，不能与其他片段重名（不分大小写） |
| 触发词 | 可选，1–32 个小写字母、数字、`-` 或 `_`，以字母开头，不能重复；搜索时也会匹配 |
| 语言 | 默认 `SQL`，最多 32 个字符；决定是否按 SQL 着色 |
| 标签 | 用逗号分隔，最多 20 个，每个不超过 40 个字符 |
| 正文 | 最多 1,000,000 个字符 |

新片段的正文默认是 `SELECT * FROM __TABLE__;`，可以直接改。

### 编辑器按键 {#editor-keys}

| 按键 | 作用 |
| --- | --- |
| Tab | 在光标处插入 4 个空格；选中多行时整体增加缩进 |
| ⇧ + Tab | 每行去掉一个行首 Tab 或最多 4 个空格 |
| ↩ | 换行 |
| ⌘ + ↩ | 保存 |
| ⌃ + Tab / ⌃ + ⇧ + Tab | 离开正文，移到下一个 / 上一个控件 |

正文上方也有“增加缩进”“减少缩进”按钮。编辑器不会把引号、破折号自动替换成排版符号；每个编辑器有自己的撤销记录。用中文输入法选词时，保存会等组合输入结束后再进行。

## 参数与展开 {#placeholders}

正文中用分隔符括起的词是参数，复制时填写：

```sql
SELECT pg_size_pretty(pg_total_relation_size('__TABLE__'));
-- 生成于 @date @time
```

- 默认分隔符是两个下划线，`__TABLE__` 就是名为 TABLE 的参数。同名参数出现多次，只填一次。
- 参数名不能含空格或换行；只有开头没有结尾的分隔符按普通文字处理。
- `@date` 和 `@time` 换成复制时的日期和时间，默认格式分别是 `MM.dd.yyyy` 和 `HH:mm:ss`。

分隔符和两种格式在“设置 › 片段”中修改。分隔符是 1–8 个字符，不能含字母或数字。日期格式点“查看写法”可以看到 `yyyy`、`MM`、`dd`、`HH`、`mm`、`ss` 等写法和示例，修改后要点“应用”才生效。

复制一个有参数的片段时，会打开“填写参数”：

1. 逐个填写参数。确实要留空的，勾选该参数旁的“留空”。
1. 下方“预览”实时显示结果。
1. 全部参数填好或标为留空后，按 ⌘ + ↩ 或点“复制”。
{.steps}

没有参数的片段直接复制。“复制原文”不替换参数和日期时间，原样复制正文。

## SQL 着色 {#syntax-highlighting}

语言写成 `SQL`、`PostgreSQL`、`Postgres`、`pgsql`、`PLpgSQL` 或 `PL/pgSQL`（不分大小写）时，编辑器、片段详情和参数预览按 SQL 着色：关键词、字符串、带引号的标识符、注释、数字和 `$1` 这类位置参数，包括 `E'…'` 字符串、`$$` 引用和嵌套注释。

着色只是阅读辅助，不检查 SQL 是否正确。其他语言按普通文本显示。

## 在搜索结果中 {#in-search}

搜索框有内容时，名称、触发词、正文、语言或标签中含查询文字的片段，显示在结果最上方的“片段”分组中。右键可以“复制正文”“展开并复制…”或“打开片段库”。

“设置 › 片段”中关闭“在搜索结果中显示片段”即可隐藏；单个[搜索方案](/docs/guide/search/#profiles)也可以关闭“在结果中显示片段”。

## 从其他应用创建 {#services}

在其他应用中选中文字，选“服务 › 在 Crib 中创建片段”，Crib 打开新建片段，正文是选中的文字，名称是“所选文字片段”，确认后保存。菜单中没有这一项时的设置办法见[系统服务](/docs/integrations/services/)。

## 片段库文件与共用 {#location}

默认片段库是用户目录中的 `snippets.json`：

```text
~/Library/Application Support/Crib/snippets.json
```

片段、参数分隔符和日期时间格式都保存在这个文件里。在“设置 › 片段”的“片段库”一行可以换文件：

- **另存为…**：把当前片段库另存为新文件，并改用新文件。原文件保留，已有的同名文件不会被覆盖。
- **打开…**：改用一个已有的片段库文件，不合并、不修改原来的库。要把片段合并进当前库，用“导入片段库…”，冲突的片段会自动改名。

当前用的是哪个文件只记在本机，不写进片段库本身。所以可以把片段库放进 iCloud Drive 等同步文件夹，在另一台 Mac 上“打开…”同一个文件。Crib 每两秒检查一次文件，别处的修改会自动出现。文件的传送由同步服务负责。

> [!WARNING] 双机同步未经实测
> 两个 Crib 先后编辑同一个本机文件已经测试过；通过 iCloud Drive、Dropbox 等服务在两台 Mac 之间同步还没有实测。

共用时要注意：

- 在别处被改过的片段，保存会被拒绝，草稿保留，可以“另存为新片段”。副本使用新的标识，触发词清空。
- 删除片段会同时从所有共用这个文件的 Mac 上删除。
- 文件丢失、只写了一半或来自更新版本的 Crib 时，片段库变为只读：已经载入的内容继续显示，从未载入时显示“片段库未载入”。Crib 不会自动新建一个空库代替它。文件恢复或打开另一个有效的库后即可继续编辑。
- 片段库文件上限 8 MiB，必须是普通文件，不能是符号链接。

---

反链：

- [文档](/docs/)
- [搜索](/docs/guide/search/)
- [快捷键](/docs/guide/shortcuts/)
