Arch Linux 下 RIME 配置小鹤双拼
Table of Contents
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]。
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:
- "“"
- "”"
在中文输入状态下,输入 "
,全角的 “
, ”
会依次上屏,第一次是前者,再按一次出后者。
这是为了:
- 定义中文的某些全角标点符号,比如逗号
,
,句号。
- 使得即使在中文输入下,有些符号也是半角,比如
$
。否则它会让你选择各种货币符号,如果你想在markdown
中写公式就会略显麻烦
custom_phrase
这个才是真正意义上的自定义词典, 前面的 translator/dictionary
指的是外部的、人家写好的词典,而 custom_phrase
是我们自己去修订的词典。同样在后续介绍(详见)。
至此输入方案就配置完了,因为词典还没配,为了测试,可以先把 translator/dictionary
和 custom_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 ,但是它好像没写词典入口,所以到到配置里面去拿)。
- 将里面的
luna_pinyin.extended.dict.yaml
复制到配置目录下作为词库的入口。前面在配置方案输入法的时候,配置里面已经写了把luna_pinyin.extended
词库导入(详见translator/dictionary),如果之前注释了就取消注释。 - 把其字典目录
dicts
复制到配置目录下 - 把
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
后缀。
下面补充两个词库:
- 中文维基百科: https://github.com/felixonmars/fcitx5-pinyin-zhwiki/releases
- 盟娘百科:https://github.com/outloudvi/mw2fcitx/releases/tag/20220925
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)。
词典导入导出同步
用 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 ,如果有兴趣可以来看看。