emoji shortcode - :smile: 到底是什么意思
本文约 4 分钟读完。
在 Slack 中输入 :fire: 就会出现 🔥。背后的机制就是 emoji shortcode - 一个建立在 Unicode 之上的小巧而强大的约定层。emoji shortcode 是用冒号分隔的短文本字符串,兼容的应用会自动将其转换为 emoji 字形。 它们起源于聊天应用,作为一种无需点击 emoji 选择器的高效输入方式延续至今。
定义
emoji shortcode 是用冒号包裹的文本标识符 (例如 :thumbsup:),应用在渲染或发送时会将其替换为对应的 emoji。 这种替换发生在应用层,而非 Unicode 层。 不同的应用维护着不同的 shortcode 注册表,常见 emoji 有大量重叠,而较少见的 emoji 则存在差异。
历史
shortcode 从早期的文本表情符号 (:)、:D) 和 IRC 时代的昵称补全模式演变而来。 冒号包裹的形式由 Campfire (37signals 的早期聊天应用) 推广,并在 2013 年 Slack 发布时作为核心输入机制被采用。 此后,shortcode 扩展到了 GitHub、Discord、Mattermost、Rocket.Chat 等平台。
主要 shortcode 注册表
CLDR Short Names
Unicode 的 Common Locale Data Repository (CLDR) 为每个 emoji 提供官方短名称,被许多应用用作参考 shortcode 集。 CLDR 名称已本地化为数十种语言,因此「smiling face」在日语、法语、西班牙语等中都有对应译名。
Slack
Slack 维护自己的 shortcode 集,最初源自 EmojiOne (现为 JoyPixels)。Slack 还支持每个工作区上传自定义 emoji, 使用与内置 emoji 相同的冒号语法。一个工作区中的 :lgtm: 可能渲染为自定义审批图标,而在另一个工作区中只是纯文本。
Discord
Discord 使用类似的 shortcode 模型,输入第二个字符后即触发自动补全。自定义服务器 emoji 和动画 emoji 将语法扩展到了 Unicode 字形之外。
GitHub
GitHub 维护着一份有文档记录的 shortcode 列表,用于 issue、pull request、评论和提交消息。 常见的有::white_check_mark: ✅、:warning: ⚠️、:rocket: 🚀、:bug: 🐛。 该列表与 CLDR 名称相似但不完全相同。
Mattermost / Rocket.Chat
开源聊天平台维护自己的注册表,通常与 Slack 的集合兼容以便于迁移。
命名惯例
- 小写字母,单词用下划线分隔:
:smiling_face: - 热门 emoji 的别名:
:+1:和:thumbsup:都指向 👍 - 肤色变体:
:wave:对应默认 👋,某些应用中:wave::skin-tone-3:对应 👋🏽 - 自定义 emoji 在支持的应用中使用相同语法:
:shipit:、:lgtm:、:partyparrot:
shortcode 在哪些场景有效、哪些无效
| 场景 | shortcode 支持 | 备注 |
|---|---|---|
| Slack、Discord | ✅ 原生支持 | 输入时即时转换 |
| GitHub markdown | ✅ 原生支持 | 显示时渲染 |
| Notion、Linear | ✅ 原生支持 | 冒号触发内联选择器 |
| 纯文本文件 | ❌ 不支持 | 保持为字面文本 |
| iMessage、WhatsApp | ❌ 不支持 | 使用系统 emoji 选择器 |
| 电子邮件 (大多数客户端) | ❌ 不支持 | 使用系统选择器 |
实际的效率提升
- 双手不离键盘,无需用鼠标去点选择器
- 输入时可按部分名称搜索
- 自定义工作区 emoji 成为团队的一等词汇
- 可组合性:shortcode 在 markdown、代码审查、异步消息和机器人回复中都能使用
局限性
- 名称在不同应用间存在差异 - 一个工具中的
:thumbsup:在另一个中可能是:+1: - 在应用间复制粘贴会丢失 shortcode (大多数应用在保存时将其转换为 Unicode emoji)
- 纯文本导出会完全丢失自定义 emoji - 它们显示为原始的
:custom_name:文本 - 自动补全偶尔会替换你不想要的 shortcode (尤其是像
:p这样的短 shortcode)
常见误解
- ❌「shortcode 是 Unicode 的一部分」→ ✅ 它们是应用层的约定
- ❌「所有应用都识别相同的 shortcode」→ ✅ 有大量重叠,但也有许多应用特有的名称
- ❌「自定义 shortcode 是可移植的」→ ✅ 它们依赖于定义它们的应用或工作区