有朋友提了个 issue 后发现的,Rime 实现全拼双拼混输很简单,只要在拼写运算 speller/algebra
下把 xform
替换为 derive
就可以了。
非常适合初学双拼时使用。
原理
例如小鹤双拼的 z 键:
- xform/(.)ou$/$1Ⓩ/
- xlit/Ⓩ/z/
ou
最终转为了韵母的 z,输入 zz
就可以得到「走 zou」了,xform
(变形)不保留原型,(.)ou
就没了,改为保留原型的 abbrev
(派生)就可以同时支持全拼和双拼了。(官方文档 - 拼写运算的运算子)
解决副作用
显示效果
为了全拼双拼混输的显示效果,也要清空 translator/preedit_format
中对双拼转全拼的转换。
ong 音的冲突
如果词库中有 唵嘛呢叭咪吽 ong ma ni bei mei hong
,其中的这个 ong
与小鹤的默认规则冲突,修改一下就好了:
- - derive/i?ong$/Ⓢ/
+ - derive/(.)i?ong$/$1Ⓢ/
全拼与双拼的冲突
例如全拼的 jing(静)与小鹤双拼的 ji’ng(技能),Rime 默认 jing 永远排在 ji’ng 前面,这不太符合双拼为主的情况。
正好可以用长词优先 long_word_filter.lua
将「技能」提到「静」的前面。
示例
雾凇拼音 - 小鹤双拼的补丁示例:
# double_pinyin_flypy.custom.yaml
patch:
# 在 engine/filters 插入长词优先的 Lua
engine/filters:
- lua_filter@corrector
- reverse_lookup_filter@radical_reverse_lookup
- lua_filter@search@radical_pinyin
- lua_filter@autocap_filter
- lua_filter@pin_cand_filter
- lua_filter@long_word_filter # 增加长词优先
- simplifier@emoji
- simplifier@traditionalize
- lua_filter@reduce_english_filter
- uniquifier
# 长词优先设置为提升 10 个词到第 1 个位置
long_word_filter:
count: 10
idx: 1
# 双拼不转换为全拼编码
translator/preedit_format: []
# xform 变形改为 derive 派生
speller/algebra:
- derive/^([jqxy])u$/$1v/
- derive/^([aoe])([ioun])$/$1$1$2/
- derive/^([aoe])(ng)?$/$1$1$2/
- derive/iu$/Ⓠ/
- derive/(.)ei$/$1Ⓦ/
- derive/uan$/Ⓡ/
- derive/[uv]e$/Ⓣ/
- derive/un$/Ⓨ/
- derive/^sh/Ⓤ/
- derive/^ch/Ⓘ/
- derive/^zh/Ⓥ/
- derive/uo$/Ⓞ/
- derive/ie$/Ⓟ/
- derive/(.)i?ong$/$1Ⓢ/
- derive/ing$|uai$/Ⓚ/
- derive/(.)ai$/$1Ⓓ/
- derive/(.)en$/$1Ⓕ/
- derive/(.)eng$/$1Ⓖ/
- derive/[iu]ang$/Ⓛ/
- derive/(.)ang$/$1Ⓗ/
- derive/ian$/Ⓜ/
- derive/(.)an$/$1Ⓙ/
- derive/(.)ou$/$1Ⓩ/
- derive/[iu]a$/Ⓧ/
- derive/iao$/Ⓝ/
- derive/(.)ao$/$1Ⓒ/
- derive/ui$/Ⓥ/
- derive/in$/Ⓑ/
- xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/
效果展示: