RIME 自 librime-1.5(2017 左右)就有了 sync_dir,机制在 rime/home/wiki/UserGuide 和 Mintimate 的 oh-my-rime 英文指南里都写得很清楚。但官方文档默认你已经用了 RIME 很久——跳过了一些”第一次装机”会踩的坑。本文覆盖 Linux / Mac / Windows 三设备 2026 年的工作流,验证在 Debian 13 + macOS Sonoma + Windows 11 上完成。

RIME 同步的机制

同步的最小单位是 *.userdb.txt 快照。当 RIME 接受你打的新词(或者重 deploy 时),就把用户词典的快照写到 sync_dir当前设备的子目录里。installation_id 决定哪个目录是你的。

sync_dir(比如 ~/Dropbox/RimeSync/)下面的布局长这样:

Bash
RimeSync/
├── id-laptop-fred-m2/
│   ├── installation.yaml    # 这台设备 installation_id + sync_dir 的副本
│   ├── default.custom.yaml  # 你手动改过的所有 RIME 根目录 .yaml 文件
│   ├── squirrel.custom.yaml # Mac 才有的那个
│   ├── luna_pinyin.userdb.txt
│   ├── wubi_pinyin.userdb.txt
│   └── ...(每个 active schema 一个 userdb)
├── id-fred-officepc/
│   ├── installation.yaml
│   ├── default.custom.yaml
│   ├── weasel.custom.yaml   # Windows 才有的那个
│   └── ...
└── id-fred-x1carbon/
    └── ...

两点容易忽略:

  1. 静态字典(.dict.yaml 文件、dicts/ 文件夹、Lua 脚本、.gram 语模)都不同步。每个设备的 ~/.local/share/fcitx5/rime/ 里各自维护一份。sync_dir 只装用户改过的 .yaml 和 userdb 快照。想要三台都用 ice / frost / wanxiang,每台都得跑一遍 Plum。
  2. 同步器做的是快照合并,不是文件同步。你点「同步」的时候,RIME 扫所有 id-* 子目录,把每个 <schema>.userdb.txt 读进来并到本地用户词典里。冲突时按 weight 大小胜出——同一短语在笔记本打 2 次、台式机打 3 次,最终台式机的 weight 3 当作”公认值”。

第 1 步 —— 每台设备的 sync_dir 指向同一个目录

挑一个已经在你每台设备上挂载好的云盘目录。Dropbox 是测试最多的方案——RIME 官方示例都用它。iCloud Drive / OneDrive / 坚果云 / Syncthing 也能行,挑你已经装好的那个。

定一个目录名。一般用 RimeSync 放在云盘根下:

  • Linux:~/Dropbox/RimeSync/(视实际挂载点定)
  • macOS:~/Dropbox/RimeSync/
  • Windows:%USERPROFILE%DropboxRimeSync

RIME 的 installation.yaml 在每台设备的 ~/.local/share/fcitx5/rime/ 里,控制这一项。编辑它加 sync_dir

Yaml
# Linux: ~/.local/share/fcitx5/rime/installation.yaml
distribution_name: fcitx5-rime
distribution_version: 5.1.13
install_time: "Tue Jul 14 14:00:00 2026"
installation_id: "thinkpad-x1-linux"      # ← 每台设备不一样(看第 2 步)
sync_dir: "/home/fred/Dropbox/RimeSync"   # ← 本设备绝对路径
rime_version: 1.16.1

Yaml
# macOS Squirrel: ~/Library/Rime/installation.yaml
distribution_name: Squirrel
distribution_version: 0.16.2
install_time: "Tue Jul 14 14:00:01 2026"
installation_id: "macbook-pro-m2"          # ← 不一样
sync_dir: "/Users/fred/Dropbox/RimeSync"
rime_version: 1.8.5

Yaml
# Windows Weasel: %APPDATA%Rimeinstallation.yaml
distribution_name: Weasel
distribution_version: 0.16.2
install_time: "Tue Jul 14 14:00:02 2026"
installation_id: "office-pc-windows"       # ← 不一样
sync_dir: "C:\Users\fred\Dropbox\RimeSync"
rime_version: 1.8.5

三条铁律:

  • 每台 installation_id 必须全局唯一。RIME 拿它当子目录名,撞了的话两台设备的 userdb 会互相覆盖。约定:小写字母 + 数字 + - + _,不带空格、不带中文。半年后 ls ~/Dropbox/RimeSync/ 还能认出来。
  • sync_dir 路径每台系统不一样。Linux 用 /home/...,macOS 用 /Users/...,Windows 用 C:Users...别用 ~/——RIME 的启动方式不同,~ 可能展开成 C:UsersfredAppDataRoaming~ 这种非你想要的路径。
  • Windows 路径 YAML 里有转义。反斜杠是双引号里的转义字符。两种写法都对:单引号包 'C:UsersfredDropboxRimeSync'(不转义),或者直接用正斜杠 'C:/Users/fred/Dropbox/RimeSync' 让 Windows 自己规范化。

