Rime ime 是中州韻輸入法引擎 (Rime Input Method Engine),项目网址如下

按照官网给出的定义:Rime 不是一种输入法,是从各种常见键盘输入法中提炼出来的抽象的输入算法框架,Rime 涵盖了大多数输入法的共性,所以在不同设定下,Rime 可化身为不同的输入法用来打字。Rime 是跨平台的输入法软件,Rime 输入方案可通用于以下发行版:

  • 【中州韻】 fcitx-rime → Linux
  • 【小狼毫】 Weasel → Windows
  • 【鼠鬚管】 Squirrel → Mac OS X

很多东西看官方的 wiki 就能看明白,希望在你继续看下去之前,先看完下面几个网址:

相信如果你看完了官方的文档应该对 Rime 的安装和配置有了一定的了解,相信你在看得过程中也已经把 Rime 对应的版本安装上了,不同发行版的配置目录不同,通过 yaml 文件来配置,本文就在官方文档的基础上调整了一些配置来适应我的习惯。你不一定要完全按照我的配置来,不过我相信读完这篇文章,你一定能够随心配置出适合你自己输入习惯的 Rime。

安装

关于安装本来不想多说什么,基本上都是非常简单的,但是在 Linux 上的一些使用经验告诉我,Linux 发行版上的 Rime,fcitx-rime 要比 ibus 版本的要好用,虽然官方建议的是 ibus 版本,但是我还是建议你使用一下 fcitx 版本的,并且结合 fcitx 的扩展会开启一个新的世界,比如自带粘贴版历史,自带日韩语输入,这一切会让输入体验上升一个高度。

sudo apt install -y fcitx fcitx-rime

更多发行版见官网

几个输入法

在初了解 Rime 的时候经常会被 Rime 中的几个输入方案的名字搞混,其实这三个方案 朙月拼音,以及该方案的简体字版本,语句流版本都是同一个方案,不过在体验上略有差别,「语句流」风格的输入方案,在空格确认后,字词并不立即上屏,而是在输入句末的标点或者按下回车时整个句子才上屏。

配置文件

安装完之后, fcitx-rime 的大部分的配置文件在 ~/.config/fcitx/rime 下,如果是 ibus 版本,将对应的 fcitx 替换成 ibus 即是配置地址,如果打开该目录能看到一系列默认配置:

  • default.yaml: 全局配置
  • weasel.yaml : 发行版配置,比如 Windows 下就是 weasel
  • installation.yaml: 安装信息
  • *.schema.yaml: 各输入方案的配置文件
  • user.yaml: 用户状态

用户自定义:

  • *.dict.yaml : 字典
  • *.custom.yaml: 用户对 default.yaml, *.schema.yaml 等配置文件进行修改的配置文件

修改 Rime 配置文件并使之生效的方法很简单,保存文件,在 Rime 菜单中点击部署,就可以立即看到效果。Rime 建议使用 *.custom.yaml 的方式来自定义配置,因为 Rime 升级时会覆盖配置文件。

如果配置了同步目录,那么在同步目录能看到

  • *.userdb : Rime 记录用户输入习惯的目录
  • UUID/ : 用户配置同步目录

虽然现在很多手机上的输入法支持双语输入,但是桌面版的输入法除了搜狗,其他真的做的不行,但是 Rime 支持很多种双语切换时的处理方式。比如某些情况下一直在输入中文,但是中间要输入英文,通常的做法就是按下 Shift 来快速切换到英文模式,那么已经输入的内容怎么处理,Rime 可以选择

  • inline_ascii: 在输入法的临时英文编辑区内输入字母、数字、符号、空格等,回车上屏后自动复位到中文
  • commit_text: 已输入的候选文字上屏并切换至西文输入模式
  • commit_code: 已输入的编码字符上屏并切换至西文输入模式
  • clear: 丢弃已输入的内容并切换至西文输入模式
  • noop: 屏蔽该切换键

具体设置如下:

ascii_composer:
  good_old_caps_lock: true
  switch_key:
    Caps_Lock: noop
    Eisu_toggle: clear
    Shift_L: commit_code
    Shift_R: commit_text
    Control_L: commit_text
    Control_R: noop

在设置自定义键的时候左右 Shift 和 fcitx 的快捷键有冲突。fcitx 设置中 额外的激活输入法快捷键双侧 Shift 改掉或者禁用。

对于左 Shift 则是将候选词上屏,Enter 则是将输入的内容原封不动上屏,和我之前的习惯保持一致。

扩展词库

