跨平台的开源输入法Rime定制指南,打造强大的个性化输入法

本文最后更新于 2024年2月12日 早上

Rime/小狼毫/鼠须管是强大的开源输入法。但是,如何快速地在Linux、macOS以及Windwos上快速配置它呢?让我们一起来看看。

Demo

Rime

Rime/中州韵是开源跨平台输入法框架,不同平台客户端不同:

一些特点:

  • 跨平台&开放: 因为是开源的原因,所以社区很开放,并且有着大量活跃用户。可以在多个平台上使用。
  • 支持Lua: 其实这个算一大特点,新的Nginx、Neovim都支持脚本语言Lua了,Rime也同样支持,让用户可以使用Lua脚本进行更多定制化;比如:农历日期输出、数字大写输出等。
  • 纯净、无追踪: 如今越来越关注用户隐私,输入法层面,Rime足够纯净;而且Rime支持本地字典。

关于Lua在Rime内如何使用,可以参考:薄荷输入法 rime 安装librime-lualibrime-lua/wiki;也可以看看Rime的项目地址集合

接下来,我们就来看看如何安装,以及如何配置和快速使用

折腾输入法?

有些小伙伴觉得为什么要折腾输入法呢?

哈哈,这个问题其实就是问喜欢android刷机的小伙伴,为什么要折腾手机root一样。

如果你觉得折腾后,可以锦上添花,或者让输入法更契合你的喜好,让你打字更快、更舒服;亦或者,就是想体验新鲜事;再或者,希望自己的打字习惯,不要流到厂商的大数据等等,都可以尝试折腾一下。

生命不息,折腾不止。

反之,如果你觉得现在用的输入法,已经完全够用;或者已经非常习惯,当然没必要折腾。

记得我当时问一个鹅厂小伙伴
哈哈,确实是这样

所以,如果你也想折腾,或者对现在的输入法不满;可以玩玩看看~

辅助视频

部分东西,还是视频比较清晰。

这里做个视频,主要内容:

  • 演示配置好后Rime的使用效果
  • 如何在Windows、macOS和Linux上安装Rime
  • 如何使用我的配置快速初始化Rime
  • 使用建议

制作教程不易,如果热心的小伙伴,想支持创作,可以加入我们的「爱发电」电圈:

做教程视频不易(B站根本不会推荐引流),请务必一键三连嗷~

感兴趣的小伙伴,还可以加入群聊:

  • QQ: 703260572

支持创作

当然,也欢迎在B站或YouTube上关注我们:

更多:

如何安装

首先我们看看如何安装Rime,主要讲解三大平台:Linux(Debian/Ubuntu)、macOS和Windows。

其他平台,暂不涉及(如: 一些爱好者,适配到Android手机上)。

本章节内容,可以参考官网进行安装: https://rime.im/download/

Linux

Linux上,方法很多。我们可以用框架直接部署,常见的框架:

  • iBus(Intelligent Input Bus): 是 Unix-like 操作系统下的多语输入法平台。因为它采用了总线(Bus)式的架构,所以命名为Bus。
  • Fcitx(Flexible Input Method Framework): 在X Window中使用的输入法框架,在源码包内包含了拼音、五笔字型以及区位、二笔的支持。可以输入UTF-8编码中的文字。可以在Linux、FreeBSD中运行。采用GPL授权。支持XIM、GTK(版本2和3)和Qt的输入法模块。

具体可以参考官方项目的文档:RimeWithIBus

我这里就用台Debian的虚拟机作为演示。

首先,从Debian8(Debian Jessie)开始,官方apt源内就已经有ibus-rime的软件包;所以,我们这里直接进行安装即可:

1
sudo apt install ibus-rime

使用apt安装

安装好以后,注销用户并重新登录(你也可以选择重启设备);之后,就可以在设置内激活我们的ibus-rime了:
添加rime输入法

到此,rime就安装完成了:
添加rime输入法

它的配置文件地址为: ~/.config/ibus/rime/

macOS

接下来,我们看看macOS如何进行安装。

首先,下载最新版本鼠须管: https://github.com/rime/squirrel/releases/latest

之后进行安装即可:
安装

需要注意,安装好后,同样需要注销用户重新登录。之后,就可以添加我们的Rime鼠须管:
添加成功

它的配置文件地址: ~/Library/Rime/