改完 installation.yaml 重新 deploy(RIME 只在 deploy 时读它)。

第 2 步 —— installation_id 起个有意义的

RIME 第一次 deploy 时如果 installation_id 是空,会随机生成 UUID(c5f45f7e-3c1c-4257-8ff7-bce78e9b5fb5 那种)。能用,但 ls 看不出来谁是谁。一般都改成有意义的:

Yaml
installation_id: "fred-thinkpad-x1"

RIME 读文件时检查 installation_id 字符——只允许小写字母、数字、-_。官方 wiki 的提醒:

因爲 Rime 要以這個 ID 爲名創建文件夾,因此 ID 不得包含(所有涉及同步的文件系統)文件名中非法的字符;建議不要用中文,只用小寫字母、數字、橫線和下劃線。

打错能改(改完重新 deploy 再 sync),中间会有一个时间窗 sync_dir/id-old-typo/sync_dir/id-fred-thinkpad-x1/ 两个都存在——直接 rm -rf 把孤儿那个删了就行。

第 3 步 —— 第一次同步

第一次最容易懵。流程:

  1. 设备 A 重新 deploy,写好新 sync_dirinstallation_id
  2. 设备 A 上打开 RIME 托盘菜单,点「同步」/「Sync」。RIME 创建 ~/Dropbox/RimeSync/id-fred-thinkpad-x1/ 并把本地 userdb 倒进去。
  3. 等 Dropbox 同步完成(设备 B 上 ls ~/Dropbox/RimeSync/id-fred-thinkpad-x1/ 能看到文件)。
  4. 设备 B 重新 deploy,然后点「同步」。RIME 看本地空用户词典 + A 来的快照,merge,写一份新快照到 B 的子目录。
  5. 搞定。之后 sync 就是点一下的事。

有些发行版的 RIME 端口不在托盘菜单暴露「同步」按钮(比如老版 fcitx5-rime、某些自定义 Linux build)——这时同步动作在两个地方之一:桌面输入法设置 UI;或 CLI librime-ctl(不是每个发行版都带)。macOS Squirrel 主菜单「同步」按钮直接能看到。Linux fcitx5-rime 添加任意 IME 后菜单里有 Rime → 同步...

想全自动的话,把「同步」按钮映射到 rime_deployer --sync,Linux 上挂个 cron / systemd timer:

Bash
# cron.d entry for one user: every 30 min sync
*/30 * * * *  fred  /usr/bin/rime_deployer --sync

注意:自动同步生效前,至少要让两台设备手动点过一次同步让 RIME 认出来对方存在。

同步什么、不同步什么

同步过程的步骤:

  1. sync_dir 下所有 id-* 子目录,把每个 <schema>.userdb.txt 读进来。
  2. RIME 的 user-dict merge 把这些快照合并到内存里。
  3. 写一份新快照到当前设备自己的 id-* 子目录。
  4. 把本地 RIME 根目录里手改过的文件单向 备份到云盘:
    • installation.yaml(必同步)
    • default.custom.yaml(如果在)
    • <schema>.custom.yaml(如果在)
    • 根目录下其他手改过的 *.yaml

