Rime demo

雾凇拼音,功能齐全,词库体验良好,长期更新修订,仓库:iDvel/rime-ice

使用说明

备份后删除配置目录下原有的配置文件,再将仓库所有文件复制粘贴进去就好了。

更新词库:词库每个月都会更新几次,更新时只需要将下面 3 个文件夹覆盖过去并重新部署即可。

  • cn_dicts 拼音相关词库
  • en_dicts 英文相关词库
  • opencc Emoji

基本套路

方案设计

.
├── default.custom.yaml   # 一些全局设置
├── squirrel.custom.yaml  # 鼠须管的皮肤、默认中英设置
├── weasel.custom.yaml    # 小狼毫的皮肤、默认中英设置

├── rime_ice.schema.yaml  # 全拼方案
├── double_pinyin...      # 双拼方案
├── rime_ice.dict.yaml    # 挂载词库
├── cn_dicts/             # 词库目录
├── symbols_custom.yaml   # 自定义的 symbols,包含标点符号设定

├── melt_eng.schema.yaml  # 英文方案,作为次翻译器挂载到拼音方案
├── melt_eng.dict.yaml    # 挂载词库
├── en_dicts/             # 词库目录

├── liangfen.dict.yaml    # 两分方案,作为反查挂载到拼音方案
├── liangfen.schema.yaml  # 两分词库

├── custom_phrase.txt         # 自定义短语
├── opencc/                   # 词语映射,Emoji
├── rime.lua                  # lua 脚本
└── zh-hans-t-essay-bgw.gram  # 八股文

默认只支持了全拼、自然码双拼、小鹤双拼,其他双拼修改拼写设定即可。


英文方案与两分方案没有单独放入方案选单,只是作为功能挂载到拼音方案。

melt_eng 方案作为次翻译器,挂载到拼音方案,支持英文输入。

两分输入方案作为反查,挂载到拼音方案,支持拼字。


拼音和英文的词库文件较多,放入了文件夹里,让主目录清爽一些。


Lua 脚本中可配置的选项都提取出来了,「以词定字」在 default.custom.yaml 设定快捷键,剩下的「限制码长」「长词优先」「日期时间」等等可在方案文件中设定。


一些前缀功能的默认设置:

  • v 开头(仅全拼):输出一系列字符,这些字符在 symbols_custom.yaml 中定义。

  • u 开头(全拼)、大写 L 开头(双拼):两分拼字,具体拼字规则很简单,看一看 liangfen.dict.yaml 里的编码就大概能明白,一般是取第一个字与最后一个字。

  • 大写 U 开头:Unicode 编码转字符,如 U62fc 得到「拼」。


还有其他一些小功能,基本都写了注释,可以查阅一遍自行修改,主要的两个配置文件是 default.custom.yaml 和对应的方案文件 *.schema.yaml

长期维护词库

因为没有找到一份比较好的词库,干脆自己维护一个。综合了几个不错的词库,精心调教了很多。

主要维护的词库:

  • 8105 字表。
  • base 基础词库。
  • sogou 搜狗流行词。
  • ext 扩展词库,小词库。
  • tencent 扩展词库,大词库。
  • Emoji

维护内容主要是异形词、错别字的校对,错误注音的修正,缺失的常用词汇的增添,词频的调整。

欢迎在词库方面提 issue,我会及时更新修正。

词库的设计

Rime 自带的「朙月拼音·简化字」方案其实是繁体词库加上一个自动繁转简的设定,出词仍旧是经过 opencc 转换,用户词典中保存的输入历史还是繁体的。

简体用户推荐使用简体词库,引入一些第三方词库也比较方便,还可以避免 opencc 的少数转换错误,修订异形词时也只需要按照大陆简体标准修订。

字表与多音字

对于没有编码的词库文件,Rime 会根据方案的字表进行自动注音。

当含有多音字的词组缺少编码字段时,自动注音程序会利用权重百分比高于 5% 的读音进行组合、生成全部可能的注音。—— Rime 输入方案设计书

