💡
由于我目前只在Windows平台使用Rime,所以本篇文章内容都是基于小狼毫+Rime-ice整合包编写

前文「双拼学习篇」中分享了我是因为什么原因开始学习和双拼,以及我在入门阶段的一些方法,个人认为还是相当有效果的,希望能帮到有需要的朋友。

这一篇就准备讲讲Rime这个输入法,不过也是基于我的认知做一个分享,其中肯定有理解错误、认知不到位的地方,文中部分内容参考了Rime-ice的介绍如文中有何不妥之处也希望各位能做个勘误。

Rime的不同版本

Rime是一款开源的输入法引擎,小狼毫(Weasel)之类的名字都是它在不同平台分支版本的别名,刚开始有的时候着实把我弄的有点子懵,不过分清楚后就好了,目前我所知的分支大概有如下版本:

版本和版本之前只有一些特性略微不同,大体配置都是差不多的。

整合包(处方)

其实Rime的配置如果从头来学是比较复杂的,学习成本很高,我刚开始使用Rime时我也不太会配置,用起来非常不顺手,如:没有词库、Emoji不支持、没有快捷时间输入等。但是如果自己从头来写配置的话牵涉的方面太多了,我也没有什么精力去做深入学习。

所以,为了减少这部分的精力损耗,所以我选择了使用「处方」,也就是一些大神提前做好的「整合包」,整合包下载下来放到配置文件夹重新部署后即可达到搜狗、腾讯输入法那样的便捷体验。

我这里推荐用的是「雾凇拼音Rime-ice」整合包。

雾凇拼音

我是从今年3月分在V2ex上发现了Dvel's的整合的「雾凇拼音Rime-ice」 的,这个包涵盖了其他输入法的现成词库,并做了整理优化,而且支持Emoji和时间快捷输入,一下就把我的使用体验拉升了好几个台阶,几乎已经接近搜狗输入法了,而且作者维护的也很频繁,截止本文撰写之日已经有372次提交了。

一直都有在做维护

如何避免更新丢失自定义配置?

不过最近换电脑后虽然以前配置好的Rime-ice还可以使用,但是已经是今年4月9号的「远古」版本了,虽然期间我也做对词库做过几次更新,不过作者在3月份至今一直在做高强度更新,期间修复了很多BUG、完善了词库、增强了功能。

但是,作者在此期间也对一些主配置文件结构做了一些更改,而且我当时在使用时直接把一些配置修改写进了原始配置文件之中,导致我如果直接覆盖更新会覆盖掉我之前的所有修改,这是我头大的地方。

为了避免以后还出现这种问题,所以我开始思考有没有不修改源配置文件,但是又能无脑更新Rime配置的方法呢?

那之后我也在Rime-ice的issue提过这个问题,作者给的答复是通过「补丁」实现,但是没说具体实现方法,我后来无意间在「常见问题」中「双拼的补丁示例」一节看到了双拼的补丁的完整用法,至此一朝顿悟,终于让我知道了如何把所有自定义配置独立于单独的补丁文件中的方法。

一些基本说明

先做一些我总结的Rime配置基础说明:

  1. Rime用户配置文件夹:用户的配置文件存放目录,通过 输入法图标右键 -> 用户文件夹 即可打开,默认都是存放在Windows的文档目录中。
  2. 重新部署:修改完配置文件后需要重新部署才可会生效,通过 输入法图标右键 -> 重新部署 即可。
  3. Rime日志目录:Rime的运行日志,如果出现异常可以先看看日志,路径为: C:\Users\你的系统登录名\AppData\Local\Temp
  4. 补丁:下载下来的 Rime-ice 整合包大部分配置文件命名规范都是: xxx.schema.yamlxxx.yaml ,这些文件都是默认的缺省配置,你可以新建一个同名的 xxx.custom.yaml ,这个文件的配置会覆盖掉缺省配置。

编写补丁

经过我的归纳整理,需要自定的配置大多为快捷键、自定义词库、主题等,通常情况下需要新建的补丁配置的文件有:

  1. double_pinyin_flypy.custom.yaml 缺省文件 double_pinyin_flypy.schema.yaml 的补丁,该文件为小鹤双拼的配置文件
  2. melt_eng.custom.yaml 缺省文件 melt_eng.schema.yaml 的补丁,该文件为中英文混合输入的配置
  3. my_eng.dict.yaml 缺省文件 melt_eng.dict.yaml 的补丁,该文件为中英文混输词库的设置,因为该文件作者说不能打补丁,所以需要重心命名一个名字。
  4. weasel.custom.yaml 缺省文件 weasel.yaml 的补丁文件,该文件为Windows平台Weasel的一些个性化配置,如主题等。
  5. default.custom.yaml 缺省文件 default.yaml 的补丁文件,该文件主要是按键绑定、方案选单等配置等。
💡
具体想要知道那些内容可以覆盖、打补丁也可以通过「输入法图标右键 -> 程序文件夹 -> 进入 data 文件夹」,该文件夹里面有所有的默认配置。

有了这几个文件之后再对Rime-ice这个整合包更新就可以放心大胆的直接对原始文件进行覆盖,而且不用担心自定义设置被新文件覆盖掉,因为他们都是另外新建的补丁文件,这些文件在Rime-ice的原始包内并不存在,自然也就不会被覆盖了。

那么,新建补丁文件后如何编写里面的配置呢?

Rime配置文件中可以通过 patch: 开头即可定义一个补丁文件,Rime会自动判断用户文件夹中是否存在 xxx.custom.yaml 补丁文件,如果存在在用这部分配置覆盖原有的默认配置,如下方示例,更多可以覆写的配置可以看 Rime 定製指南

一些补丁的编写示例(来自Dvel's的博客):

# 以 patch: 开头,后面的内容都需要缩进
patch:

  ##### 修改单项
  # 正确 ✅ 这种方式只覆盖 Shift_L,不影响其他选项
  ascii_composer/switch_key/Shift_L: commit_code
  
  # 错误 ❌ 这样导致 switch_key 下将只有 Shift_L 一个选项
  ascii_composer/switch_key:
    Shift_L: commit_code
  
  ##### 如果有较多修改项,可以直接全部复制过来再修改
  ascii_composer:
    good_old_caps_lock: false
    switch_key:
      Caps_Lock: commit_code
      Shift_L: commit_code
      Shift_R: noop
      Control_L: noop
      Control_R: noop

  ##### 结尾的 /+ 表示在原基础上追加
  # 保留已有的快捷键,追加一个逗号句号翻页
  key_binder/bindings/+:
    - { when: paging, accept: comma, send: Page_Up }
    - { when: has_menu, accept: period, send: Page_Down }

以下为我修改的 default.custom.yamlweasel.custom.yamlmy_eng.dict.yamlmelt_eng.custom.yamldouble_pinyin_flypy.custom.yaml 补丁文件,目前来说打完这些文件的补丁已经基本上覆盖所有需要用到的设置了。

patch:
  #右按键切换大小写,并文字上屏
  ascii_composer/switch_key/Shift_R: commit_text
  #小键盘回车上屏
  key_binder/bindings/+:
        - { when: composing, accept: KP_Enter, send: Return } #  

default.custom.yaml 主要按键相关的修改,如:左右shift、ctrl、小键盘等等各种功能按键

##定义这个文件为补丁文件
patch:
  ##主题设置
  style/color_scheme: mac_green
  style/color_scheme_dark: mac_dark

  #自定义颜色主题
  preset_color_schemes:
    mac_green:
      {
        back_color: 0xFFFFFF,
        border_color: 0x999999,
        border_height: 4,
        border_width: 4,
        candidate_format: "%c %@ ",
        candidate_text_color: 0x3c3c3c,
        comment_text_color: 0x999999,
        corner_radius: 5,
        font_face: "Maple Mono SC NF",
        font_point: 16,
        hilited_candidate_back_color: 0x32A14C,
        hilited_candidate_label_color: 0xFFFFFF,
        hilited_candidate_text_color: 0xFFFFFF,
        hilited_comment_text_color: 0x999999,
        hilited_corner_radius: 5,
        hilited_text_color: 0x999999,
        horizontal: true,
        label_color: 0x999999,
        label_font_point: 13,
        line_spacing: 10,
        name: "Mac绿",
        text_color: 0x424242,
      }
        

weasel.custom.yaml 主要为个性化设置,如明暗主题、自定义主题列表等。

patch:
  # 设置自定义词库
  melt_eng/dictionary: my_eng
  # 双拼主翻译器,并让输入预览变成如 `hclihd | haolihai` 的形式
  translator/preedit_format:
    - 'xform/^(.*)$/\U$1\E\t | $1/'
    - "xform/([bpmfdtnljqx])n/$1iao/"
    - "xform/(\\w)g/$1eng/"
    - "xform/(\\w)q/$1iu/"
    - "xform/(\\w)w/$1ei/"
    - "xform/([dtnlgkhjqxyvuirzcs])r/$1uan/"
    - "xform/(\\w)t/$1ve/"
    - "xform/(\\w)y/$1un/"
    - "xform/([dtnlgkhvuirzcs])o/$1uo/"
    - "xform/(\\w)p/$1ie/"
    - "xform/([jqx])s/$1iong/"
    - "xform/(\\w)s/$1ong/"
    - "xform/(\\w)d/$1ai/"
    - "xform/(\\w)f/$1en/"
    - "xform/(\\w)h/$1ang/"
    - "xform/(\\w)j/$1an/"
    - "xform/([gkhvuirzcs])k/$1uai/"
    - "xform/(\\w)k/$1ing/"
    - "xform/([jqxnl])l/$1iang/"
    - "xform/(\\w)l/$1uang/"
    - "xform/(\\w)z/$1ou/"
    - "xform/([gkhvuirzcs])x/$1ua/"
    - "xform/(\\w)x/$1ia/"
    - "xform/(\\w)c/$1ao/"
    - "xform/([dtgkhvuirzcs])v/$1ui/"
    - "xform/(\\w)b/$1in/"
    - "xform/(\\w)m/$1ian/"
    - "xform/([aoe])\\1(\\w)/$1$2/"
    - "xform/(^|[ '])v/$1zh/"
    - "xform/(^|[ '])i/$1ch/"
    - "xform/(^|[ '])u/$1sh/"
    - "xform/([jqxy])v/$1u/"
    - "xform/([nl])v/$1ü/"
    - 'xform/([^|]*)/\L$1\E/'

double_pinyin_flypy.custom.yaml 小鹤双拼的补丁,我增加了一个全拼预览

词库文件的特殊处理

由于Rime中 xxx.dict.yaml 类型的词库文件无法打补丁,所以只能创建另外一个词库文件供其他配置文件引用

  1. 创建 my_eng.dict.yaml,将其中的中英混输词库改为小鹤:
# Rime dictionary
# encoding: utf-8
#
# 挂载英文输入方案的词库
#

---
name: my_eng
version: "1"
import_tables:
  - en_dicts/en_ext  # 补充
  - en_dicts/en      # 英文主词库

  # 中英混输词库
  # - en_dicts/cn_en                        # 全拼
  # - en_dicts/cn_en_double_pinyin          # 自然码双拼 
  - en_dicts/cn_en_double_pinyin_flypy      # 小鹤双拼
  # - en_dicts/cn_en_double_pinyin_mspy     # 微软双拼
  # - en_dicts/cn_en_double_pinyin_ziguang  # 紫光双拼
  # - en_dicts/cn_en_double_pinyin_abc      # 智能 ABC 双拼
...

my_eng.dict.yaml 自定义中英文双拼混输词库列表

  1. 在 double_pinyin_flypy.custom.yaml 中引用该词库:
patch:
  # 设置自定义词库
  melt_eng/dictionary: my_eng
  # 双拼主翻译器,并让输入预览变成如 `hclihd | haolihai` 的形式
  translator/preedit_format:
    - 'xform/^(.*)$/\U$1\E\t | $1/'
    - "xform/([bpmfdtnljqx])n/$1iao/"
    - "xform/(\\w)g/$1eng/"
    - "xform/(\\w)q/$1iu/"
    - "xform/(\\w)w/$1ei/"
    - "xform/([dtnlgkhjqxyvuirzcs])r/$1uan/"
    - "xform/(\\w)t/$1ve/"
    - "xform/(\\w)y/$1un/"
    - "xform/([dtnlgkhvuirzcs])o/$1uo/"
    - "xform/(\\w)p/$1ie/"
    - "xform/([jqx])s/$1iong/"
    - "xform/(\\w)s/$1ong/"
    - "xform/(\\w)d/$1ai/"
    - "xform/(\\w)f/$1en/"
    - "xform/(\\w)h/$1ang/"
    - "xform/(\\w)j/$1an/"
    - "xform/([gkhvuirzcs])k/$1uai/"
    - "xform/(\\w)k/$1ing/"
    - "xform/([jqxnl])l/$1iang/"
    - "xform/(\\w)l/$1uang/"
    - "xform/(\\w)z/$1ou/"
    - "xform/([gkhvuirzcs])x/$1ua/"
    - "xform/(\\w)x/$1ia/"
    - "xform/(\\w)c/$1ao/"
    - "xform/([dtgkhvuirzcs])v/$1ui/"
    - "xform/(\\w)b/$1in/"
    - "xform/(\\w)m/$1ian/"
    - "xform/([aoe])\\1(\\w)/$1$2/"
    - "xform/(^|[ '])v/$1zh/"
    - "xform/(^|[ '])i/$1ch/"
    - "xform/(^|[ '])u/$1sh/"
    - "xform/([jqxy])v/$1u/"
    - "xform/([nl])v/$1ü/"
    - 'xform/([^|]*)/\L$1\E/'

double_pinyin_flypy.custom.yaml 在小鹤的补丁中使用这个词库

  1. 创建 melt_eng.custom.yaml 定义中英文混输方案:
patch:
  # 改为挂载刚创建的 my_eng.dict.yaml
  translator/dictionary: my_eng
  speller/algebra:
    # 修改为小鹤双拼的拼写派生规则,因为不在同一个文件了,前面要加上文件名
    __include: melt_eng.schema.yaml:/algebra_flypy

melt_eng.custom.yaml 翻译器也使用这个词库

总结语

创建并配置好前文所说的4个文件后基本上能覆盖所有的个性化补丁配置了,届时更新就不用再顾虑配置丢失的问题。