Arch Linux 下 RIME 配置小鹤双拼

RIME 简介

RIME, RIME Input Method Engine ,一个开源输入法项目,全平台,高度自定义。官网:RIME | 中州韻輸入法引擎

“高度自定义”也意味着“折腾”、对新手不友好,如果只是想用简简单单用一个输入法,那还是考虑别家。

先简单说一下 RIME 的项目分类,它有许多花里胡哨的名字,一开始的时候还把我整得一愣一愣的。 RIME 给不同平台的项目取了不同的名字,如下表:

平台 名字 GitHub 地址
Windows 小狼毫 Weasel https://github.com/rime/weasel
macOS 鼠须管 Squirrel https://github.com/rime/squirrel
Linux 中州韵 fcitx: https://github.com/fcitx/fcitx-rime
    ibus: https://github.com/rime/home/wiki/RimeWithIBus (下载地址)

这三者都是 RIME 的项目,所以不要被吓到了。我觉得这种方式很有意境,比 rime-windows, rime-linx, rime-macos 有意思多了。

RIME 安装

在 Arch Linux 下直接用包管理工具安装即可[1]

sudo pacman fcitx5-im librime fcitx5-rime

打开 系统设置 > 区域设置 > 输入法 , 点击添加输入法,找到 RIME,即可添加 RIME 输入法。 RIME 输入法默认是繁体字按 Ctrl+~ ,即可打开选单,使用键盘上的 \larr \rarr ,选择朙月拼音·简化字,回车[1]

在不同平台下, RIME 的配置目录都是相同的 —— 目录结构相同,不是路径相同。在 Arch Linux 下,基于 fcitx5 ,默认的配置文件路径在 ~/.local/share/fcitx5/rime/

安装双拼方案

rime 的输入方案是独立维护的,一些发行版可能以 librime 或者类似的包提供输入方案的下载[2]。默认下 rime 并没有提供双拼的输入法,需要自己安装。

东风破

又一个花哨的名字,东风破(plum)是 rime 的配置管理工具,用以安装输入方案。使用方法是在一个目录下安装东风破,不要求在 rime 配置目录下。

git clone --depth 1 https://github.com/rime/plum.git
cd plum
/bin/bash rime-install rime-double-pinyin

然后它会把双拼方案克隆到 plum/package/rime/double_pinyin 下:

├── double_pinyin_abc.schema.yaml   # 智能 ABC 双拼
├── double_pinyin_flypy.schema.yaml # 小鹤双拼
├── double_pinyin_mspy.schema.yaml  # MSPY 双拼
├── double_pinyin_pyjj.schema.yaml  # 拼音加加双拼
└── double_pinyin.schema.yaml       # 自然码双拼

plum/package/rime/double_pinyin/double_pinyin_flypy.schema.yaml 复制到配置文件目录下 ~/.local/share/fcitx5/rime

在配置文件目录下新建一个 default.custom.yaml

patch:
  schema_list:
    - schema: double_pinyin_flypy

重新部署就能用了。这里显而易见是只加了小鹤双拼方案,你也可以加其他的方案,方便后续自由切换。

RIME 配置

先来看一下目前为止我们的配置文件目录结构[3]

rime
├── build/
├── default.custom.yaml
├── double_pinyin_flypy.schema.yaml
├── installation.yaml
├── luna_pinyin.userdb/
└── user.yaml
  • build/ 一个目录, rime 部署之后就会在里面生成配置和 bin 文件,你可以看到里面的文件都是成队出现的,一个 prism.bin 配一个 schema.yaml 。在上一节中我们是把小鹤双拼的方案放在配置目录 rime 下,在部署之后也可以在 rime/build 下面看到它。 这个目录不用动
  • default.custom.yaml 全局配置,比如前面用的配置哪些方案
  • double_pinyin_flypy.schema.yaml 小鹤双拼方案,里面记录的就是对应的输入法信息。这个文件建议不动,后面我们会写新的配置文件来补充它。
  • isntallation.yaml 安装信息,不用动,后面同步的时候才会修改(详见词典同步)。
  • luna_pinyin.userdb/ 输入法的数据库,简单说就是词库了。这个不用动
  • user.yaml 用户状态信息。包括在方案选项选取的输入方案、输入法选项状态如「中/西」「簡/繁」等。不用动

自定义配置

<输入法>.schema.yaml 是默认的输入方案,它是最原始的,且不应该配修改。如果我们要对其进行配置,新建一个配置文件,名字 <输入法>.custom.yaml ,这就是对原配置的补充。当然也可以直接改 schema.yaml ,但建议是把补充写到 custom.yaml 下,所有的输入方案都是如此。

