xChar
·2 months ago

前言

Rime不能简单归类为输入法,确切来说,这是一套输入法的框架,而「鼠鬚管」是其在 MaxOS 系统上的应用程序。具体操作系统与输入法可参考下表。

操作系统对应的输入法github
Windows小狼毫https://github.com/rime/weasel
macOS鼠鬚管https://github.com/rime/squirrel
Ubuntu中州韵https://github.com/rime/ibus-rime
iOS仓输入法https://github.com/imfuxiao/Hamster
Android同文输入法https://github.com/osfans/trime

这些应用使用输入方案的配置+对应方案为基础运行条件,因此在这套框架下,理论上只要通过整合不同的配置文件,就能实际高定自定义的输入法。

需要说明的是,市面上已经有很多成熟的输入法软件,而 Rime 的定制需要一定的上手门槛,如果你在日常生活中,对输入法并没有太高的要求,抑或者工作中并不需要通过定制词库来提高生产效率,那么本文中的大部分内容可能对你无效。

本文为查询资料时所做笔记,用于个人回顾相关知识时作为参考。
由于个人的主力平台为 macOS+iOS,因而内容以鼠须管+仓输入法为主。但正如前文所言,只是平台应用不同,实际底层都是 Rime 这一套自定义的配置与词库的组合。如果你对 Rime 这类定制输入法感兴趣,需要查询相关资料,本文可提供一定参考。

市面上已经有很多成熟的输入法应用,选择一款需要高度定制的输入法看似是件挺折(zhuang)腾(bi) 的事情。由于本人打小以五笔字形为主要输入法,对词库的依赖度很高,加之早年实习期间,有过一段对固定词库高度依赖的工作经历,因此对定制输入法有独特的情怀。

主流的输入法要做到好用,无外忽对词库的扩展增强与更丰富的界面定制。为了使产品更「易用」,多数功能需联网使用,所谓产品优化。这在键入一些个人关键信息时,总不免有被窥视的不适之感,因而 Rime 对于我来说,成了一个优选。

随着近些年来,苹果端对第三方输入法应用的开放,也终于能得偿所愿,故而在此记录。

最后,本文内容可能会随着时间变化更新,我会在个人博客中持续更新,若你在公众号读到这篇文章,可在文末阅读全文中找到原文地址与更新。

本文目录

  • 配置文件
  • 输入方案(Schema)
  • 扩充词典
  • 其他补充
  • 参考

配置文件

系统配置目录

  • "/Library/Input Methods/Squirrel.app/Contents/SharedSupport/"
    该目录下旋转的是 Rime 的预设配置,软件更新时会自动更新该目录下的文件,因此不必手动进行修改。

用户配置目录

我们要做的修改通常在 ~/Library/Rime/ 目录下,由于 Rime 支持用户高度自定义,我需要了解该目录中文件的主要用途

  • installion.yaml 文件记录的是当前 Rime 程序的版本信息。其中有一个字段 installation_id 用来在同步用户词典时唯一标记当前 Rime 程序。

  • user.yaml 文件记录用户的使用状态。比如上次“重新部署”的时间戳,上次选择的输入方案等。

  • build 目录下放的是每次“重新部署”后生成的文件。包括字典文件编译后生成的「.bin」文件,包括与自定义配置合并后生成的各种 yaml 配置文件。

  • xxx.userdb 目录下放的是对应输入方案的用户词典。即用户在使用时候选择的词组、词频等动态信息,这个目录是实时更新的。

  • sync 目录是用来做用户数据同步的。即点击鼠须管的同步用户数据后,会将用户配置目录下的内容同步复制到该目录内。每个 sync/installation_id 目录对应不同设备上的 Rime 程序的用户数据。

默认配置修改

[!WARNING] 注意
如果想要修改配置,建议不要直接修改原有的 default.yaml 文件,而是应该新建一份 default.custom.yaml 文件,其中 xxx 与原文件名相同。这是因为部分不同的输入方案会使用同名的默认配置,对于需要自定义配置的内容,使用新建的配置以免自定义配置丢失。

如果不知道需默认需要配置哪些,可以导入一份别人已经做好的输入方案+配置列表。
Awesome-rime 这个开源项目整合了市面上主流的形码,声码,汉语与小语种方案,感谢@ayaka 14732 的整理。
GitHub - ayaka14732 Awesome Rime 輸入方案和配置列表

方案切换

你通过查看配置中的快捷键来切换不同的输入方案,以及切换方式,候选词等相关配置。


