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/)下面的布局长这样:
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/
└── ...两点容易忽略:
- 静态字典(
.dict.yaml文件、dicts/文件夹、Lua 脚本、.gram语模)都不同步。每个设备的~/.local/share/fcitx5/rime/里各自维护一份。sync_dir只装用户改过的.yaml和 userdb 快照。想要三台都用 ice / frost / wanxiang,每台都得跑一遍 Plum。 - 同步器做的是快照合并,不是文件同步。你点「同步」的时候,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:
# 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# 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# 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 看不出来谁是谁。一般都改成有意义的:
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 步 —— 第一次同步
第一次最容易懵。流程:
- 设备 A 重新 deploy,写好新
sync_dir和installation_id。 - 设备 A 上打开 RIME 托盘菜单,点「同步」/「Sync」。RIME 创建
~/Dropbox/RimeSync/id-fred-thinkpad-x1/并把本地 userdb 倒进去。 - 等 Dropbox 同步完成(设备 B 上
ls ~/Dropbox/RimeSync/id-fred-thinkpad-x1/能看到文件)。 - 设备 B 重新 deploy,然后点「同步」。RIME 看本地空用户词典 + A 来的快照,merge,写一份新快照到 B 的子目录。
- 搞定。之后 sync 就是点一下的事。
有些发行版的 RIME 端口不在托盘菜单暴露「同步」按钮(比如老版 fcitx5-rime、某些自定义 Linux build)——这时同步动作在两个地方之一:桌面输入法设置 UI;或 CLI librime-ctl(不是每个发行版都带)。macOS Squirrel 主菜单「同步」按钮直接能看到。Linux fcitx5-rime 添加任意 IME 后菜单里有 Rime → 同步...。
想全自动的话,把「同步」按钮映射到 rime_deployer --sync,Linux 上挂个 cron / systemd timer:
# cron.d entry for one user: every 30 min sync
*/30 * * * * fred /usr/bin/rime_deployer --sync注意:自动同步生效前,至少要让两台设备手动点过一次同步让 RIME 认出来对方存在。
同步什么、不同步什么
同步过程的步骤:
- 扫
sync_dir下所有id-*子目录,把每个<schema>.userdb.txt读进来。 - RIME 的 user-dict merge 把这些快照合并到内存里。
- 写一份新快照到当前设备自己的
id-*子目录。 - 把本地 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 干净:
# Linux & Mac 通用:装一次推到私有 git repo
cd ~/.local/share/fcitx5/rime/ # Mac 是 ~/Library/Rime
git init
git add . && git commit -m "starting config"
# 推到私有 GitHub repo;其他设备拉installation_id 在 installation.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 一致):
- 复制
luna_pinyin.userdb.txt改成新 schema 的文件名。也就是把文件重命名成新 schema ID(oh-my-rime 的话就是rime_mint.userdb.txt)。 - 改文件头的
db_name行。.userdb.txt文件顶端附近有#@/db_name = luna_pinyin这种注释,把右边改成新 schema 的 ID。 - 把改好名字的文件丢到
sync_dir里(任意一个id-*子目录,或者直接放sync_dir/)。 - 点「同步」。RIME 当它是另一台设备的同步数据并进来。
官方 wiki 提醒的字符编码坑:
如果你之前用的是繁体中文词库,需要先把简转繁做完再迁。小心别把
Tab全转成空格。
这是真坑:Windows 上 Notepad 或者 IDE 粘贴一句话,悄悄把 tab 转成 4 空格的概率不低,userdb 格式(tab-separated)就静默炸了。任何字符转换之后都得重新 tab 一下验证。
常见坑
「点同步按钮没反应」
三件事 check:
installation.yaml存在、YAML 能解析。python3 -c "import yaml; print(yaml.safe_load(open('installation.yaml')))"验证。sync_dir路径存在、RIME 进程有写权限。Linux Dropbox 客户端有时挂在~/.dropbox-dist/而不是~/Dropbox/,ls -la $sync_dir看下。- 等。第一次 sync 即使用户词典很小也要 30-60 秒,因为要走合并 pass。开个第二终端
tail -FRIME 日志(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.yaml 的 schema_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 上游。
评论