Rime 自带的联想词库有其自身的局限,但是 Rime 可以支持扩展词典,在 Rime 配置目录下新建 *.dict.yaml 这样的文件:

luna_pinyin.mywords.dict.yaml

在文件中输入

# Rime dictionary
# encoding: utf-8

---
name: luna_pinyin.mywords
version: "2019.08.23"
sort: by_weight
use_preset_vocabulary: true
# 從 luna_pinyin.dict.yaml 導入包含單字的碼表
import_tables:
  - luna_pinyin
...

# table begins

# 自定義的詞條
中州韵	zhong zhou yun	1
小狼毫	xiao lang hao
自动注音的词

这里需要注意的是 Rime 的码表,是 Tab 分割的三列,分别是文字、编码、使用频次,编码的定义以音节加空格分割。在制作自己的码表时一定要注意使用 Tab 分割。

编辑文件 luna_pinyin.custom.yaml

patch:
  translator/dictionary: luna_pinyin.mywords

部署,就可以快速导入到 Rime 中。

部署之后尝试输入词库中任意一个比较复杂的词,理论上应该看到正确的词出现,否则可能词库未加载成功,那么需要到 /tmp/rime* 目录下查看 ERROR 日志。

同步配置

installation.yaml 文件中配置:

 sync_dic: "/path/to/rsync"
 installation_id: "mint-config"

然后部署,同步,用户配置和,词库都会在配置的同步路径中。

如果更换了电脑,将同步文件同步下来,然后配置 installation.yaml ,执行部署,同步,部署,然后配置、用户词库都可以了。

不同电脑之间的同步内容会以 installation_id 为名生成一个文件夹,文件的配置不会相互互通,但是用户字典是会同步的。

简单地来描述 Rime 的同步机制就是,不同电脑都会在同步目录中新建一个自己的 UUID 或者指定名字的目录,该目录下会保存所有自定义的修改,包括用户输入习惯的字典 *.userdb.txt .

在点击同步时,Rime 会