patch:
  # 菜单中可选的方案列表,可根据喜好自行调整顺序,第一位为默认方案
  schema_list:
    - schema: numbers # 大写数字
    # - schema: wubi86_jidian_trad        # 五笔 - 简入繁出
    # - schema: wubi86_jidian_trad_pinyin # 五笔拼音混输 - 简入繁出
    - schema: wubi86_jidian # 五笔
    - schema: wubi86_jidian_pinyin # 五笔拼音混输
    - schema: pinyin_simp # 普通拼音


menu:
  page_size: 8 # 候选词数量,最多支持 10 个
switcher:
  hotkeys: # 弹出菜单的快捷键
    - "Control+0"
    - "Shift+Control+0"
  abbreviate_options: true
  caption: "【 输入法设置 】"
  option_list_separator: "|"

配色外观

配色外观的配置文件是 squirrel.yaml ,我们需要在用户配置目录下新建一个 squirrel.custom.yaml 文件。

该文件为鼠须管的外观配置文件,配置内容包括配色,排版方式,字体等。

输入方案(Schema)

一套方案必须包含方案定义文件 (.schema.yaml) 和词典文件 (.dict.yaml )

方案定义文件(.schema.yaml)

文件名前缀为<schema_id>,如 wubi86_jidian,该文件配置包含方案 ID,方案名,版本号,作者词库依赖等基本信息。
还包含该方案下的核心组件。

Rime 引擎的核心与组件介绍

画了一张图,大体说明了 Rime 的核心组件与工作原理。
Obsidian-20241120-1457-nxxItUCP.png

词典文件 (.dict.yaml)

以我使用的极点五笔 86 这套方案为示例:

---
name: wubi86_jidian  #词典名。可以与输入方案标识(`schema_id`)一样,也可以不一样
version: "4.3"  #词典版本
sort: by_weight # by_weight=权重 original=原始
import_tables: # 此处是添加用户自定义词库的地方
  - wubi86_jidian_user # 个人私有词库
  - wubi86_jidian_user_hamster # Hamster 词库
  - wubi86_jidian_extra # 扩展词库

use_preset_covabulary: true #这个导入的是系统配置目录下的essay.txt,

#以下为码表

编译输入方案

共享目录下的 build 里放着程序发布时预编译好的「.bin」文件,用户目录下的 build 里放着用户点击“重新部署”后生成的「.bin」文件。

以下是生成的主要二进制文件以及用途。

  • 「Rime 棱镜」 <方案标识>.prism.bin
    结合了词典源文件与方案定义中的拼写运算规则而生成的二进制文件。(我猜测啊,应该是根据词典源文件中定义的音节编码,根据拼写运算规则,生成原音节与可替换音节的对应关系。比如原音节「lue」+拼写运算规则”derive/^([nl])ve$/$1ue/“,生成对应关系「lve」→「lue」。这样当用户输入「lve」时,就可以根据该对应关系去找「lue」的字)
  • 「Rime 固态词典」 <方案标识>.table.bin
    直接来自于词典源文件 .dict.yaml
  • 「Rime 反查词典」 <方案标识>.reverse.bin
    是反查词典的二进制文件。比如我使用五笔作为主要输入,但忘记如何拆字时会配合拼音使用,当我使用拼音拼出文字时,该文字后面会显示五笔的编码。

拼写运算

使用拼写运算来实现智能纠错和模糊音的功能。如果不开启,必须严格按照词典文件中的定义。使用五笔方案不太会用到该功能,故不作此方面笔记。感兴趣可阅读文末的参考文章。

修改标点符号

配置在半/全角模式下,敲击目标键给出相关候选,如敲下 / 时,给出 ÷ 这类候选,在方案配置下修改。

  • 参考示例
    punctuato	r:
    	full_shape:
    		# ... 省略 ...
    		"/": ["/", "÷"]
    	half_shape:
    		"/": [	"、", "、", "/", "/", "÷"]
    

扩充词典

新建一个 <name>.extended.dict.yaml 文件,配置中的 name 需要与词典后缀前一致。*.extended 并非必要的,只是便于区别这是一个扩充的词典,比如我自己习惯用 <name>.extra.dict.yaml

在对应输入方案的字典配置中,使用 import_tables,将该词典导入到该输入方案中,可以针对不同的使用场景进行配置。
示例:新建一个国家地区的词典,命名为 china_district.extra.dict.yaml ,在自己使用的 wubi86_jidian.dict.yaml 的配置中调中该词库

#该配置为 `wubi86_jidian. dict.yaml`
name: wubi86_jidian
version: "2.0"
sort: by_weight # by_weight=权重 original=原始
import_tables: # 此处是添加用户自定义词库的地方
  - wubi86_jidian_2357 # 个人私有词库
  - wubi86_jidian_user_hamster # 移动端Hamster 词库
  - china_district_extra # 自定义扩展的国家地区词库

