将雾凇拼音(Rime/Squirrel)迁移到 Windows 小狼毫(Weasel)并用 OneDrive 同步词库与配置
要解决的问题与适用场景
这篇文章记录我把 macOS 上的雾凇拼音(Rime + 鼠须管 Squirrel)迁移到 Windows(小狼毫 Weasel),并最终用 OneDrive 做多端同步(配置 + 个人词库)的过程。
适用场景:
- 你在 macOS 上已经稳定使用 Rime(例如雾凇拼音 rime-ice),并且有一定自定义(皮肤、快捷键、应用自动英文等)。
- 你希望 Windows 端尽量复刻 macOS 的体验,并把个人词库在多设备间同步。
- 你愿意接受 Rime 的一个现实:不同平台前端(Squirrel / Weasel)UI 能力不完全一致,需要“尽量接近”,而不是“完全一致”。
背景与环境
macOS
- 前端:鼠须管(Squirrel)
- Rime:
1.16.0 - 用户目录:
~/Library/Rime - 安装/部署方式:使用第三方脚本仓库
Mark24Code/rime-auto-deploy(我当时是直接git pull的)
macOS 的 installation.yaml 示例:
distribution_code_name: Squirrel
distribution_name: "鼠鬚管"
distribution_version: 1.1.2
install_time: "Fri Sep 19 14:35:17 2025"
installation_id: "a1bccab6-c228-4533-b629-ebf481de4c25"
rime_version: 1.16.0
update_time: "Wed Jan 14 12:18:45 2026"
Windows
- 前端:小狼毫(Weasel)
- Rime:
1.13.1(注意比 macOS 低) - 用户目录:我选择自定义到
D:\Data\Weasel
Windows 的目录结构示例:
PS D:\Data\Weasel> ls
Directory: D:\Data\Weasel
Mode LastWriteTime Name
---- ------------- ----
d----- 2026/1/20 11:15 build
d----- 2026/1/20 11:15 luna_pinyin.userdb
-a---- 2026/1/20 11:14 default.custom.yaml
-a---- 2026/1/20 11:15 installation.yaml
-a---- 2026/1/20 11:15 user.yaml
-a---- 2026/1/20 11:15 weasel.custom.yaml
总体策略
我最后采用的策略是:
- 先在 Windows 用脚本把雾凇拼音“装到能用”(输入方案、基础配置齐全),避免手工拼装配置导致遗漏。
- 以 macOS 为主(source of truth):macOS 已稳定运行几个月,Windows 端尽量对齐其配置。
- 再启用 Rime Sync,用 OneDrive 做同步目录:把“可同步的配置 + 用户词库导出”统一到云端。
- 最后再修 UI/皮肤差异:例如暗色自动切换、候选框样式、阴影等。
第 1 步:在 Windows 端先把雾凇拼音部署完整
如果你已经用 rime-auto-deploy 之类脚本部署完,至少确认两件事:
default.yaml/default.custom.yaml里有正确的schema_list(例如rime_ice)。*.schema.yaml、*.dict.yaml、opencc等依赖都齐全,否则后续同步只会把问题同步过去。
我用 Select-String 快速确认过 schema_list 和 rime_ice:
PS D:\Data\Weasel> Select-String -Path user.yaml,default.yaml -Pattern "schema_list|rime_ice"
default.yaml:10:schema_list:
default.yaml:13: - schema: rime_ice
备注:我在安装的最后一步被提示“勾选输入方案”。这一步建议至少选 雾凇拼音(rime_ice),其他方案按需即可。先保证核心方案可用,后面再精简。
第 2 步:对齐关键自定义(default.custom.yaml / weasel.custom.yaml)
2.1 是否要直接复制 macOS 的 default.custom.yaml?
我的结论:不建议直接整文件复制。
原因:
default.custom.yaml通常是“通用层”配置,但不同平台的前端可能有差异(例如快捷键、某些字段、系统输入法行为)。- 复制整文件容易把 Windows 端已有的必要字段覆盖掉(尤其是
schema_list、某些ascii_composer行为)。
更稳妥的做法是:只迁移你确认需要的 patch 段落。
比如我在 macOS 的 default.custom.yaml 里主要关心这些:
menu.page_sizeascii_composer.switch_keykey_binder/bindings/+(把小键盘 Enter 视为 Return)
macOS 片段(示例):
patch:
menu:
page_size: 8
ascii_composer:
good_old_caps_lock: true
switch_key:
Caps_Lock: clear
Shift_L: commit_code
Shift_R: commit_code
Control_L: noop
Control_R: noop
"key_binder/bindings/+":
- { accept: KP_Enter, send: Return, when: composing }
Windows 端只要保证这些 patch 合并进去即可,不要为了一致性去删 Windows 端已有的 schema_list。
Windows default.custom.yaml(示例)最终应同时包含:
- 你的
schema_list - 上面这几个 patch 片段
2.2 皮肤、自动切换、应用自动英文:放在 weasel.custom.yaml
macOS 的 UI 配置写在 squirrel.custom.yaml,Windows 端对应的是 weasel.custom.yaml。
我做过两件事:
- 把 macOS 的
preset_color_schemes移植到 Windows 的preset_color_schemes - 在
style同时设置color_scheme+color_scheme_dark,实现亮/暗主题自动切换
我当前 Windows 端的 weasel.custom.yaml(节选)类似这样:
patch:
app_options:
Code.exe: {ascii_mode: true}
WindowsTerminal.exe: {ascii_mode: true}
wezterm-gui.exe: {ascii_mode: true}
preset_color_schemes:
macos_light:
name: "MacOS 浅色 / MacOS Light"
author: "小码哥 (ported)"
back_color: 0xFFFFFFFF
border_color: 0xFFFFFFFF
candidate_back_color: 0xFFFFFFFF
candidate_text_color: 0xFF3C3C3C
comment_text_color: 0xFF999999
hilited_candidate_back_color: 0xFFD75A00
hilited_candidate_text_color: 0xFFFFFFFF
label_color: 0xFF999999
text_color: 0xFF424242
macos_dark:
name: "MacOS 深色 / MacOS Dark"
author: "小码哥 (ported)"
back_color: 0xFF1F1E2D
border_color: 0xFF050505
candidate_back_color: 0xFF1F1E2D
candidate_text_color: 0xFFE9E9EA
comment_text_color: 0xFF999999
hilited_candidate_back_color: 0xFFD75A00
hilited_candidate_text_color: 0xFFFFFFFF
label_color: 0xFF999999
text_color: 0xFF808080
style:
color_scheme: macos_light
color_scheme_dark: macos_dark
inline_preedit: true
horizontal: true
我踩过一个坑:把颜色格式强行改成
argb反而出现显示 bug,去掉后效果更稳定。我的处理方式是不“额外发明字段”,只用 Weasel 已经能识别的写法。
第 3 步:用 OneDrive 做 Rime Sync(实现多端词库同步)
3.1 为什么我的 OneDrive 目录里出现两个 installation_id?
我把 OneDrive 目录设为 Rime 的 sync_dir 后,在目录里看到两个文件夹:
a1bccab6-c228-4533-b629-ebf481de4c25(macOS 的 installation_id)1aaf506b-4504-4140-83b2-315137d4cf0c(Windows 的 installation_id)
这不是异常,而是 Rime 的设计:每台设备用自己的 installation_id 作为子目录,避免互相覆盖。同步时,它会在同一个 sync_dir 下读写多个 installation_id 子目录,并在“同步操作”时交换数据。
OneDrive 示例结构:
PS C:\Users\ruichen\OneDrive\...\Rime_sync> ls
Mode LastWriteTime Name
---- ------------- ----
dar--l 2026/1/20 17:36 1aaf506b-4504-4140-83b2-315137d4cf0c
dar--l 2026/1/20 17:36 a1bccab6-c228-4533-b629-ebf481de4c25
3.2 配置 sync_dir:注意引号陷阱
我第一次在 macOS 配置 sync_dir 时,用了“复制路径”的方式,结果把路径带成了带引号的字符串,类似这样:
sync_dir: "'/Users/ruichen/Library/CloudStorage/OneDrive-个人/.../Rime_sync/a1bccab6-c228-4533-b629-ebf481de4c25'"
这类写法很容易导致同步行为“看起来点了,但没更新到你以为的位置”。
建议写法:
- 不要在 YAML 里套两层引号
sync_dir指向 OneDrive 的根同步目录(不是某一个 installation_id 子目录)
例如(示例路径,仅供参考):
sync_dir: /Users/ruichen/Library/CloudStorage/OneDrive-个人/05-Tools & Resources/01-Backups/03-Shortcuts_Backups/Rime_sync
Windows 端同理,把 sync_dir 指向 OneDrive 的同一目录:
C:\Users\ruichen\OneDrive\05-Tools & Resources\01-Backups\03-Shortcuts_Backups\Rime_sync
3.3 执行同步:用“同步用户资料”而不是硬找命令
我在 Windows PowerShell 里尝试找 sync_dir 相关字段(Select-String -Pattern "sync_dir|sync/")时一度以为“没有字段所以很难搞”,但实际发现:
sync目录并不是“配置里必须显式出现”的东西- 小狼毫有 UI 操作:右键菜单里有“同步用户资料”
我最终的做法是:
- macOS:配置
sync_dir→ 触发一次“同步”(日志显示正常即可) - Windows:把
sync_dir指向同一个 OneDrive 目录 → 右键小狼毫图标 → 同步用户资料 - 等 OneDrive 把两个 installation_id 目录都同步完成
- 再次在两端分别触发一次同步,确保交换完成
同步是否有效,我用“看最新更新时间”这种方式做粗验证,例如:
PS C:\Users\ruichen> ls "...\Rime_sync\1aaf506b-4504-4140-83b2-315137d4cf0c" |
sort LastWriteTime -Descending | select -First 5
只要看到 *.userdb.txt(例如 rime_ice.userdb.txt)在两端都持续更新,基本就说明链路打通了。
第 4 步:确认问题是否已解决
我按下面顺序做了确认:
-
输入方案是否一致
- Windows 是否确实使用
rime_ice schema_list是否包含并且能切换
- Windows 是否确实使用
-
常用键位是否一致
KP_Enter→Return是否生效(避免小键盘回车不提交)ascii_composer.switch_key是否按预期切换中英/上屏行为
-
应用自动英文是否生效
- Windows 端
app_options里按 exe 名配置(例如Code.exe/WindowsTerminal.exe/wezterm-gui.exe) - macOS 端按 bundle id 配置(例如
com.microsoft.VSCode)
- Windows 端
-
暗色自动切换是否生效
- Windows:
style.color_scheme+style.color_scheme_dark - macOS:
squirrel.custom.yaml对应字段
- Windows:
-
词库同步是否生效
- OneDrive 目录下同时存在两个 installation_id 子目录
- 两端触发同步后,
rime_ice.userdb.txt等导出文件更新时间同步推进
字体:如何换成更“现代化”的字体
我在 Windows 端最终用的是这类写法(从更现代的 UI 字体到中文字体 fallback):
font_face: "Segoe UI Variable, Microsoft YaHei UI, Segoe UI"
comment_font_face: "Segoe UI Variable, Microsoft YaHei UI, Segoe UI"
label_font_face: "Segoe UI Variable, Microsoft YaHei UI, Segoe UI"
这里的原则很简单:
- 第一优先用系统 UI 字体(视觉一致)
- 中文用
Microsoft YaHei UI兜底 - 不依赖第三方字体,减少跨机器差异
macOS 端则是另一套字体体系(例如 PingFangSC),这部分我不强求跨平台一致,只追求“同平台内一致且观感可接受”。
解决 Windows 端候选框”边界模糊”的问题
问题表现
迁移完成后我发现一个视觉问题:macOS 上输入法候选框四周有自然的阴影,但 Windows 上没有。这导致白色的候选框在白色背景上”隐身”,视觉对比度很差。
原因分析
macOS 的窗口管理器(Quartz Compositor)会自动为 Squirrel 的无边框窗口添加系统级的柔和阴影,将候选框与背景区分开。
而 Windows 的 Weasel 使用 GDI/Direct2D 绘图,默认生成的无边框窗口没有系统阴影。如果皮肤配置里 border_color 和 back_color 都是白色,候选框就会和白色背景融为一体。
解决方案:用灰色边框模拟阴影效果
既然 Windows 端无法简单配置出 macOS 风格的弥散阴影,最优雅的做法是:给皮肤添加一道灰色边框。这在视觉上能起到与阴影相同的”区分前景与背景”的作用。
关键修改点:
border_color:浅色模式改为0xD0D0D0(浅灰),深色模式改为0x454545(深灰)layout.border_width:设为1,确保边框可见
修改后的皮肤配置(节选):
patch:
style:
color_scheme: macos_light
color_scheme_dark: macos_dark
layout:
border_width: 1 # 1px 边框
corner_radius: 5 # 圆角
preset_color_schemes:
macos_light:
name: "MacOS 浅色/Win适配"
back_color: 0xFFFFFF
border_color: 0xD0D0D0 # 关键:浅灰边框
hilited_candidate_back_color: 0xD75A00
candidate_text_color: 0x3c3c3c
hilited_candidate_text_color: 0xFFFFFF
# ... 其他颜色省略
macos_dark:
name: "MacOS 深色/Win适配"
back_color: 0x2D1E1F
border_color: 0x454545 # 关键:深灰边框
hilited_candidate_back_color: 0xD75A00
candidate_text_color: 0xEAE9E9
hilited_candidate_text_color: 0xFFFFFF
# ... 其他颜色省略
修改后右键小狼毫图标,选择”重新部署”即可生效。
效果:候选框四周会有一道纤细的灰色轮廓线,虽然技术上不是阴影,但视觉效果上足够将候选框与背景区分开。
风险与注意事项
同步是“交换”,不是“单向备份”
一旦你在 Windows 上开始频繁输入、并触发同步,就可能把 Windows 端的内容写回同步目录,再被 macOS 合并。
如果你明确要“以 macOS 为主”,建议:
- Windows 刚装好时,先不要大量输入和训练
- 先完成一次从 macOS → OneDrive → Windows 的同步闭环
- 确认 Windows 端行为正确后,再开始作为第二主力设备使用
不要在不确认路径时“清理 sync 目录”
sync 目录里按 installation_id 分开存放是正常的,手动删除可能会造成不可逆的同步状态异常。除非你很确定要重置同步,否则不要动它。
小结
这次迁移最终解决了三件事:
- Windows 端雾凇拼音正常可用,并尽量对齐 macOS 的
default.custom.yaml关键行为(中英切换、KP_Enter 等)。 - Windows 端皮肤可以按系统主题自动切换,并支持应用级自动英文输入。
- 用 OneDrive 作为
sync_dir,实现了多端词库(*.userdb.txt导出)与配置的同步闭环。