GNU/Linux 输入法折腾笔记 (RIME)

14 min read

终于,我在也忍受不了 Ubuntu 18.04 自带的 ibus-libpinyin 了。决定好好配置以下输入法,本来以为最多半个小时就能搞定的事情,结果整整花了半天 _(:з」∠)_

网上一搜发现 搜狗拼音 有 GNU/Linux 版的,于是去官网下载了 搜狗拼音 的 deb 包,安装,全局终…

才怪 | ・ω・’)

当我看到 搜狗拼音 只能支持 fcitx 框架 时瞬间就放弃了。不是说 fcitx 框架 不好,只是觉得要换输入法框架太折腾了 (Ubuntu 18.4 预装了 ibus 框架);后来事实证明,ibus 框架 不仅折腾,bug 还多…

{{< spoiler >}}早晓得就换 fcitx 框架 了 _(:з」∠)_{{< /spoiler >}}


放弃 搜狗拼音 后,我又将目光投向了一款开源的跨平台输入法:RIME

中州韵输入法引擎(英语:Rime Input Method Engine,又称Rime 输入法)是由佛振编写的开源中文输入法,目前项目网站、源代码均托管在GitHub[注 1]。基于同一个核心架构,该输入法分为三个官方发行版:Linux 发行版中州韵ibus-rime)、Windows发行版小狼毫(Weasel)、macOS 发行版鼠须管(Squirrel)。另有数个第三方发行版:Linux 发行版fcitx-rimeWindows发行版PRIMEmacOS 发行版XIMEAndroid发行版同文输入法(Trime)、iOS发行版iRime

哇!开源输入法呢!!✪ω✪

去 TM 的资本主义 搜狗拼音开源输入法才配在睾贵的 GNU/Linux 上打字

于是便上了 RIME 的贼船 _(:з」∠)_

关于输入法与输入法框架

与 Windows 不同的是,GNU/Linux 下的中文输入法都是需要依赖于输入法框架的,这里的框架有 ibusfcitx 等。输入法框架 可以通过 im-config 来进行配置。然后在 输入法框架 的配置中选择 输入法

  • RIME 同时支持 ibus 框架fcitx 框架

  • 搜狗拼音 只支持 fcitx 框架

提到 ibus 框架我就多说两句,我在使用基于 ibus 框架的输入法时 (ibus-libpinyin 和 ibus-rime),偶尔会遇到打不出字的情况;调查后发现是因为 ibus 框架对于使用 Qt 编写的应用程序兼容性不好。没用过 fcitx,不知道兼容性这一方面会不会好一点

安装 RIME

安装 RIME 很简单,大多数软件仓库都是收录了 RIME 的,所以只需要使用各自系统的包管理器安装即可

Archlinux

pacman -S ibus-rime

Ubuntu / Debian

sudo apt-get install ibus-rime

Ubuntu PPA:

sudo add-apt-repository ppa:lotem/rime
sudo apt-get update
sudo apt-get install ibus-rime

Fedora / CentOS

sudo yum install ibus-rime

更多发行版请参考:ibus-rime 各发行版安装说明


fcitx 框架 版本请参考:fcitx-rime

配置 RIME

最让人头疼的配置环节来了,我在这里就因为没好好看说明书 (Rime 定制指南) {{< spoiler >}}繁体中文看得我眼睛痛 °(°ˊДˋ°) °{{< /spoiler >}} 走了很多弯路。

RIME 的配置文件在 ~/.config/ibus/rime 中。

文件夹中的 *.yaml 就是配置文件了。简单介绍一下各个配置文件的作用:

  • default.yaml: 全局配置文件

  • weasel.yaml: 发行版的配置文件 (weasel 是 Windows 下的 RIME 发行版)

  • installation.yaml: 安装信息 (可以用来配置同步目录)

  • *.schema.yaml: 各输入方案的配置文件

  • *.dict.yaml: 输入方案配套的词典源文件

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

直接修改配置文件 -> 保存 -> 部署就可以使用了,不过这样做会有一个问题——升级时,RIME 会覆盖配置文件。也就是说一旦升级就要重新配置!这显然是不合理的,因此 RIME 采用了一种用 *.custom.yaml 去部署 *.yaml 的方式进行配置。

需要改哪个文件就按照 [文件名].custom.yaml 的格式新建一个文件 (例如修改 default.yaml 就新建一个 default.custom.yaml),将需要修改的内容按特定格式写在 *.custom.yaml 文件中 -> 保存 -> 部署就 OK 了。升级时不会覆盖 *.custom.yaml 文件,所以也不用担心配置文件被覆盖的问题。

需要注意的是 *.custom.yaml 使用的语法与 *.yaml 不同,一定要按照规定的语法来写,不然会出错 {{< spoiler >}}我就被坑了  _(:з」∠)_{{< /spoiler >}}