Windows

最后,我们看看Windwos如何安装。

其实,Windows,作为使用人数最多的操作系统,安装是最简单的。

当然,安装过程中;建议自定义用户的配置文件地址,比如:
安装并自定义配置文件地址

它的配置文件地址: %APPDATA%\Rime(默认)

快速上手模板

在正式开始之前,给大家分享一下我的配置。支持Linux、Windows、macOS、iOS和Android版本:

Demo

特点,已经配置:

  • 内置雾凇拼音词典,并且仓库内的字典与雾凇拼音同步;
  • 已经配置好了水鸭青皮肤样式配置;
  • 内置三款输入法: 薄荷拼音(全拼)、地球拼音-薄荷定制和五笔98薄荷定制,方便不同小伙伴选择自己喜欢的输入方式;
  • 配置多款lua脚本: 支持输入R后输入数字,进行数字转换,支持输入weekdatetimelunar分别输入当前星期、日期、时间以及农历日期,以词定字等。
  • 支持中英混合输入、支持emoji输入、支持繁体输入等。

只需要下载并移动文件到配置目录,重新部署即可:
配置目录

详细的配置,可以查看:

如果感觉非常有帮助,欢迎帮我一起承担网站和构建服务器费用(务必备注: 薄荷输入法,这样你的ID才可以出现在薄荷输入法的感谢名单里):

基础配置

打开我们的Rime,使用过程中。你会发现,它应该是这样的:
初始状态

乍一看,有一些问题:

  • 样式复古,有点像以前上世界的界面?
  • 没有词库,操作一般

为了进一步现代化。我们这里对其进行配置。

默认情况下的配置文件(配置文件存放在配置目录下;如果不存在,可以手动创建):

文件 注释
default.custom.yaml 核心配置、全局配置
squirrel.custom.yaml / weasel.custom.yaml / ibus_rime.yaml 平台相关配置。样式皮肤,不同软件默认输入法状态等。
<方案标识>.custom.yaml 输入方案的定制配置
<名称>.dict.yaml 词典
custom_phrase.txt 自定义短语

Windows上创建全局配置文件

优先级上:

1
输入方案的定制配置  > 核心配置、全局配置 > 系统自带的default.yaml

举个例子,你使用明月拼音,那么输入方案的定制配置就是:lua_pinyin.custom.yaml

部署编译

首先,Rime是如何运用个性化配置呢?很简单,用户在修改配置目录内的文件,这个只是临时修改,而真正要生效,就需要Rime重新进行部署操作。

在执行部署操作后,Rime会进行编译,将用户的自定义内容(包括词典),编译到配置目录内的build文件夹内。

部署编译,基本上三大系统是一样的:
macOS上的重新部署

Linux上的重新部署

Windows上的重新部署

需要注意,Windows上,选择方案,可以可视化操作部分default.custom.yaml选项。右键小狼毫图标就可以选择了:
Windows上的选择

方案选择

在学习配置前。我们看看如何选择方案。

我们可以使用热键进行方案切换,热键默认是Ctrl + ~F4
macOS上的方案选择

Windows上的方案选择

其中F4比较容易冲突,那么可以进行修改.
直接配置default.custom.yaml里的hotkeys

1
2
"switcher/hotkeys":
- "Control+grave"

而可以激活的方案,一是default.custom.yaml里的schema_list
比如上图内,macOS的配置:

1
2
3
schema_list:
- {schema: terra_pinyin}
- {schema: luna_pinyin_simp}

还有一部分,就是输入法的配置文件,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
switches:
- name: ascii_mode
reset: 0
states: [ 中文, 英文 ]
- name: emoji_suggestion
reset: 0
states: [ "😣️","😁️"]
- name: full_shape
states: [ 半角, 全角 ]
- name: simplification
reset: 1
states: [ 繁体, 简体 ]
- name: ascii_punct
states: [ 。,, ., ]

如果你需要更改上述文件,记得更改之后,重新部署。

样式文件

样式上面,我们需要进入rime的配置文件地址内。上文其实已经提及,需要注意的是,Windows用户可以直接右键打开:
Windows直接打开配置文件夹

macOS其实也一样可以:
macOS直接打开配置文件夹

Linux可能还是要比较辛苦一下,直接编辑~/.config/ibus/rime内的文件。