遵循 Rime 的设计,让常用多音字之间的权重比例满足至少 5:100,生僻的多音字低于 5:100,不参与自动注音,放到 base 中手动注音。

多音字注音的问题,例如 ext 词库中未注音的「十三朝古都」,用 ……chao……du 或 ……zhao……dou 都可以打出来,不过会出现意料之外的候选项的概率比较小。

一些可能产生困扰的,如「会计kuai ji」和「hui ji」冲突很多,如「奇迹qi ji」用「ji ji」也能打出来。这样含有不太适合被自动注音的多音字,放到 base 中手动注音。

两字词

两字词统一放到 base.dict.yaml 中,便于平时修订和调频。

因为两字词的排序基本决定了词库舒适度,重码较多,所以都加上注音和权重,并大量增删和调频。

扩展词库的两字词都没有自动加入,平时扩充时都是肉眼检查后再添加。

扩展词库

sogou.dict.yaml 搜狗流行词一般每个工作日都会更新一点。

ext.dict.yaml 一些第三方小词库及平时随手的扩充。

tencent.dict.yaml 只取了腾讯词向量的一百万个词条,算是比较平衡的选择。

扩展的词库默认权重为 100,因为不写权重时,Rime 默认给到的权重比 1 还小,输入长句时,初始的候选项有可能会被意料之外的两字词及单字挤占。比如想输入「抽根烟 / 再看看」,当「抽根烟」这个词没有权重时,默认候选项是「抽根 / 淹在 / 看看」。

新手指引

鼠须管 Squirrel,另一个版本: LEOYoon-Tsaw/squirrel

小狼毫 Weasel,另一个版本: fxliang/weasel

一些教程:

建议将官方 wiki 下载下来,需要查找什么,全局搜索一下即可。

还有很多,已经很全面了,下面的只是结合本配置随便写一点。

配置中基本都写了注释,如果只做小修改,通读一遍即可。

目录

  • 配置目录:

    • 鼠须管: ~/Library/Rime

    • 小狼毫: %APPDATA%\Rime

  • 共享目录:

    • 鼠须管: /Library/Input Methods/Squirrel.app/Contents/SharedSupport
    • 小狼毫: <安装目录>\data

共享目录提供了一些自带的方案及各项默认配置,比如配置目录的 default.custom.yaml 其实就是在给共享目录的 default.yaml 文件打补丁。

简繁转换的配置也可以直接书写 s2t.json,因为共享目录里已经有相关文件了。

Tab 与空格

Rime 的 YAML 配置文件需要严格的缩进,只能用空格,不能用 Tab。

但是词条之间是用 Tab 分割的:

拼音	pin yin 1234
拼音<Tab>pin<Space>yin<Tab>1234

经常编辑词库的话,可以设置 VSCode 为默认 Tab 缩进,在 .vscode/setting.json 中写入,参考 VSCode #69011

{
	// Configure editor settings to be overridden for [yaml] language.
	"[yaml]": {
		"editor.insertSpaces": false,
		"editor.tabSize": 4,
		"editor.detectIndentation": false,
	},
}

配置的引用

Rime 的配置可以很灵活复杂,比如设置一个快捷键:

  • 可以在方案文件 xxx.schema.yaml 中设定;
  • 也可以在方案的补丁文件 xxx.custom.yaml 中设定;
  • 也可以写在 default.yamldefaut.custom.yaml 中,再在方案中引用;
  • 也可以额外创建一个 YAML 文件,再在方案中中引用。

比如我想让所有方案共用同一套快捷键,不用写很多份。写在 default.custom.yaml 中就比较合适,然后再在方案中进行引用:

# 1. 在 default.custom.yaml 中配置
key_binder/bindings:
  # ... 相关快捷键配置

##############################

# 2. 在多个方案 xxx.schema.yaml 中引用
key_binder:
  import_preset: default # 从 default 继承快捷键的相关配置

import_preset 是导入成套的配置。

__include 是在当前位置包含另一 YAML 节点的内容。