所以全局配置用的也是 custom.yaml ,升级啊什么的不会影响到自定义配置。

工作流

来简单看一下 rime 的配置信息传输流程

graph LR;
A(default.custom.yaml) --> |全局配置| B(.schema.yaml)
B --> |输入法补充配置| C(.custom.yaml)

比如在 default.custom.yaml 设了个快捷键, .schema.yaml 也设了个快捷键,二者冲突,那么在切换到这个输入法的时候,使用的就是后者的快捷键。同理,如果配置了 .custom.yaml ,那么继续覆盖。因此我们才应该把所有的自定义配置写到 .custom.yaml 中。

全局配置

来看一下我的全局配置 default.custom.yaml ,我将介绍这些配置的作用,至于更多、更详细的配置,需要移步到官网《Rime 定製指南》。

patch:
  schema_list:
    - schema: double_pinyin_flypy
  switcher:
    hotkeys:
      - Control+grave
    save_options:
      - full_shape
      - ascii_punct
      - simplification

    # 用半角斜线而不是奇丑无比的全角斜线做分隔符。
    option_list_separator: "/"

  menu/page_size: 5

  ascii_composer: # 设置caps、shift、control等键的作用
    good_old_caps_lock: true # 若为true,caps只切换大小写
    switch_key:
      Shift_L: commit_code
      Shift_R: noop
      Control_L: noop
      Control_R: noop
      Caps_Lock: commit_code
      Eisu_toggle: clear

  key_binder/bindings:
    - {accept: minus, send: Page_Up, when: has_menu}
    - {accept: equal, send: Page_Down, when: has_menu}
    - {accept: "Control+g", send: Escape, when: composing}

patch

整个 custom.yaml 只有这一个根项 patch ,同样,输入法的 custom.yaml 也是由这个 patch 组成。可见它是作为补丁打到原方案上的,这是一种更优雅的方式。

schema_list

输入方案列表,它会以配置文件作为根目录,向下去寻找方案。

比如小鹤双拼 rime/double_pinyin_fly_py.schema.yaml ,那么填配置时只要 double_pinyin_fly_py 就可以。

比如加了一个自定义的输入方案 rime/my_im/my_input_method.schema.yaml ,那么配置就填 my_im/my_input_method

switcher

切换器,定义输入法的切换行为。