自定义短语 (参考)

如果你的拼音用户,不建议使用英文单词和首字母简拼作为拼音词典的编码。由于 rime 的切片机制,这样做会将原本需要的其他备选词给覆盖掉。针对于需要此类映射的词,如 msd->马上到 ,比较熟悉的就是使用自定义短语。

由于五笔输入没有这种切片的机制,因此可以不使用自定义短语而直接设置编码,以下示例拼音用户可参考。

由于自定义短语独立于词典,候选词的优先级有太高,请谨慎使用。更具体的自定义短语可参考文末哈呜王的文章,他讲得比官方文档更详情。

## custom_phrase.txt示例
custom_phrase:
  dictionary: ""
  user_dict: custom_phrase #需要与自定义短语文件同名
  db_class: stabledb
  enable_completion: false
  enable_sentence: false
  initial_quality: 1

手动造词

通过往 .dict.yaml 中手动添加词库,即有手动造词
感谢 @KyleBing 的开源项目五笔码表助手 ,提供了图形化的造词界面

五笔码表助手

自动造词

自动造词会关闭自动上屏+顶字上屏的功能 (毕竟要确定选择的词)

需要修改 wubi86_jidian.schema.yaml 下面几个内容

speller:
  # max_code_length: 4                 # 四码上屏
  auto_select: false                   # 自动上屏

translator:
  enable_sentence: true                # 句子输入模式
  enable_user_dict: true               # 是否开启用户词典(用户词典记录动态字词频,用户词)
  enable_encoder: true

词条权重

权重数量越大,权重越高,排名越靠前。

LUA 扩展脚本

Rime 默认加载 Lua 脚本路径应该为:用户配置目录/rime.lua
如果自己不会写,也可以从网络上找到其他人已经编写好的脚本。添加完 LUA 脚本后,需要在对应输入方案的配置文件中,从 engine/translators 中引入该脚本。

引入示例:

patch:
	engine:
		translators:
		- lua_translator@*<脚本名>
#添加 lua脚本

其他补充

多端同步

多端同步的原理就是使用相同的配置地址进行同步。
因为我个人都是 Apple 平台的,使用 iCloud 同步,
又因为 iOS 平台默认保存在 iCloud 中如果你是其他平台,这个存储地址就以 iOS 为主。

首次同步时需要确定好共用的方案即可,当然也可以根据需要,针对设备的不同,定制不同的输入方案。

如果将 PC 方案传到移动端,可在移动端开启 Wi-Fi 上传方案的服务,将 Mac 端中的方案配置目录 RIME 替换掉移动端原目录即可。
如果将移动端方案传至 PC 端,可开启 iCloud 同步,拷贝应用文件至 iCoud,注意这样会覆盖 iCloud 内原有的同名文件,需要注意备份。

参考:一日一技 | 用 iCloud Drive 实现 RIME 输入法配置跨平台同步 - 少数派
参考:多设备同步 | oh-my-rime输入法

在特定的程序中默认使用英文输入法

需要查看特定程序的 info. Plist,找到类似包名的字符串,如 com. apple. Xcode,具体操作
可自行百度,或参考官方文档:CustomizationGuide · rime/home Wiki · GitHub

  • 示例在 terminal 和 iterm 2 中开启:
    # --- 特定程序定义初始状态的英文输入 ---
    app_options:
    	com.termius-dmg.mac: # Terminal - Mac
    		ascii_mode: true
    	com.googlecode.iterm2: #iTerm2 -Mac
    		ascii_mod: true
    

词典保存了不生效

Dict 的词条应该使用 ... 为首行,部分编辑器会自动调整格式,将 yaml 的 ... 转换为 --- ,这样的修改会导致配置失效

  • 示例
---
name: wubi86_jidian_extra
note: "扩展词库"
version: "2024-01-01"
last_edit_time: "2024-01-1"
dict_grouped: true # 词库管理应用识别:标记该码表为分组模式
sort: original
# 码表的排序方式: by_weight 权重,original 原始顺序

...  # <-<-特别注意这里是三个点,而不是三道杠
## 汽车
朗逸	yvqk
验车	cwlg

参考

幫助與反饋 | RIME | 中州韻輸入法引擎 - 官方文档
鼠须管输入法配置 – 哈呜.王 -写得特别好的第三方文档,本文着重以此为笔记
App +1 | 仓输入法:让 iOS 也能舒服的用上 Rime - 少数派 -介绍了 iOS 端笔记的同步方法
Rime 配置:雾凇拼音 - Dvel's Blog

Loading comments...