具体用法参考官方 wiki。

下面是一个典型的示例:

# 方案文件 xxx.schema.yaml
punctuator:
  # 可以用以下任何方式搞定:
  # __include: punctuation:/  # 从共享目录引入预设的 punctuation.yaml
  # import_preset: symbols    # 从共享目录引入预设的 symbols.yaml
  # import_preset: xxx        # 引入自己自定义的 xxx.yaml
  # 也可以直接在这里配置:
  # full_shape:
    # ...
  # half_shape:
    # ...

以 patch 的方式打补丁

文件名为 xxx.custom.yaml,内容以 patch: 开头的,是补丁文件,注意缩进,可以对原配置进行继承、覆盖、追加。

上面提到的,配置目录的 default.custom.yaml 其实就是在给共享目录的 default.yaml 文件打补丁。

squirrel.custom.yamlweasel.custom.yaml 是同样的。

包括方案的 xxx.custom.yaml 是在给 xxx.schema.yaml 打补丁。

具体语法参考官方 wiki:定製指南

patch:
  "一级设定项/二级设定项/三级设定项": 新的设定值
  "另一个设定项": 新的设定值
  "再一个设定项": 新的设定值
  "含列表的设定项/@n": 列表第n个元素新的设定值,从0开始计数
  "含列表的设定项/@last": 列表最后一个元素新的设定值
  "含列表的设定项/@before 0": 在列表第一个元素之前插入新的设定值(不建议在补靪中使用)
  "含列表的设定项/@after last": 在列表最后一个元素之后插入新的设定值(不建议在补靪中使用)
  "含列表的设定项/@next": 在列表最后一个元素之后插入新的设定值(不建议在补靪中使用)
  "含列表的设定项/+": 与列表合并的设定值(必须为列表)
  "含字典的设定项/+": 与字典合并的设定值(必须为字典,注意YAML字典的无序性)

比如电脑手机共用一个方案 xxx.schema.yaml,但手机上有一些特殊的设置,比如开启智能纠错(电脑上开这个有点难受,手机上全键盘全拼不开更难受)。

就可以创建一个 xxx.custom.yaml 配置好了扔到手机上,不用同时弄两份配置。

patch:
  translator/enable_correction: true

只有像上面的打补丁的方式,是支持用 / 来分隔节点的。

打补丁时可以这样写(比如有如下文件 rime_ice.custom.yaml):

patch:
  emoji/opencc_config: xxx.json
  emoji/option_name: emoji

但是非补丁的方案文件只能展开来写(比如 rime_ice.schema.yaml):

emoji:
  opencc_config: emoji.json
  option_name: emoji

编写词库

由于 Rime 的设计,拼音词库中并不适用英文单词和超级简拼:

hello	hello
世界	s j
蒙奇·D·路飞	meng qi d lu fei

过多的英文单词会导致卡顿,上面超级简拼的编码会导致 sjd 结尾时无法响应超级简拼。

英文建议放到英文方案,非常规的注音建议放到自定义文本。

词库默认的列是:

---
name: 词库名
version: "版本号"
sort: by_weight(按权重排序) 或 original(按码表顺序排序)
columns:
  - text    # 词汇
  - code    # 编码
  - weight  # 权重
  - stem    # 造词码(不知道是啥,好像和拼音方案没有关系)
...
你好	ni hao	123

对于没有注音,又想设置权重的词库文件,修改列即可:

columns:
  - text    # 词汇
  - weight  # 权重

自定义文本

custom_phrase.txt 文件内的字词会占据最高权重,即排在候选项的最前面。

但不与其他翻译器互相造词,如果使用了完整编码,那么这个字或词将无法参与造词,即自造词无法被记住。

所以建议只固定非完整编码的字词,「的de」应为「的d」,「是shi」应为「是s」,「仙剑xianjian」应为「仙剑xj」。

同步

installation.yaml 文件在第一次部署后会自动生成,在这里可以编辑当前设备的 ID 和同步目录,如:

