将雾凇拼音(Rime/Squirrel)迁移到 Windows 小狼毫(Weasel)并用 OneDrive 同步词库与配置

2026年1月20日 | Ruichen Zhou | 约 22 分钟阅读
RimeWindowsmacOS同步

要解决的问题与适用场景

这篇文章记录我把 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

总体策略

我最后采用的策略是:

  1. 先在 Windows 用脚本把雾凇拼音“装到能用”(输入方案、基础配置齐全),避免手工拼装配置导致遗漏。
  2. 以 macOS 为主(source of truth):macOS 已稳定运行几个月,Windows 端尽量对齐其配置。
  3. 再启用 Rime Sync,用 OneDrive 做同步目录:把“可同步的配置 + 用户词库导出”统一到云端。
  4. 最后再修 UI/皮肤差异:例如暗色自动切换、候选框样式、阴影等。

第 1 步:在 Windows 端先把雾凇拼音部署完整

如果你已经用 rime-auto-deploy 之类脚本部署完,至少确认两件事:

  1. default.yaml / default.custom.yaml 里有正确的 schema_list(例如 rime_ice)。
  2. *.schema.yaml*.dict.yamlopencc 等依赖都齐全,否则后续同步只会把问题同步过去。

我用 Select-String 快速确认过 schema_listrime_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_size
  • ascii_composer.switch_key
  • key_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

我做过两件事:

  1. 把 macOS 的 preset_color_schemes 移植到 Windows 的 preset_color_schemes
  2. 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 操作:右键菜单里有“同步用户资料”

我最终的做法是:

  1. macOS:配置 sync_dir → 触发一次“同步”(日志显示正常即可)
  2. Windows:把 sync_dir 指向同一个 OneDrive 目录 → 右键小狼毫图标 → 同步用户资料
  3. 等 OneDrive 把两个 installation_id 目录都同步完成
  4. 再次在两端分别触发一次同步,确保交换完成

同步是否有效,我用“看最新更新时间”这种方式做粗验证,例如:

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 步:确认问题是否已解决

我按下面顺序做了确认:

  1. 输入方案是否一致

    • Windows 是否确实使用 rime_ice
    • schema_list 是否包含并且能切换
  2. 常用键位是否一致

    • KP_EnterReturn 是否生效(避免小键盘回车不提交)
    • ascii_composer.switch_key 是否按预期切换中英/上屏行为
  3. 应用自动英文是否生效

    • Windows 端 app_options 里按 exe 名配置(例如 Code.exe / WindowsTerminal.exe / wezterm-gui.exe
    • macOS 端按 bundle id 配置(例如 com.microsoft.VSCode
  4. 暗色自动切换是否生效

    • Windows:style.color_scheme + style.color_scheme_dark
    • macOS:squirrel.custom.yaml 对应字段
  5. 词库同步是否生效

    • 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_colorback_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 分开存放是正常的,手动删除可能会造成不可逆的同步状态异常。除非你很确定要重置同步,否则不要动它。


小结

这次迁移最终解决了三件事:

  1. Windows 端雾凇拼音正常可用,并尽量对齐 macOS 的 default.custom.yaml 关键行为(中英切换、KP_Enter 等)。
  2. Windows 端皮肤可以按系统主题自动切换,并支持应用级自动英文输入。
  3. 用 OneDrive 作为 sync_dir,实现了多端词库(*.userdb.txt 导出)与配置的同步闭环。