*.custom.yaml 的写法

例如想修改无论中文模式或者英文模式,按键 / 输入 / (中文模式中默认是让你自己选择)

default.yaml 中有如下配置:

punctuator:
  full_shape:
    "/": ["/", "÷"]
  half_shape:
    "/": ["、", "/", "/", "÷"]

我们需要在 default.custom.yaml 中配置:

patch:
  punctuator/full_shape:
    "/": "/"
  punctuator/half_shape:
    "/": "/"

看出其中的区别了吗?

default.custom.yaml 使用[语句]/[语句] 匹配 default.yaml 中的缩进


如果没看清楚的话来看看下面这个例子:

很多时候我们想输入英文,但现在的输入模式是中文,并且用户并不知道现在的输入模式是中文。我们可能会在「中文模式」下打出一段“英文”,然后按 Shift 切换到「英文模式」那么已经输入的那段“英文”应当如何处理呢?RIME 提供了五种策略:

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

想要修改 Shift 的上词方式为 commit_code

default.yaml 中有如下配置:

ascii_composer:
  good_old_caps_lock: true
  switch_key:
    Shift_L: commit_text

按照[语句]/[语句] 匹配缩进的原则,我们在 default.custom.yaml 中配置:

patch:
  "ascii_composer/switch_key/Shift_L": commit_code

我的配置文件

default.custom.yaml:

patch:
  # 横向显示候选词(并没有什么卵用,ibus-rime 的候选词是由 ibus 控制的)
  "style/horizontal": true
  # 左/右 Shift 的上词方式
  "ascii_composer/switch_key/Shift_L": commit_code
  "ascii_composer/switch_key/Shift_R": inline_ascii
  # 绑定 "/" 为 "/"
  "punctuator/full_shape":
    "/": "/"
  "punctuator/half_shape":
    "/": "/"

  # 针对以下应用使用英文模式 (好像只在 Mac OS 和 Windows 下有用)
  # "app_options/code-url-handler":
  #     ascii_mode: true
  # "app_options/org.gnome.Terminal":
  #     ascii_mode: true
  # "app_options/org.gnome.Shell":
  #     ascii_mode: true
  # "app_options/google-chrome":
  #     ascii_mode: true
  # "app_options/vim":
  #     ascii_mode: true

installation.yaml:

distribution_code_name: "ibus-rime"
distribution_name: Rime
distribution_version: 1.2
install_time: "Sat Nov 17 08:39:26 2018"
installation_id: "Ubuntu"
rime_version: 1.2.9

sync_dir: "/home/mogeko/Dropbox/sync/Rime" # 存放同步文件的地址

因为配置了 模糊音扩充词库luna_pinyin.custom.yaml 里面的配置过于复杂,我就不贴出来了,后面会给大家讲解 如何配置模糊音 以及如何配置扩充词库 的。

模糊拼音

配置模糊拼音需要配置各 (某) 输入方案的配置文件

这里是官方给的一个模板 (朙月拼音) -> 【朙月拼音】模糊音定製模板

# luna_pinyin.custom.yaml
#
# 【朙月拼音】模糊音定製模板
#   佛振配製 :-)
#
# 位置:
# ~/.config/ibus/rime  (Linux)
# ~/Library/Rime  (Mac OS)
# %APPDATA%\Rime  (Windows)
#
# 於重新部署後生效
#

