Rime定制
🤖 摘要:本文详述基于Git与WebDAV的多端Rime词库同步灾备方案。采用单向定时同步架构规避冲突,借助自动化脚本实现跨平台配置、iOS适配与版本控制。内容涵盖目录规范、核心脚本、冲突处理及恢复流程,并附生产环境避坑指南,助力构建高可用可追溯的词库管理体系。
📌 适用场景:Windows(小狼毫 Weasel) / macOS(鼠须管 Squirrel) / iOS(同文 Tatarin & 仓输入法 Cangjie)
🛠 核心技术栈:<code>Rime 官方同步机制</code> + <code>WebDAV 云盘挂载/同步</code> + <code>Git 版本控制</code> + <code>自动化脚本</code>
⚠️ 核心痛点解决:多端配置碎片化、词库丢失无回滚、WebDAV 实时同步冲突、iOS 沙箱限制
📐 一、架构设计总览
[本地编辑] → Rime Sync Dir (userdb.txt / override.dict.yaml / *.custom.yaml)
↓
[自动化层] → 定时触发 → rclone sync ↔ WebDAV 云盘 ↔ Git Remote (GitHub/Gitee/GitLab)
↓
[灾备层] → Git History (代码级回滚) + WebDAV 多副本 (云盘容灾)
↓
[多端分发] → Windows/macOS/Linux: WebDAV 挂载或脚本拉取
iOS: iCloud 同步(Rime 官方推荐) + Git 冷备
💡 设计原则:
- Git 为主干:保存词库历史、分支、差异对比,支持精确回滚
- WebDAV 为容灾:防止云盘服务商宕机或仓库被误删
- 避免实时双向同步:输入法高频写入易引发冲突,采用 <code>定时单向同步 + Git 冲突检测</code>
📁 二、目录结构规范
rime-sync/
├── .gitignore # 忽略临时文件、二进制缓存
├── sync.sh / sync.ps1 # 自动化脚本
├── restore.sh / restore.ps1
├── docs/ # 说明文档、冲突处理记录
└── rime_data/ # 实际同步内容(软链接或目录映射)
├── default.custom.yaml
├── override.dict.yaml
├── userdb.txt
├── *.userdb.txt
└── ...
✅ <code>.gitignore</code> 示例:
*.dict.yaml.userdb.txt.bak
rime_data/*.txt.lock
rime_data/.DS_Store
rime_data/thumbnail/
*.tmp
*.swp
🛠 三、核心配置步骤
1. 初始化 Git 仓库 & WebDAV 云盘
# 1. 创建远程仓库(GitHub/Gitee/GitLab/私有服务器)
git init
git remote add origin <your-git-url>
# 2. 安装 rclone(WebDAV 同步引擎)
# macOS: brew install rclone | Windows: choco install rclone
rclone config # 添加你的 WebDAV(如阿里云盘/123Pan/Nextcloud/AList)
2. Rime 端配置同步目录
在 <code>default.custom.yaml</code> 中设置本地同步目录:
sync_dir: "%APPDATA%\Rime\rime_sync" # Windows
# 或 ~/Library/Rime/rime_sync # macOS
🤖 四、自动化同步脚本
🔹 macOS / Linux (<code>sync.sh</code>)
#!/bin/bash
set -euo pipefail
SYNC_DIR="$HOME/Library/Rime/rime_sync"
REMOTE_DIR="rclone_webdav:rime-sync/rime_data"
GIT_REPO="$(cd "$(dirname "$0")" && pwd)"
echo "[$(date)] 开始同步..."
# 1. 拉取 Git(避免本地未 push 被覆盖)
cd "$GIT_REPO"
git pull --rebase || echo "⚠️ Git pull failed, continuing with local files"
# 2. rclone sync(单向覆盖 WebDAV)
rclone sync "$SYNC_DIR" "$REMOTE_DIR" --transfers=4 --checkers=8 -v
# 3. Git 提交
cd "$GIT_REPO"
git add -A
if git diff --cached --quiet; then
echo "✅ 无变更,跳过提交"
else
git commit -m "sync: $(date +%F_%T)" --quiet
git push origin main || echo "⚠️ Push failed, run manually"
fi
echo "[$(date)] 同步完成"
🔹 Windows (<code>sync.ps1</code>)
$SYNC_DIR = "$env:APPDATA\Rime\rime_sync"
$REMOTE_DIR = "rclone_webdav:rime-sync/rime_data"
$GIT_REPO = $PSScriptRoot
Write-Host "[$(Get-Date)] Starting sync..." -ForegroundColor Cyan
# 1. Git pull
Set-Location $GIT_REPO
git pull --rebase 2>&1 | Out-Null
# 2. rclone sync
rclone sync "$SYNC_DIR" "$REMOTE_DIR" --transfers=4 --checkers=8 -v
# 3. Git commit & push
$changes = git diff --cached --name-only
if ($changes) {
git add -A
git commit -m "sync: $((Get-Date).ToString('yyyy-MM-dd_HH-mm-ss'))" -q
git push origin main 2>&1 | Out-Null
} else {
Write-Host "No changes detected." -ForegroundColor Green
}
Write-Host "[$(Get-Date)] Sync complete." -ForegroundColor Green
📅 定时任务配置:
- macOS: <code>crontab -e</code> → <code>*/5 * * * * ~/rime-sync/sync.sh >> ~/rime-sync/sync.log 2>&1</code>
- Windows: 任务计划程序 → 每5分钟触发 <code>sync.ps1</code>
📱 五、iOS 端适配方案
iOS 沙箱机制不支持直接 WebDAV 挂载,推荐以下组合:
| App | 同步方式 | 与 Git/WebDAV 关系 |
|---|---|---|
| 同文 Tatarin | iCloud 同步(官方支持) | iCloud → macOS 自动同步 → Git/WebDAV |
| 仓输入法 | 文件分享 / iCloud Drive | 手动导出 <code>RimeData</code> → 放入同步目录 |
✅ iOS 灾备建议:
- 开启同文/iCloud 同步,保持多设备实时一致
- 每月手动导出一次词库文件,放入 <code>rime_data/</code> 目录
- Windows/macOS 脚本会定期将 iCloud 同步的本地副本推送到 Git/WebDAV
🆘 六、灾备恢复与冲突处理
🔍 冲突预防机制
# 在 sync.sh 开头添加冲突检测
if git diff --name-only HEAD@{1} HEAD | grep -q "userdb.txt\|override.dict.yaml"; then
echo "⚠️ 检测到词库变更,已生成时间戳备份"
cp -r "$SYNC_DIR" "$SYNC_DIR.bak.$(date +%s)"
fi
🔄 恢复流程(任意端)
# 1. 克隆仓库 & 挂载 WebDAV(可选)
git clone <your-git-url> rime-sync-recovery
cd rime-sync-recovery
# 2. 恢复词库文件到 Rime 目录
cp -r rime_data/* ~/Library/Rime/ # macOS
# 或 %APPDATA%\Rime\ # Windows
# 3. 重启输入法引擎
rime_restart() {
osascript -e 'quit app "Squirrel"' && open -a Squirrel.app
# Windows: taskkill /F /IM Weasel.exe & start Weasel.exe
}
📜 Git 回滚示例
git log --oneline -- rime_data/userdb.txt | head -5
git checkout abc123 -- rime_data/userdb.txt
git commit -m "rollback to safe version" -q
📌 七、避坑指南 & 最佳实践
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
| WebDAV 同步卡死/报错 | 文件锁或权限不足 | <code>rclone sync</code> 改用 <code>–drive-chunk-size=64M</code>,关闭云盘实时同步 |
| Git push 频繁触发 CI/CD | 未过滤非文本文件 | <code>.gitignore</code> 严格过滤,脚本加 <code>–quiet</code> |
| iOS 与 Windows/macOS 词库不一致 | 多端编辑未同步 | 单点编辑原则:仅在一台设备修改,其他设备拉取更新 |
| 词库膨胀导致同步慢 | <code>userdb.txt</code> 未压缩/未清理 | 定期运行 <code>rime_build_dict</code>,清理过期词条 |
| 冲突后手动合并困难 | 无差异记录 | Git 开启 <code>diff.mnemonicprefix=true</code>,使用 <code>git difftool</code> |
✅ 生产环境建议:
- 词库文件提交前执行 <code>dos2unix</code> / <code>unix2dos</code>(跨平台换行符统一)
- 敏感词库可加密:<code>gpg -c userdb.txt</code> → Git 存 <code>.gpg</code> → 脚本解密后同步
- 定期测试恢复流程(至少每季度一次)
📎 附录:一键初始化模板
# 克隆本模板并替换占位符
git clone <your-repo-url> rime-sync
cd rime-sync
chmod +x sync.sh restore.sh
rclone config # 配置你的 WebDAV
crontab -e # Windows 用任务计划器
📥 源码/配置模板:<code>[链接占位符,可替换为 GitHub/Gitee 仓库]</code>
💬 常见问题:冲突自动合并策略 / AList 穿透加速 / iCloud 同步延迟处理 / 词库增量同步优化
🌟 总结:WebDAV + Git 组合为 Rime 词库提供了 <code>实时容灾 + 版本追溯 + 多端兼容</code> 的工业级方案。核心在于规避双向实时同步,以 Git 为唯一事实源,WebDAV 为冗余副本,通过定时脚本实现安全流转。
如需提供对应平台的完整脚本包、AList WebDAV 加速配置或 iOS iCloud 自动化同步 workflow,可回复具体需求。e — rime_data/userdb.txt | head -5
git checkout abc