GNU/Linux 输入法折腾笔记 (RIME)
终于,我在也忍受不了 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-rime、Windows发行版PRIME、macOS 发行版XIME、Android发行版同文输入法(Trime)、iOS发行版iRime。
哇!开源输入法呢!!✪ω✪
去 TM 的资本主义 搜狗拼音,开源输入法才配在睾贵的 GNU/Linux 上打字
于是便上了 RIME 的贼船 _(:з」∠)_
关于输入法与输入法框架🔗
与 Windows 不同的是,GNU/Linux 下的中文输入法都是需要依赖于输入法框架的,这里的框架有 ibus、fcitx 等。输入法框架 可以通过 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 制作的词库扩展包
使用方法🔗
将解压出来的所以文件复制到 ~/.config/ibus/rime
文件夹下即可
luna_pinyin.custom.yaml
要被覆盖?!那模糊拼音的配置岂不是…
不用担心。这个扩展词库的 luna_pinyin.custom.yaml
中也包含了模糊拼音的功能,按相同方法开启即可
同步🔗
众所周知,RIME 是一个跨平台的输入法,那么每个平台都这么配置一遍岂不是很麻烦?
不用担心。这个问题可以通过同步来解决 (顺便还解决了不同平台共享词库的需求)
只需要在 ~/.config/ibus/installation.yaml
文件中添加:
sync_dir: "[用来存放同步文件的地址]"
然后,部署 -> 同步,你的用户配置、用户词库 等都会被放在你配置的同步文件地址里。
如果你换了新的电脑,只需要将同步文件拷贝过去,然后配置一下 installation.yaml
文件,执行 部署 -> 同步 -> 部署 ,你的 用户配置、用户词库 都回来了。