installation_id: "MBP-001"  # 本机的 ID 标志,生成的文件夹是这个名字
sync_dir: "/path/RimeSync"  # 同步的路径

点击「同步用户数据」后,会在同步目录(/path/RimeSync/MBP-001)下生成用户词典 *.userdb.txt,这个就是用户词典了,里面都是输入过的内容。

同步时会和配置目录下的 *.userdb/ 进行双向更新同步。

这个同步功能还会额外单向备份配置目录下的 YAML 和 TXT 文件,但是只有根目录的。

开关记忆

方案中有几个开关(switches),比如简繁开关、Emoji 开关、中英标点开关。。。

如果设定了 reset,切换输入法或切换程序后就会重置。

如果想让输入法永远记住,需要取消设置 reset,并在 default.custom.yaml 中写入 save_options

*永远记住的前提是通过方案选单选择,而不是快捷键切换。

如何删除相关功能

比如删除英文输入,所有的相关配置是这些:

# dependencies 下的:
- melt_eng

# engine/translators 下的:
- table_translator@melt_eng

melt_eng:
  dictionary: melt_eng
  enable_completion: true
  enable_sentence: false
  enable_user_dict: false
  initial_quality: 1.1

两分拼字方案同样,删除 dependenciesengineliangfen: 这些部分的代码就可以了。

还有一些 Lua 的功能,比如以词定字或长词优先,在 engine 下注释掉就好了。

皮肤

squirrel.custom.yamlweasel.custom.yaml 中配置鼠须管或小狼毫的皮肤。

这里有一个鼠须管内置皮肤的展示图:NavisLab/rime-pifu图片备份

小狼毫自带皮肤预览。

需要自己设计皮肤的,推荐用这个图形化的皮肤设计器,鼠须管作者写的:LEOYoon-Tsaw/Squirrel-Designer

删词 or 降权

可以删除自造词,或降低词库中已有词语的权重(回到原始权重,不是降到最低)。

  • 鼠须管使用 Fn + ⇧ + ⌫
  • 小狼毫使用 Ctrl/Shift + Del

想永久删除一个词库中存在的词汇,只能编辑词库,重新部署。

Tab 切光标

这功能挺好用的,每次用别人的电脑打字都会怀念这个功能。

已经默认开启,可以使用 Tab 或 Shift + Tab 在拼音中前后移动。

2022-03-22-000487

对于「xian西安」「tian提案」这种拼音,如果想切到「xi、ti」的后面,只能用左右方向键移动。

另外 Shift + ⌫ 可以删除单个汉字的拼音。

不同的上屏方式

按下空格会上屏汉字,按下回车会上屏字母(可临时输入一些词库中没有的英文)。

以输入「虐心 nue’xin」为例:

  • 按回车,上屏的是 nuexin
  • 按 Ctrl/Shift + 回车,上屏的是 nve xin。(u → v,中间有空格)

translator/preedit_format 这里会影响输入框和 shift + 回车时的显示,比如是显示 nue、nve 或 nüe。

如果是双拼方案,preedit_format 还可以选择是否在输入框进行转换,比如小鹤双拼输入 zz 时,是显示 zz 还是 zou

opencc

opencc 除了做简繁转换,也可以做很多其他功能。比如想输入摄氏度的符号 °C ,可以自定义文本中写上:

°C	sheshidu

但这样,这个符号会顶到第一个候选项,重码时影响平时打汉字。推荐用 opencc 的方法,Emoji 就是这样实现的。

输入内容<Tab>响应内容1<Space>响应内容2<Space>响应内容3...
摄氏度	摄氏度 °C

输入 摄氏度,第一个候选项是其本身,后续则是映射的其他内容。类似输入 提手旁 会得到 提手旁 扌,输入 相泽南 会得到 相泽南 相沢みなみ 等等都是这么做的。

这个「输入内容」其本身应该在词库中存在,否则只能输入过一次后才会有响应。

另一个用法是 show_in_comment: true,可以让「响应内容」放到 comment 里面。比如可以实现显示英文单词的翻译。