sync/*/*.userdb.txt = 合併到 => 本地 *.userdb = 導出爲 => sync/<installation_id>/*.userdb.txt`
其他電腦 = 複製來或從網盤同步下載 => sync/《其他 installation_id>/ = 本地同步 => sync/<installation_id>/ = 複製走或同步上傳到網盤 => 其他電腦同步

也就不需要手动去合并字典,只需要在合适的时机同步一下目录即可。Rime 会自动处理 userdb.txt 的合并问题。

不过需要注意的是 Rime 虽然会将自定义配置及词库同步到目录,但这只是一个单向的同步,其他机器依然需要手动处理自定义配置及词库。

特殊配置

Rime 有一些默认设置,比如上下键选词,但是很少人打字的时候会把手移动到上下键去选词。

这里记录一下我自己的一些适配,用以调整我的习惯。

在修改 Rime 配置是,可以打开 Rime 的日志,对于我使用 fcitx-rime ,那么对应的日志在

/tmp/rime.fcitx-rime.*

一般有 ERROR,WARNING, INFO 三个文件。每一次部署时最好同时开着文件观察错误情况。

每一页候选词数量

~/.config/fcitx/rime 配置目录下,vi default.custom.yaml

patch:
  schema_list:
    - schema: luna_pinyin
    - schema: luna_pinyin_simp
    - schema: luna_pinyin_fluency
  menu:
    page_size: 6

切换简体繁体

Rime 自带繁简切换,菜单中就可以设置。

切换全角半角

Rime 自带

模糊音配置

https://gist.github.com/2320943 作为模板保存到 luna_pinyin_simp.custom.yamlluna_pinyin_tw.custom.yamlluna_pinyin_fluency.custom.yaml即可。

对于模糊音设置,官网有介绍 luna_pinyin 的实现方式

对于我,这条加上还是很有必要的

  • ining

参考链接

中英文混输

需要英文字典 ``

# 加載 easy_en 依賴
"schema/dependencies/@next": easy_en
# 載入翻譯英文的碼表翻譯器,取名爲 english
"engine/translators/@next": table_translator@english
# english 翻譯器的設定項
english:
  dictionary: easy_en
  spelling_hints: 9
  enable_completion: true
  enable_sentence: false
  initial_quality: -3

皮肤

自动生成主题皮肤

material 质感的主题,很好看

fcitx 官方制作

配置管理工具

Linux 终端配置 Rime 工具

OS X

总结

到这里,就会发现 Rime 已经能够满足日场的需求,我用全拼,培养一段时间之后词库也很满足我的需求了。而到搜狗官网去看其介绍,细胞词库,云端输入,自动纠错,多彩皮肤,长词联想,网址输入,大部分的功能 Rime 都能做到,并且没有隐私问题,数据完全掌握在自己手里何乐而不为。

历史内容

之前一直使用 Google 拼音输入法,Google 拼音输入法能够导出一套用户长期积累的词库。我利用“深蓝词库转换“工具将 Google 拼音输入法导出的词库,大概 7 万多条转成 Rime 词库格式。然后开始菜单调出,小狼毫用户词典管理,选中 luna_pinying,点击“导入文本码表”导入词库。瞬间就可以从 Google 拼音输入法转移到 Rime 输入法。导入文本码表只是针对 Google 拼音输入法中由用户积累的词汇。一般只建议将最为关键,带有词频信息的词库使用“导入文本码表”的方法导入到 Rime 输入法。 关于词库,Rime 输入法的词库有两部分组成。以下摘自贴吧:

  • 一部分是由系统文本词库(一般以 xxx.dict.yaml 结尾)通过「重新部署 /deploy」生成的固态词典(一般以 xxx.table.bin 结尾),这部份词库因为在输入过程是固定不変的,所以存在用大量的词彚,也不允许用戸来直接删除。

  • 另一部分就是记录我们用戸输入习惯的用戸词典(一般以 xxx.userdb.kct)结尾。这部份词库的词彚,正常情况下是由用戸输入的时候随时生成的;其词彚可以动态调整,数量理论上来说不会特别多,也允许用戸自行删除(shift+delete)。

佛振同学在设计用户词典时,没有考虑到有导入大词库的需求,就按照估计用戸可能积累起来的词彚量,把容量设置为「十万」规模以提升存储效率,超过这个量性能则会下降。

佛振同学设计「【小狼毫】用戸词典管理」的初衷和真正目的,在於譲大家将自己従其他输入法中积累出来的用戸词彚,可以顺利地迁移到 rime 中。而不是譲你把其他输入法整个系统词库都搬进来。如今,「【小狼毫】用戸词典管理」这个功能和界面,已经被众多的小白同学稀里糊涂地滥用了。

如何正确的导入词库?答:新增固态词典引用多份码表文件

批量添加词汇,过去一直没有简易的做法。现在可以这样做:以【朙月拼音】为例,在输入方案裏指定一个新的词典名为 luna_pinyin.extended.dict.yaml #luna_pinyin.custom.yaml patch: translator/dictionary: luna_pinyin.extended

然后在用户目录创建一个词典文件 luna_pinyin.extended.dict.yaml

#Rime dictionary
---
name: luna_pinyin.extended
version: "2013.04.22"
sort: by_weight
use_preset_vocabulary: true
import_tables:
  - luna_pinyin
...
# table begins
鸹鸹! gua gua 100

这样一来,部署【朙月拼音】这个输入方案时,将编译 luna_pinyin.extended 这部词典,而这部词典除了导入【八股文】词汇表之外,还导入了名为 luna_pinyin 的词典文件,即 luna_pinyin.dict.yaml 。被导入的词典文件只取其码表,忽略 YAML 段。

被导入的码表与本词典自带的码表共同决定了编码集合。当然也可以:本文件的码表完全为空,只用来按需合并多个外部码表文件。

luna_pinyin.extended 这个词典的神奇之处是:虽然luna_pinyin.schema.yaml 已设置为加载名为 luna_pinyin.extended 的词典,但配套的用户词典名却是「luna_pinyin」,即 Rime 自动取句点之前的部分为用户词典名,以保证按以上方法增补了词汇之后,不至於因为改变词典名而抛弃原有的用户词典。

请注意,此法的设计用途是合并编码方案相同的多份词典文件,而不是用来将不同的编码混在一起。

具体的示例代码可参考 https://gist.github.com/lotem/5443073

其中心思想提炼出来就是

  1. 先譲输入方案引用一个新的系统词库码表(佛振同学在 gist.github.com 上的示例中是 luna_pinyin.kunki.dict.yaml),即给输入方案luna_pinyin(明月拼音)打一个补靪,将调用的词库重置为luna_pinyin.kunki.dict.yaml
  2. 创建一个luna_pinyin.kunki.dict.yaml 的文件,加入好你需要导入的词彚(如「瑾昀」等等)。竝导入内置的系统词库(import_tables: luna_pinyin)。

其実佛振同学import_tables的这个做法,頪似於 C 语言编程中的#include 头文件。其目的和工作机制都是一様的。目的是引用头文件(或是系统预设词库)竝添加上自己的内容;工作机制是在编译(或是重新部署的时候),将链接到的不同的文本文件合并成一个文件,竝処理成二进制文件。

我另外要在佛振同学的基础上补充几点

  1. luna_pinyin.custom.yamlluna_pinyin.extended.dict.yaml都要放入用戸文件夹中
  2. 通过import_tables的方法,不仅仅可以导入预设的词典,甚至可以导入其他的自定义词典

以笔者为例子,我在朙月拼音输入方案中设定的词库名叫 luna_pinyin.extended.dict.yaml

而我 luna_pinyin.extended.dict.yaml 在文件头部分,除了系统预设词库之外,还导入了其他的细胞词库

import_tables:
  - luna_pinyin
  - luna_pinyin.extra_hanzi
  - luna_pinyin.sgmain
  - luna_pinyin.chat
  - luna_pinyin.net
  - luna_pinyin.user
  - luna_pinyin.cn_en
  - luna_pinyin.website
  - luna_pinyin.computer
  - luna_pinyin.place
  - luna_pinyin.shopping
  - luna_pinyin.sougou
  - luna_pinyin.kaomoji
  - mywords
  1. 码表中的词彚格式

    3.1 码表文件必须是 utf-8 无 bom 的编码。不能用 ansi,否则出来的词彚会乱码 3.2 Rime 对词彚的格式有着厳格的限定,其标凖形式是「词彚<tab>ci hui<tab>100」(方引号内部的部分,<tab>表示制表符(顕示为空白字符,不是空格))。

拼音码表的词彚格式是一个词彚占一行,不同的属性之间以制表符为间隔,编码之间以半角空格为间隔。従左往右依次是词彚、编码、词频。其中编码和词频是可省略的。也就是说

词彚<tab>ci hui」、「词彚<tab><tab>100」、「词彚

都是合法词库文件格式。

如果词频省略,那麼输入法会优先调用「八股文」(一个预设的中文语言模型,包含词彚和词频两穜属性)的词频,如果八股文找不到该词彚的词频,那麼这个词彚的词频就当成 0 来処理。

如果编码省略,那麼输入法在重新部署,将文本码表生成固态词典的时候,会根据词库中的单字来给词彚自动编码(如果是拼音的话,叫「给词彚注音」更妥帖) 比如词库中有

我<tab>wo
和<tab>he
你<tab>ni
我和你

四个 item,那麼「我和你」这个省略了编码的词彚在生成固态词典的时候会自动被注音上「wo he ni」。其中有一个特别需要注意的地方,那就是処理多音字。对於含多音字的词彚,我们要侭量避免譲输入法给他自动注音,因为会帯来错误的读音(比如「重庆」读成「zhong qing」)所以一般含多音字的词彚都要最好标注上读音。如果实在没辧法弄到读音也没関系。因为 Rime 已经给多音字的罕见音做了降频処理。従而使得多音字的罕见音不会参与词彚的自动注音。

関於自动注音的具躰的细节可以看 rime 的 wiki,这裏我就不多说了。総而言之,我廃话那麼多,是为了譲大家了解 rime 词库的工作机制,其実就为了告诉大家两句话:「在导入词彚的时候,一般来说只要加纯汉字就够了。含多音字的词,系统词库一般都有,如果没有才要考虑给这个词注上音。」

另外,系统词库中,已经包含了完整的单字注音和罕用读音降频処理,大家可以放心地导入纯汉字词彚,不用太过担心。(所以一定给要记得import_tables: luna_pinyin,来使自定义码表获得系统词库中的单字注音、含多音字词彚注音以及系统词彚词频)

关於楼主配置的多个词库挂接的方法实例,可参考由 rime-aca 友情提供的「朙月拼音·扩充词库」 下载地址:https://bintray.com/rime-aca/dictionaries/luna_pinyin.dict

参考:

其他词库下载 搜狗词库 来源

小狼毫外观设定

# weasel.custom.yaml
patch:
  "style/font_face": "华文行楷"  # 字體名稱,從記事本等處的系統字體對話框裏能看到
  "style/font_point": 16     # 字號,只認數字的,不認「五號」、「小五」這樣的

  style/horizontal: true      # 候選橫排
  style/inline_preedit: true  # 內嵌編碼(僅支持 TSF)
  style/display_tray_icon: true  # 顯示托盤圖標

一些快捷键

  • ctrl+grave (grave) tab 键上面,1 左边的那个键 切换 Rime 输入方案
  • shift+delete 删除选中候选词
  • ctrl+ np 上下选词

一些问题

遇到 Rime 在 Deploy 字典时

Encode failure:

的问题,这些字典中的字符可能存在问题。

reference