不同步(按官方 wiki):

  • 静态 *.dict.yaml 字典
  • lua/ 下的 Lua 脚本
  • wanxiang-lts-zh-hans.gram(或任何 .gram 语模)
  • 社区 schema 自己的 dicts/ 子目录(rime-ice / rime-frost / rime-wanxiang 的拆词表)
  • 编译缓存(build/*.bin
  • 子目录里的配置文件(比如某个 schema 自己的 custom/

不是 RIME 偷懒——这些文件从”配置”角度是静态的,重新装是 setup 的标准流程。想多设备保留同一份 schema 文件,用 git 比用 RIME sync 干净:

Bash
# Linux & Mac 通用:装一次推到私有 git repo
cd ~/.local/share/fcitx5/rime/   # Mac 是 ~/Library/Rime
git init
git add . && git commit -m "starting config"
# 推到私有 GitHub repo;其他设备拉

installation_idinstallation.yaml 里——记得每台 clone 完之后改再 commit。RIME 同步机制用的还是本地那份 installation.yaml,不是 git 里的。

把现有 userdb 迁到一个新 schema

Wiki 上的例子是把 luna_pinyin.userdb.txt(在 stock luna_pinyin 上攒起来的)迁到 rime_mint.userdb.txt(你新切的 oh-my-rime schema)。步骤(与官方 wiki 一致):

  1. 复制 luna_pinyin.userdb.txt 改成新 schema 的文件名。也就是把文件重命名成新 schema ID(oh-my-rime 的话就是 rime_mint.userdb.txt)。
  2. 改文件头的 db_name.userdb.txt 文件顶端附近有 #@/db_name = luna_pinyin 这种注释,把右边改成新 schema 的 ID。
  3. 把改好名字的文件丢到 sync_dir(任意一个 id-* 子目录,或者直接放 sync_dir/)。
  4. 点「同步」。RIME 当它是另一台设备的同步数据并进来。

官方 wiki 提醒的字符编码坑:

如果你之前用的是繁体中文词库,需要先把简转繁做完再迁。小心别把 Tab 全转成空格。

这是真坑:Windows 上 Notepad 或者 IDE 粘贴一句话,悄悄把 tab 转成 4 空格的概率不低,userdb 格式(tab-separated)就静默炸了。任何字符转换之后都得重新 tab 一下验证。

常见坑

「点同步按钮没反应」

三件事 check:

  1. installation.yaml 存在、YAML 能解析。python3 -c "import yaml; print(yaml.safe_load(open('installation.yaml')))" 验证。
  2. sync_dir 路径存在、RIME 进程有写权限。Linux Dropbox 客户端有时挂在 ~/.dropbox-dist/ 而不是 ~/Dropbox/ls -la $sync_dir 看下。
  3. 等。第一次 sync 即使用户词典很小也要 30-60 秒,因为要走合并 pass。开个第二终端 tail -F RIME 日志(echo "$(tail -5 ~/.cache/fcitx5/rime.log)"),看到 “sync completed” 就是跑完了。

「合并后早期自定义词都没了」

sync_dir 下出现了*两个 `id-子目录对应同一台物理机器**。两份里较新的那份被挑了,旧的那份的.userdb.txt被丢。清理:删孤儿那个id-*/` 文件夹,重新点同步。

「两台笔记本都显示同一个 installation_id

说明你编辑 installation.yaml 后两份文件复制到两边再 deploy。同步之前先确保 ID 都改过来。修:在每台机器就地编辑 installation.yaml,重新 deploy,再同步。

「某些 schema 的 userdb 同步了,另一些没」

schema 名字得跟 userdb 文件名匹配。RIME 只同步当前 active 的 schema。如果 rime_ice.userdb.txt 在设备 A 出现了但设备 B 没——说明 B 的 schema_list 里没有 rime_ice。把 rime_ice 加到 default.custom.yamlschema_list 里,deploy,再 sync。

「全新装机 sync 之后所有自定义词都没了」

新装的设备上 deploy 时会从零生成一份 <schema>.userdb.txt,然后 sync 会 merge “空” + 云盘上的(老的、满的)——按 max-weight 解决的话应该不会丢。如果你先 deploy 再 sync先 sync 再 deploy 行为不一样。正确顺序:Sync 先,Deploy 后。如果反了,cloud 还在,重新 sync 一次就回来。

Mac 独有:iCloud Drive 对比 Dropbox

~/Library/Mobile Documents/com~apple~CloudDocs/Rime/ 用法跟 Dropbox 一样,但有一个怪事:Apple 会偶尔重命名移动文件夹(后台 AVFS / MobileSync 进程)。sync_dir 设成 Library/Mobile Documents/... 里的绝对路径,别用 symlink。如果 iCloud 改了路径,RIME 会静默找不到 sync_dir。修:在 installation.yaml 里改同步路径。

常见做法:实际同步目录放 ~/RimeSync-iCloud/,symlink 到 iCloud Drive Documents 目录,installation.yaml 写绝对路径 ~/RimeSync-iCloud/。iCloud 重命名发生,RIME 无感。

Windows 独有:文件锁

Weasel(官方 Windows 端口 小狼毫)历史上有个老问题:RIME 在跑的时候 userdb 文件被锁。设备 B 上 Deploy / Sync 时如果设备 A 上 RIME 还在用,会出现「冲突副本」文件(luna_pinyin.userdb.txt (Fred-PC 的冲突副本 ...))而不是干净的合并。修:sync 窗口期停用另一台 RIME(Rime 暂停)。

多 Windows 设备情况,最干净的模式是 sync 前手动 Rime 暂停 所有机器。

下一篇

三设备同步搭好之后,天然的下一篇是 .gram 语模选型和训练深挖:wanxiang-lts-zh-hans.gram 适合什么场景、小一点的 essay.txt 短句够用吗、librime 1.16 vs 1.17 加载语模有什么区别。评论区告诉我下一篇写不写这个。


参考资料(2026 年 7 月核对):github.com/rime/home/wiki/UserGuide(官方同步文档),github.com/Mintimate/oh-my-rime 英文同步指南(最好的第三方 writeup),deepwiki.com/ssnhd/rime/2.4-synchronization-system(iCloud 上 sync-config 行为分析)。wanxiang-lts-zh-hans.gram 语模文件链接按 RIME-LMDG 上游。

最后修改: 2026年7月14日

作者

评论

发表评论

您的邮箱地址不会被公开。