rime‑ice‑dict‑update (别名 rimeup ),是专门针对雾凇拼音( rime‑ice )开发的命令行词库更新工具。雾凇上游仓库持续迭代词库,但原生只能手动下载文件覆盖本地。直接覆盖更新会丢失用户本地新增词条、手动调整过的词频,而简单 git 拉取又会产生大量冲突。

rimeup 采用三方基线合并算法,在拉取上游雾凇词库更新的同时,保留用户本地修改的词条与词频,同时提供整体覆盖模式;更新前自动备份,原子写入防止词库文件损坏,只需一条命令完成词库同步, macOS 、 Linux 、 Windows 均可使用,只处理 dict.yaml 词库文件,不会触碰 schema 、 lua 、 OpenCC 等其它配置文件。

工具定位:只做rime‑ice 词库更新,不管理 Rime 方案脚本、皮肤配置。

核心功能

1. 差异预览,更新前可视化比对

执行rimeup --check,打印表格,清晰展示每一份词库的本地版本、上游版本、上游新增词条数量、本地独有词条数量,让用户在更新前充分掌握变更情况,不会盲目执行更新。

2. 两种更新模式可选

  1. 增量合并模式(推荐):依靠基线快照做三方合并,智能区分「上游改动」和「用户改动」
    • 基线 = 上次同步时上游状态;
    • 本地新增词条、手动调过词频的条目,全部予以保留;
    • 用户未改动的词条跟随上游更新(上游增删、调频全部同步);
    • 上游新增词条合并进本地词库。
  2. 整体覆盖模式:直接完整替换为上游原版词库,丢弃全部本地修改,适合想要纯净上游版本的场景。

3. 安全防护机制

  • 自动备份:每次修改前,把待变更词库备份至时间戳命名备份目录,出错可以回滚;
  • 原子写入:先写临时文件,全部完成再替换原文件,程序中途崩溃不会生成半截损坏 yaml ;
  • 范围隔离:仅仅处理*.dict.yaml词库, schema 、 lua 脚本、自定义符号配置完全不受影响;
  • 本地独有文件跳过:上游仓库不存在、用户自己新增的词库文件,直接跳过,不会删除;
  • 容错解析:个别词库解析异常自动降级为覆盖模式,不会中断整体更新流程。

4. 灵活命令行参数

  • 支持自定义 Rime 用户目录,适配鼠须管、 fcitx5‑rime 、小狼毫;
  • 可指定上游 git 仓库地址、缓存目录、基线目录、备份目录;
  • 零依赖业务库,仅 Python 标准库,系统只需要安装 git 。

增量合并逻辑详解

工具保存一份基线快照(上次同步的上游版本),对每一组「词语 + 编码」进行判断:

词条状态rimeup 处理策略
本地新增(基线、上游均不存在)✅保留用户词条
本地内容等于基线(用户从未修改)⬆️跟随上游更新,上游增删同步生效
本地内容不等于基线(改过词频 / 内容)✅保留用户修改
上游全新词条⬆️合并入本地词库

首次执行增量合并没有基线快照,会保守保留所有和上游不一致的本地词条;第二次之后基线生效,可以做到精准区分改动。本地新增词条会追加在词库末尾,打上注释标记。

安装方式

方式 1 : pipx (推荐,隔离环境)

pipx install git+https://github.com/ryekee/rime‑ice‑dict‑update.git

方式 2 : pip 直接安装

pip install git+https://github.com/ryekee/rime‑ice‑dict‑update.git

方式 3 :单脚本直接运行,无需安装

curl -fsSL https://raw.githubusercontent.com/ryekee/rime‑ice‑dict‑update/main/rimeup.py -o ~/.local/bin/rimeup
chmod +x ~/.local/bin/rimeup

安装完成校验:

rimeup --check

基础使用

rimeup                     # 交互模式,预览差异,选择覆盖/增量合并/不更新
rimeup --check             # 仅预览差异表格,不修改任何文件
rimeup --incremental       # 直接执行增量合并(保留本地改动)
rimeup --overwrite         # 直接整体覆盖为上游原版

# 指定 Rime 目录,非 macOS 平台示例
rimeup --incremental --rime-dir ~/.local/share/fcitx5/rime

更新执行完成后,务必在 Rime 输入法托盘执行重新部署,新的词库才会编译生效。