hotkeys 定义了切换输入法的快捷键, Control+grave 实际上是 Ctrl+` 。你也可以加一个 F4

save_options 就是切换输入法之后,那些配置保留。比如现在给出的就是切换输入法之后,全角还是全角,简体还是简体。

option_list_separator 这个是参考的前辈的文章[2]

指定候选词个数

ascii_composer

指定特殊键的作用,参考的前辈的配置[4]

commit_code 意思是,如果在输入过程中该键触发了,就会让当前输入的按键直接上屏,一图解千意。

clear 相反,就是按了直接清除,不上屏。

key_binder/bindings

热键绑定,这里绑定的是 - = 用来翻页,也就是平时用的模式。然后加一个 Ctrl+g 不上屏直接退出,也就是 clear

更多按键可以参考文章 [4] https://github.com/Iorest/rime-setting/blob/master/double_pinyin_flypy.schema.yaml 的配置。

输入方案配置

接下来看具体的输入方案 double_pinyin_flypy.custom.yaml 的配置。

patch:
  switches:
    - name: ascii_mode
      reset: 1
      states: [ 中文, 西文 ]
    - name: simplification
      reset: 1
      states: [ 漢字, 汉字 ]

  translator/dictionary: luna_pinyin.extended

  punctuator/half_shape:
    "!": "!"
    "\"":
      pair:
        - "“"
        - "”"
    "#": "#"
    "$": "$"
    "%": "%"
    "*": "*"
    "'":
      pair:
        - "‘"
        - "’"
    ",": ","
    "-": "-"
    ".": "。"
    "/": "/"
    "\\": "、"
    "[": "【"
    "]": "】"
    "{": "「"
    "}": "」"
    "<": "《"
    ">": "》"
    "^": "……"
    "_": "——"
    "`": "`"
    "|": "·"
    "~": "~"

  # 双拼使用自定义词典 custom_phrase.txt
  custom_phrase:
    dictionary: ""
    user_dict: custom_phrase
    db_class: stabledb
    enable_completion: false
    enable_sentence: false
    initial_quality: 1
  "engine/translators/@5": table_translator@custom_phrase

switchers

这个对应的是初始化方案。

ascii_mode 表示中英状态, reset 置为 1 表示默认是英文状态。如果你置为 0 ,那么输入法切换过来之后就是中文的输入状态。

simplification 表示繁简状态, reset 置为 1 表示默认简体。

translator/dictionary

这个表示要添加的词典,后面会介绍(详见词典配置)。

punctuator/half_shape

定义了“全角状态”(即中文输入状态)下的特殊符号的行为。

"!": "!" ,那么在中文输入状态下,输入 !Shift + 1 ),全角的 ~!~会上屏。

"\"":
  pair:
    - "“"
    - "”"

在中文输入状态下,输入 " ,全角的 , 会依次上屏,第一次是前者,再按一次出后者。

这是为了:

  1. 定义中文的某些全角标点符号,比如逗号 ,句号
  2. 使得即使在中文输入下,有些符号也是半角,比如 $ 。否则它会让你选择各种货币符号,如果你想在 markdown 中写公式就会略显麻烦

custom_phrase

这个才是真正意义上的自定义词典, 前面的 translator/dictionary 指的是外部的、人家写好的词典,而 custom_phrase 是我们自己去修订的词典。同样在后续介绍(详见)。

至此输入方案就配置完了,因为词典还没配,为了测试,可以先把 translator/dictionarycustom_phrase 的部分注释掉。

外观定制

在 windows 和 macOS 下可以很好配置, ibus 也稍微能配置。这里指路:CustomizationGuide · rime/home Wiki · GitHub

在 fcitx5 下,外观必须在 fcitx5 来配, rime 自己配不了,我是看这位朋友的博客《Manjaro安装fcitx5-rime与美化 - 肥婶 - 博客园》才明白的。具体做法就是去搜索 fcitx5 的皮肤,下载之后放到 ~/.local/share/fcitx5/themes/ 下,然后 fcitx5配置 > 配置附加组件 > 经典用户界面栏 > 选择对应主题

我推荐几个我觉得比较好看的皮肤:

词典配置

我会把词典分为外部词典自定义词典来讲,虽然说二者几乎是等价的 —— 虽然我的确说不出个一二三四,但分开的好处前面也提到了,就是后续管理方便。

词典格式

词典格式如下所示[5],字典总共有三列,分别是字词编码(可选),读音权重(可选):

# 一个字。
你	ni
我	wo
的	de	99%
的	di	1%
地	de	10%
地	di	90%
目	mu
好	hao

# 词组
你我
你的
我的
我的天
天地	tian di
好天
好好地
目的	mu di
目的地	mu di di
  • 字词

    字面意思,就是要输入的字(单字)或词组(多字)

  • 读音权重

    可以是非负整数,也可是是浮点数的百分比,用于纠正多音字的词组。

  • 编码

    就是键盘按那些键会出现对应的字词,多个字用空格隔开。

    • 如果是单字,那么编码必须定义
    • 如果是词组,且满足以下两个条件,那么可以不用定义,否则必须定义:
      • 词组中的每个都已经有编码定义
      • 词组中不含多音字;或者该多音字在的当前词中的读音权值,超过该多音字全部词组读音权值的 5% 。

    单字容易理解,就是基本定义,如上述例子中的“一个字”部分。

    词组的两个条件必须同时满足。比如“你我”,都不是多音字,那么就可以直接省去编码部分,输入 n i w o 后就会出现在候选区。重点是第二个条件的第二部分——它实在太拗口了。比方说有 100 个由“的”组成词,其中 97 个发 de , 3 个发 di ,如此那 3 个发 di 的词组必须编码,因为它们是少数;如果不定义编码,就会按照大部分的发音去定义它。因此“目的”一定要编码成 mu di ;“天地”同理,这里词量太少所以看不出是那 5 % 。

    所以现在的问题是:我们写字典时要考虑那么多吗?答案是否定的。对于大量的通用词库,前辈大佬们已经帮我们把工作做好了(感谢!);而我自己的自定义词库毕竟是我们在日常使用中中慢慢积累的,每次添加时加上读音不会麻烦。

外部词典

形如 <Name>.dict.yaml 的配置文件,需要加入头配置[5]

# 注意這裏以 --- ... 分別標記出 YAML 文檔的起始與結束位置
# 在 ... 標記之後的部份就不會作 YAML 文檔來解讀
---
name: luna_pinyin
version: "0.9"
sort: by_weight
use_preset_vocabulary: true
...
  • name: 词典名,内部使用,可以与对应的输入方案一致,也可以不同
  • version: 管理词典的版本,规则同输入方案定义文件的版本号
  • sort: 词条初始排序方式,可选填 by_weight(按词频高低排序)或 original(保持原码表中的顺序);
  • use_preset_vocabulary: 填 true 或 false,选择是否导入预设词汇表【八股文】,这个我不太清楚,需要可以去官网看。

词典之间可以互相导入,因此我们可以把所以词典都放到一个目录下,然后写一个入口 dict.yaml 去调用即可。让我们先下载词典吧,摘取前人的智慧成果!

下载一个比较全的词库:https://github.com/Iorest/rime-setting (这其实是大佬的 rime 配置,它在另一个仓库分享了词库:https://github.com/Iorest/rime-dict ,但是它好像没写词典入口,所以到到配置里面去拿)。

  1. 将里面的 luna_pinyin.extended.dict.yaml 复制到配置目录下作为词库的入口。前面在配置方案输入法的时候,配置里面已经写了把 luna_pinyin.extended 词库导入(详见translator/dictionary),如果之前注释了就取消注释。
  2. 把其字典目录 dicts 复制到配置目录下
  3. custom_phrase.txt 复制到配置目录下,这是下一节要讲的自定义词典

看一下词典入口 luna_pinyin.extended.dict.yaml

---
name: luna_pinyin.extended
version: "2016.06.26"
sort: by_weight  #字典初始排序,可選original或by_weight
use_preset_vocabulary: true
#此處爲明月拼音擴充詞庫(基本)默認鏈接載入的詞庫,有朙月拼音官方詞庫、明月拼音擴充詞庫(漢語大詞典)、明月拼音擴充詞庫(詩詞)、明月拼音擴充詞庫(含西文的詞彙)。如果不需要加載某个詞庫請將其用「#」註釋掉。
#雙拼不支持 luna_pinyin.cn_en 詞庫,請用戶手動禁用。

import_tables:
  - luna_pinyin # 基础词库,一定要加,不然会少很多字
  - dicts/luna_pinyin.sougou.basic
  - dicts/luna_pinyin.popular
  - dicts/luna_pinyin.xiandaihanyu
  - dicts/luna_pinyin.chengyusuyu
  - dicts/luna_pinyin.computer
  - dicts/luna_pinyin.kaifa
  - dicts/luna_pinyin.poetry
  - dicts/luna_pinyin.chat
  - dicts/luna_pinyin.place
  - dicts/luna_pinyin.shopping
  - dicts/luna_pinyin.website

可见,词典加载就在 import_tables 那里加,不加载的注释或者闪掉,且写的时候不用加 .dict.yaml 后缀。

下面补充两个词库:

yay -S  fcitx5-pinyin-moegirl-rime fcitx5-pinyin-zhwiki-rime

它们会被存在 /usr/share/rime-data/ ,这个目录是 rime 的一个内部目录,所以可以直接使用相对路径,即名字:

- moegirl
- zhwiki

重新部署即可。

自定义词典

自定义词典是配置目录下的 custom_phrase.txt ,它不用写头信息,定义个编码即可(也算头信息把):

# Rime table
# coding: utf-8

中州韻輸入法引擎	rime	2
又双叒叕	yyy
http://rime.im/	rime	1

这里就是我们平时手动积累词汇的地方,不需多言,注意各列之间是 tab 制表符( \t )而不是空格即可。前面输入法配置的时候也写了,如果注释了取消一下(详见:custom_phrase)。

如果需要词库转换的话,可以是看看文末的参考文章[6],用的工具是:深蓝词库转换,它转换出来的是 txt 格式,

词典导入导出同步

librime 编译出的工具 rime_dict_manager 来实现[3]

$ rime_dict_manager
options:
    -l|--list
    -s|--sync
    -b|--backup dict_name
    -r|--restore xxx.userdb.txt
    -e|--export dict_name export.txt
    -i|--import dict_name import.txt

注意,在使用词典管理工具前,确保 rime 没有在使用词库,即把所有 rime 关掉,或者直接关 fcitx5 。

词典同步

设置 installation.yaml 里的 sync_dir 比如

sync_dir: /tmp/rime-sync

重新部署后,会根据 installation.yaml 里面的 installation_id (假定是 id-a) ,那么就会在同步目录下创建一个与其相同的目录 /tmp/rime-sync/id-a/ ,里面会同步 userdb.txt 词典和 default.custom.yaml + <others>.custom.yaml 自定义的输入方案。

如果另一台设备(通过 dropbox 等方式)或程序( emcas-rime )也指定了同样的文件夹,此时就有两个子目录。双方再次使用同步命令,就可以做到同步了[3]

部署

别忘了重新部署。因为添加了字典,部署时会花一点儿时间。

后记

呼,这也是给我折腾麻了。虽然用了 rime 一段时间了,但是一直没集中活力弄它,抄得官网和前辈大佬的配置得过且过。为了写这篇博客去学习了很多,输出倒逼输入真的可以。

rime 折腾完了就去搞 Emacs 去了, 于是开始捣鼓 emacs-rime ,如果有兴趣可以来看看。

Powered by Org Mode.