而配置样式,就是配置配置文件目录下的样式配置文件即可。不过,发行版本的rime,样式配置文件是不一样的:

  • 鼠鬚管 Squirrel: 配置文件夹下squirrel.custom.yaml文件;
  • 小狼毫 Weasel: 配置文件夹下weasel.custom.yaml文件;
  • ibus-rime: 配置文件夹下ibus_rime.yaml文件。

为什么文件里都带个custom呢?实际上,带custom的配置文件,会在rime重新编译部署后,替换系统自带的不带custom的配置文件内容,如:squirrel.custom.yaml替换squirrel.yaml

横排显示

首先我们看看如何横排显示。squirrel.custom.yamlweasel.custom.yaml只需要添加

1
2
patch
"style/horizontal": true # 横向展示

需要注意,这里使用的是Yaml格式,根节点是patch,标记为追加内容;style为一级节点,horizontal为二级节点。

另外,需要注意;Rime的缩进敏感。在没设置好编辑器缩进情况下,不建议用Tab键直接进行缩进。(比如:Vscode的缩进,Tab有时候是四个空格,有时候为两个。)

比如:Windows上编辑weasel.custom.yaml文件:
编辑weasel文件
之后的效果:
横向显示

而Linux上的ibus_rime.yaml文件,因为系统本身并没有ibus_rime.yaml与之对应。所以就不用加上custom;在文件内,也不需要加上patch根节点:

1
2
style:
horizontal: true # 横向展示

网上有小伙伴说,直接建立ibus_rime.custom.yaml并在其中加上根节点patch也会覆盖。但是我这个版本并没有用……

编辑
之后,重新部署。一般就可以看到效果了:
重新部署

重新部署后,build内就会有新的配置文件被创建了:
创建的文件

横向显示

配色样式

当然,我们还可以设置Rime的输入法配色。不过需要注意:Linux上受限于ibus框架,所以Linux上的ibus-rime无法更改配色;但是,如果你Linux可以更改ibus的配色,那么可以尝试更改ibus框架样式,比如: ibus Tweaker

以下介绍小狼毫和鼠须管如何配置。

打开配置文件(squirrel.custom.yaml/weasel.custom.yaml),在patch节点下增加内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
"preset_color_schemes/MyStyleMi":
name: MyStyleMi
author: Mintimate <"Mintimate's Blog">
text_color: 0x6495ed #拼音串
candidate_text_color: 0x424242 # 非第一候选项
back_color: 0xefefef # 背景
border_color: 0xefefef # 边框
hilited_text_color: 0xed9564 # 拼音串高亮
hilited_back_color: 0xefefef # 拼音串高亮背景
hilited_candidate_back_color: 0xed9564 # 第一候选项背景
hilited_candidate_text_color: 0xefefef # 第一候选项
hilited_comment_text_color: 0xefefef # 注解文字高亮
comment_text_color: 0xcac9c8 # 注解文字
label_color: 0xcac9c8 # 预选栏编号颜色

其中,颜色部分,使用16进制进行表示;#开头的16进制比,如果颜色为#ed9564,那么转为0x开头就是ed和64互换:0x6495ed

添加"style/color_scheme"选项(macOS还可以设置"style/color_scheme_dark"用于暗色模式)激活:

1
2
3
"style/color_scheme": MyStyleMi
# macOS下暗色模式(MyStyleMiDark需要另外配置)
"style/color_scheme_dark": MyStyleMiDark

同时,可以设置候选词的大小、窗口半径等等:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"us_keyboard_layout": true
"style/display_tray_icon": true
"style/font_face": "PingFang"
"style/font_point": 16
"style/label_font_point": 12 # 候选词数字大小
"style/horizontal": true # 横向展示
"style/inline_preedit": false # 内嵌预编辑
"style/corner_radius": 15 # 窗口圆角半径
"style/layout/border": 0 # 窗口边界高度,大于圆角半径才有效果
"style/layout/border_width": 0 # 窗口边界宽度,大于圆角半径才有效果
"style/layout/candidate_spacing": 12
"style/layout/hilite_padding": 8
"style/layout/hilite_spacing": 3
"style/layout/margin_x": 8
"style/layout/margin_y": 8
"style/layout/round_corner": 7
"style/layout/spacing": 10

之后,重新部署。即可看到效果:
macOS上暗色效果
Windows上亮色效果