patch:
  "speller/algebra":
    - erase/^xx$/ # 第一行保留

    # 模糊音定義
    # 需要哪組就刪去行首的 # 號,單雙向任選
    #- derive/^([zcs])h/$1/             # zh, ch, sh => z, c, s
    #- derive/^([zcs])([^h])/$1h$2/     # z, c, s => zh, ch, sh

    #- derive/^n/l/                     # n => l
    #- derive/^l/n/                     # l => n

    # 這兩組一般是單向的
    #- derive/^r/l/                     # r => l

    #- derive/^ren/yin/                 # ren => yin, reng => ying
    #- derive/^r/y/                     # r => y

    # 下面 hu <=> f 這組寫法複雜一些,分情況討論
    #- derive/^hu$/fu/                  # hu => fu
    #- derive/^hong$/feng/              # hong => feng
    #- derive/^hu([in])$/fe$1/          # hui => fei, hun => fen
    #- derive/^hu([ao])/f$1/            # hua => fa, ...

    #- derive/^fu$/hu/                  # fu => hu
    #- derive/^feng$/hong/              # feng => hong
    #- derive/^fe([in])$/hu$1/          # fei => hui, fen => hun
    #- derive/^f([ao])/hu$1/            # fa => hua, ...

    # 韻母部份
    #- derive/^([bpmf])eng$/$1ong/      # meng = mong, ...
    #- derive/([ei])n$/$1ng/            # en => eng, in => ing
    #- derive/([ei])ng$/$1n/            # eng => en, ing => in

    # 樣例足夠了,其他請自己總結……

    # 反模糊音?
    # 誰說方言沒有普通話精確、有模糊音,就能有反模糊音。
    # 示例爲分尖團的中原官話:
    #- derive/^ji$/zii/   # 在設計者安排下鳩佔鵲巢,尖音i只好雙寫了
    #- derive/^qi$/cii/
    #- derive/^xi$/sii/
    #- derive/^ji/zi/
    #- derive/^qi/ci/
    #- derive/^xi/si/
    #- derive/^ju/zv/
    #- derive/^qu/cv/
    #- derive/^xu/sv/
    # 韻母部份,只能從大面上覆蓋
    #- derive/^([bpm])o$/$1eh/          # bo => beh, ...
    #- derive/(^|[dtnlgkhzcs]h?)e$/$1eh/  # ge => geh, se => sheh, ...
    #- derive/^([gkh])uo$/$1ue/         # guo => gue, ...
    #- derive/^([gkh])e$/$1uo/          # he => huo, ...
    #- derive/([uv])e$/$1o/             # jue => juo, lve => lvo, ...
    #- derive/^fei$/fi/                 # fei => fi
    #- derive/^wei$/vi/                 # wei => vi
    #- derive/^([nl])ei$/$1ui/          # nei => nui, lei => lui
    #- derive/^([nlzcs])un$/$1vn/       # lun => lvn, zun => zvn, ...
    #- derive/^([nlzcs])ong$/$1iong/    # long => liong, song => siong, ...
    # 這個辦法雖從拼寫上做出了區分,然而受詞典制約,候選字仍是混的。
    # 只有真正的方音輸入方案纔能做到!但「反模糊音」這個玩法快速而有效!

    # 模糊音定義先於簡拼定義,方可令簡拼支持以上模糊音
    - abbrev/^([a-z]).+$/$1/ # 簡拼(首字母)
    - abbrev/^([zcs]h).+$/$1/ # 簡拼(zh, ch, sh)

    # 以下是一組容錯拼寫,《漢語拼音》方案以前者爲正
    - derive/^([nl])ve$/$1ue/ # nve = nue, lve = lue
    - derive/^([jqxy])u/$1v/ # ju = jv,
    - derive/un$/uen/ # gun = guen,
    - derive/ui$/uei/ # gui = guei,
    - derive/iu$/iou/ # jiu = jiou,

    # 自動糾正一些常見的按鍵錯誤
    - derive/([aeiou])ng$/$1gn/ # dagn => dang
    - derive/([dtngkhrzcs])o(u|ng)$/$1o/ # zho => zhong|zhou
    - derive/ong$/on/ # zhonguo => zhong guo
    - derive/ao$/oa/ # hoa => hao
    - derive/([iu])a(o|ng?)$/a$1$2/ # tain => tian


  # 分尖團後 v => ü 的改寫條件也要相應地擴充:
  #'translator/preedit_format':
  #  - "xform/([nljqxyzcs])v/$1ü/"

将模板剪贴进 ~/.config/ibus/rime/luna_pinyin.custom.yaml 文件中,然后需要哪组就去掉那一行前面的 # 即可

扩展词库

RIME 的默认词库并没有多大,因为作者希望用户在与 RIME 磨合的过程中自己积累用户词库,确实自己养起来的词库更顺手,但养词库的过程多少还是有点痛苦的,好在 RIME 支持 扩展词库

这里使用的是 xiaoTaoist 制作的词库扩展包

GitHub 地址  下载地址

使用方法

将解压出来的所以文件复制到 ~/.config/ibus/rime 文件夹下即可


luna_pinyin.custom.yaml 要被覆盖?!那模糊拼音的配置岂不是…

不用担心。这个扩展词库的 luna_pinyin.custom.yaml 中也包含了模糊拼音的功能,按相同方法开启即可

同步

众所周知,RIME 是一个跨平台的输入法,那么每个平台都这么配置一遍岂不是很麻烦?

不用担心。这个问题可以通过同步来解决 (顺便还解决了不同平台共享词库的需求)


只需要在 ~/.config/ibus/installation.yaml 文件中添加:

sync_dir: "[用来存放同步文件的地址]"

然后,部署 -> 同步,你的用户配置用户词库 等都会被放在你配置的同步文件地址里。

如果你换了新的电脑,只需要将同步文件拷贝过去,然后配置一下 installation.yaml 文件,执行 部署 -> 同步 -> 部署 ,你的 用户配置用户词库 都回来了。