输入配置

接下来,我们看看输入的基础配置。比如:候选词有几个、激活什么组件等。

首先是候选词,这次可不再是squirrel.custom.yaml/weasel.custom.yaml/ibus_rime.yaml了。它们是样式的。这次我们配置输入的。

以全局输入配置为例,我们在patch节点下添加:

1
"menu/page_size": 9 # 候选词个数

之后,重新部署即可看到效果:
效果

与此同时,rime默认切换输入法是``Shift`,原因是默认配置是这样的:

1
2
3
4
5
6
7
8
patch:
ascii_composer/good_old_caps_lock: true
ascii_composer/switch_key:
Caps_Lock: commit_code
Control_L: noop
Control_R: noop
Shift_L: commit_code
Shift_R: commit_code

解释一下:

选项 注释
commit_text 提交候选区的文字,然后切换到英文模式。
commit_code 提交已输入的编码(拼音字母),然后切换到英文模式。
inline_ascii 仅样式配置内存在 inline_preedit=true 时有效。在输入法的编辑区临时切换到英文,提交后恢复中文。
noop 不执行任何操作。
clear 清除已输入的编码,然后切换到英文模式。

你也可以自己设置,比如我设置的:

1
2
3
4
5
6
7
8
patch
"ascii_composer/good_old_caps_lock": true
"ascii_composer/switch_key":
Caps_Lock: commit_code
Control_L: noop # 不做任何操作
Control_R: noop # 不做任何操作
Shift_L: commit_code
Shift_R: inline_ascii

所以,我的配置就是这样的:
追加配置效果

到此,基础配置完毕。以上部分出现的一些配置没讲解,将在后文拆解(当然,不可能拆解透彻,建议多配合官方文档:https://github.com/rime/home/wiki

进阶配置

接下来,我们看看进阶部分的配置。本章节默认大家已经入门rime了,部分步骤不再详细演示。

字典配置

我们的输入法,还没有完全“认识”我们。不知道我们先输入什么词汇?

所以,我们需要给他词汇表,让它背下来~

引入词汇,首先是在default.custom.yaml引入配置:

1
2
# 开启用户词典功能
"translator/enable_user_dict": true

之后,创建当前输入法的定制文件。比如我使用的是明月拼音-简s s化字,所以创建:luna_pinyin_simp.custom.yaml

在其中添加内容:

1
2
3
# encoding: utf-8
patch:
'translator/dictionary': custom_dict.all

其中:

  • custom_dict.all: 为字典总表文件。对应就是配置文件目录内custom_dict.all.dict.yaml。这个可以直接自定义。

接下来,我们再创建它,并添加内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
---
name: custom_dict.all ##注意name和文件名一致
version: "2020.6.7"
sort: by_weight
use_preset_vocabulary: true
# 此处为 输入法所用到的词库,既补充拓展词库的地方
import_tables:
- luna_pinyin # 系统基础字库
- dicts/luna_pinyin.chaizi # 拆字词库
- dicts/custom_simple # 自定义
- dicts/luna_pinyin.sougou # 搜狗词库
- dicts/luna_pinyin.xiandaihanyu # 现代汉语词典
- dicts/se_words # 互联网网络词汇
- dicts/luna_pinyin.biaoqing # 表情
- dicts/luna_pinyin.emoji # emoji Ext
...

import_tables下,除了luna_pinyin文件,都在dicts对应配置文件目录dicts(也是自己创建),举个例子:dicts/luna_pinyin.chaizi就对应配置文件夹dicts/luna_pinyin.chaizi.dict.yaml
比如我的:
我的目录结构

至于词库字典内容,就需要你直接添加到dicts文件,并追加到custom_dict.all.dict.yaml文件内了。相当于custom_dict.all.dict.yaml文件是总管,输入法的定制文件考虑是否要启动这个班组。  

字典获取

我们的字典文件应该是长这样:
搜狗字典

其中,表头为解析声明。name需要与文件截取掉.dict.yaml后一样,否则无法扫描到:

1
2
3
4
5
6
---
name: luna_pinyin.sougou
version: "2023.01.08"
sort: by_weight
use_preset_vocabulary: true
...

而下面文件就是txt的文本格式了。获取可以使用:

颜文字

借助上述的字典操作,我们可以扩展出颜文字。绑定键盘vv键,呼出颜文字:
效果

参考至rime-settings获得的颜文字字典:

输入符号

如何输入符号呢?比如这样的:
箭头效果

亦或者这样:
注音效果

在或者这样的:
数字效果

其实,也是十分简单。我们只需添加symbol选项即可(反查),在输入法的选项内,添加:

1
2
3
patch:
punctuator/import_preset: symbols
recognizer/patterns/punct: '^/([0-9]0?|[A-Za-z]+)$'

具体支持的内容,可以查看:

模糊拼音

哈哈,有时候经常分不清翘舌。所以总是需要模糊拼音一下。其实添加的方法,官方也写的很详细:

简单来说,就是打开输入法的.custom.yaml文件,在patch根节点下,添加'speller/algebra'节点。

比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'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/([aei])n$/$1ng/ # en => eng, in => ing
- derive/([aei])ng$/$1n/ # eng => en, ing => in
- derive/([iu])an$/$lang/ # ian => iang, uan => uang
- derive/([iu])ang$/$lan/ # iang => ian, uang => uan
- 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
- abbrev/^([a-z]).+$/$1/ #简拼(首字母)
- abbrev/^([zcs]h).+$/$1/ #简拼(zh, ch, sh)

模糊拼音配置

需要注意,简拼配置,一定要在最后。否则会出现意想不到的效果哦,<( ̄︶ ̄)↗

1
2
3
# 这两个要在最后
- abbrev/^([a-z]).+$/$1/ #简拼(首字母)
- abbrev/^([zcs]h).+$/$1/ #简拼(zh, ch, sh)

高级配置

本章节更进一步,谈谈Rime的高级配置。

时间组件

时间组件,其实就是用Lua的脚本。如果之前有看过我Lvim的教程的小伙伴,应该会比较熟悉。

Rime也是支持Lua的脚本插件。最终实现的效果:
time效果
date效果

rime的Lua的适配,可以参考:

这里直接说一下现成的使用,首先是在配置目录内创建rime.lua文件,类似与我们之前创建的custom_dict.all.dict.yaml。并在其中写入:

1
2
time_translator = require("time")
date_translator = require("date")

紧接着,我们创建在配置文件目录创建Lua文件夹,并在其中创建与上文对应的time.luadate.lua文件:
创建文件夹与文件

date.lua写入信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
 --lua语言中的注释用“--”
local function translator(input, seg)
if (input == "date") then
------------------------------------------------------------------------------------
--普通日期1,类似2022年01月02日
date1=os.date("%Y年%m月%d日")
date_y=os.date("%Y") --取年
date_m=os.date("%m") --取月
date_d=os.date("%d") --取日
--yield(Candidate("date", seg.start, seg._end, date1, " "))
------------------------------------------------------------------------------------
--普通日期2,类似2022年1月1日
num_m=os.date("%m")+0
num_m1=math.modf(num_m)
num_d=os.date("%d")+0
num_d1=math.modf(num_d)
date2=os.date("%Y年")..tostring(num_m1).."月"..tostring(num_d1).."日"
yield(Candidate("date", seg.start, seg._end, date2, " "))
------------------------------------------------------------------------------------
--普通日期3,类似1月1日
num_m=os.date("%m")+0
num_m1=math.modf(num_m)
num_d=os.date("%d")+0
num_d1=math.modf(num_d)
date3=tostring(num_m1).."月"..tostring(num_d1).."日"
yield(Candidate("date", seg.start, seg._end, date3, " "))
yield(Candidate("date", seg.start, seg._end, os.date("%Y/%m/%d"), " "))
yield(Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), " "))
------------------------------------------------------------------------------------
--大写日期,类似二〇二〇年十一月二十六日
date_y=date_y:gsub("%d",{
["1"]="一",
["2"]="二",
["3"]="三",
["4"]="四",
["5"]="五",
["6"]="六",
["7"]="七",
["8"]="八",
["9"]="九",
["0"]="〇",
})
date_y=date_y.."年"
date_m=date_m:gsub("%d",{
["1"]="一",
["2"]="二",
["3"]="三",
["4"]="四",
["5"]="五",
["6"]="六",
["7"]="七",
["8"]="八",
["9"]="九",
["0"]="",
})
date_m=date_m.."月"
if num_m1==10 then date_m="十月" end
if num_m1==11 then date_m="十一月" end
if num_m1==12 then date_m="十二月" end
date_d=date_d:gsub("%d",{
["1"]="一",
["2"]="二",
["3"]="三",
["4"]="四",
["5"]="五",
["6"]="六",
["7"]="七",
["8"]="八",
["9"]="九",
["0"]="",
})
date_d=date_d.."日"
if num_d1>9 then
if num_d1<19 then
date_d="十"..string.sub(date_d,4,#date_d)
end
end
if num_d1>19 then date_d=string.sub(date_d,1,3).."十"..string.sub(date_d,4,#date_d) end
date4=date_y..date_m..date_d
yield(Candidate("date", seg.start, seg._end, date4, " "))
------------------------------------------------------------------------------------
--英文日期
local date_d=os.date("%d")
local date_m=os.date("%m")
local date_y=os.date("%Y")
local date_m1=""
local date_m2=""
if date_m=="01" then
date_m1="Jan."
date_m2="January"
end
if date_m=="02" then
date_m1="Feb."
date_m2="February"
end
if date_m=="03" then
date_m1="Mar."
date_m2="March"
end
if date_m=="04" then
date_m1="Apr."
date_m2="April"
end
if date_m=="05" then
date_m1="May."
date_m2="May"
end
if date_m=="06" then
date_m1="Jun."
date_m2="June"
end
if date_m=="07" then
date_m1="Jul."
date_m2="July"
end
if date_m=="08" then
date_m1="Aug."
date_m2="August"
end
if date_m=="09" then
date_m1="Sept."
date_m2="September"
end
if date_m=="10" then
date_m1="Oct."
date_m2="October"
end
if date_m=="11" then
date_m1="Nov."
date_m2="November"
end
if date_m=="12" then
date_m1="Dec."
date_m2="December"
end

if date_d=="0" then
symbal="st"
elseif date_d=="1" then
symbal="nd"
elseif date_d=="2" then
symbal="rd"
else
symbal="th"
end
date5=date_m1.." "..date_d..symbal..", "..date_y
date6=date_m2.." "..date_d..symbal..", "..date_y

yield(Candidate("date", seg.start, seg._end, date5, " "))
yield(Candidate("date", seg.start, seg._end, date6, " "))
yield(Candidate("date", seg.start, seg._end, os.date("%Y%m%d"), " "))
end
end
------------------------------------------------------------------------------------
return translator

time.lua写入信息:

1
2
3
4
5
6
7
8
9
10
  --lua语言中的注释用“--”
local function translator(input, seg)
if (input == "time") then --关键字更改,你也可以用or语句定义多个关键字
yield(Candidate("time", seg.start, seg._end, os.date("%H:%M"), " "))
yield(Candidate("time", seg.start, seg._end, os.date("%H点%M分"), " "))
yield(Candidate("time", seg.start, seg._end, os.date("%H:%M:%S"), " "))
yield(Candidate("time", seg.start, seg._end, os.date("%H点%M分%S秒"), " "))
end
end
return translator

最后,在配置文件内。激活插件:

1
2
3
engine/translators:
- lua_translator@date_translator
- lua_translator@time_translator

激活插件

Emoji

Emoji之前是挺麻烦的。现在官方出来Emoji opencc,就简单很多了。

参考:https://github.com/rime/rime-emoji

首先是下载其中的opencc文件到本地配置文件夹目录内:
下载Opencc

之后,我们对单个输入发进行配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
patch:
# 设置切换
switches:
- name: ascii_mode
reset: 0
states: [ 中文, 英文 ]
- name: emoji_suggestion
reset: 0
states: [ "😣️","😁️"]
- name: full_shape
states: [ 半角, 全角 ]
- name: simplification
reset: 1
states: [ 繁体, 简体 ]
- name: ascii_punct
states: [ 。,, ., ]
# 激活设置
engine/filters:
- simplifier@emoji_suggestion
- simplifier@zh_simp # 简体过滤
- simplifier # 简体
- uniquifier # rime基础驱动
# 定义
emoji_suggestion:
opencc_config: emoji.json
option_name: emoji_suggestion

英文输入的支持

用明月拼音,你会发现?怎么无法中英输入?

其实,是可以通过补丁的方式,支持我们的英文单词输入。参考:

我们需要做的,是把easy-en作为明月输入发的扩展,扩展到明月拼音等输入法内。

只需要将easy_en.schema.yamleasy_en.dict.yamleasy_en.yaml lua/easy_en.lua复制到 rime 配置目录。

最后,在输入法的配置项内激活即可,比如:明月拼音-简化版(luna_pinyin_simp.custom.yaml):

1
2
patch:
__include: easy_en:/patch

某些特殊方案需要指定方案名称,如微软双拼:

1
2
patch:
__include: easy_en:/patch_double_pinyin_mspy

最后,重新部署,即可看到效果:
最终效果
最终效果Mirror

定制组件

其实,你还可以基于模版,开发自己的输入法模版样式。

当然,定制前…… 可以看看官方自带的是怎么写的:

在配置目录内创建一个名字以.schema.yaml结尾的配置文件。之后,在其中按照官方的模版配置即可。其中的内容包括:

  • 方案定义、描述
  • 引擎(输入法的核心,用什么引擎去书写,比如控制是空格选定还是分隔等)

其中的描述部分:

1
2
3
4
5
6
7
8
schema:
schema_id: luna_pinyin
name: 明月拼音-定制版
version: "9.0"
author:
- Mintimate <mintimate215@gmail.com>
description: |
基于Rime预设的拼音方案。

之后的引擎参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
engine:                    # 输入引擎设定,即挂接组件的“处方”
processors: # 一、这批组件处理各类按键消息
- ascii_composer # ※ 处理西文模式及中西文切换
- recognizer # ※ 与 matcher 搭配,处理符合特定规则的输入码,如网址、反查等
- key_binder # ※ 在特定条件下将按键绑定到其他按键,如重定义逗号、句号爲候选翻页键
- speller # ※ 拼写处理器,接受字符按键,编辑输入码
- punctuator # ※ 句读处理器,将单个字符按键直接映射爲文字符号
- selector # ※ 选字处理器,处理数字选字键、上、下候选定位、换页键
- navigator # ※ 处理输入栏内的光标移动键
- express_editor # ※ 编辑器,处理空格、回车上屏、回退键等
segmentors: # 二、这批组件识别不同内容类型,将输入码分段
- ascii_segmentor # ※ 标识西文段落
- matcher # ※ 标识符合特定规则的段落,如网址、反查等
- abc_segmentor # ※ 标识常规的文字段落
- punct_segmentor # ※ 标识句读段落
- fallback_segmentor # ※ 标识其他未标识段落
translators: # 三、这批组件翻译特定类型的编码段爲一组候选文字
- echo_translator # ※ 没有其他候选字时,回显输入码
- punct_translator # ※ 转换标点符号
- script_translator # ※ 脚本翻译器,用于拼音等基于音节表的输入方案
- reverse_lookup_translator # ※ 反查翻译器,用另一种编码方案查码
filters: # 四、这批组件过滤翻译的结果
- simplifier # ※ 繁简转换
- uniquifier # ※ 过滤重複的候选字,有可能来自繁简转换

具体定制,可以参考官方的Demo:

Q&A

配置不生效?

通常情况下,如果是字典等内容,配置了但是没有生效。一般是格式错误。尤其是rime对yaml的格式极其严格。建议:

  • yaml内,不要使用Tab键进行缩进
  • 字典文件内,使用无格式的编辑器进行编辑

第二点是为什么呢?举个例子。

在字典文件内,我们使用Tab进行词与字符的分隔。使用Tab应该是这样的(macOS上纯文本编辑):
分词

但是在Xcode、Vscde上的Tab默认会自动转义为四个空格:
分词失败

这个时候重新部署就是没有用的了。

查看日志?

如果有时候,重新部署 错误。或者设置的配置没生效,想要查看日志怎么办?

其实Rime是有日志服务的,不同版本Rime的日志存放地址是:

  • Windows
    • Weasel: %TEMP%
  • Mac OS X
    • Squirrel: $TEMPDIR
  • Linux
    • iBus: /tmp

比如macOS的:

macOS上的rime日志地址

macOS上的rime日志

More

感谢

本次文章参考多方文档和教程:



跨平台的开源输入法Rime定制指南,打造强大的个性化输入法
https://www.mintimate.cn/2023/03/18/rimeQuickInit/
作者
Mintimate
发布于
2023年3月18日
许可协议