这年头混迹赛博宇宙,零信任原则的重要性不言而喻。以个人输入法为例,鉴于一些厂商不太体面的行为预设123,选择使用离线、开源的输入法已经成为一项紧迫的需求。
4202年的现在,依然出现了4这样的报告,我怎么一点也不意外呢。
选型
但凡做过些调研的朋友们应该都会投入rime的怀抱。rime在不同平台上有着不同的发行版,各有各的发行版配置,但主体部分还是互通的。 在其官网就可以找到下载链接,涵盖了Windows, macOS, Linux, Android,甚至还有(不确定有没有坑的第三方?的)iOS客户端。
配置
出于对折腾的热情,我目前的主要使用平台是Arch Linux和Android,不过由于各发行版之间只有少量配置区分,这里我会按照如下三部分进行记录:
共通
全拼
Rime 定製指南固然十分详尽,对于新人上手却不十分友好,我选择了薄荷输入法作为自己的初始化模板。这个初始化模板已经足够好用,且使用了雾凇拼音的非常好用的词库,以至于在我只使用ibus-rime
的那一段时间都并未对其本身做太多修改(尽管至今也依然如此),仅关闭了它自带的模糊拼音、五笔与比划依赖。我的版本已公开在github,同时附上我参考的原始版本。
双拼
本着一步到位的原则,既然折腾了,干脆就顺便把听闻已久的双拼给安排了。听了朋友的推荐,我选用的是小鹤双拼的方案,顺便把薄荷拼音的一些特性整合了进来,大体修改同上,同样已公开在github,并附原始版本。
Arch Linux: ibus-rime
Linux上的输入法一般由ibus
或是fcitx
管理,参考官方文档仅需修改少量配置即可:
# default.custom.yaml
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
"menu/page_size": 9
schema_list:
- {schema: flypy}
- {schema: rime_mint}
"switcher/hotkeys":
- "Control+grave"
"switcher/save_options":
- full_shape
- ascii_punct
- simplification
- zh_hans
- emoji_suggestion
"translator/enable_encoder": true
"translator/enable_sentence": true
"translator/enable_user_dict": true
"translator/encode_commit_history": true
Android: trime
安卓平台的rime发行版为trime,看起来似乎是第三方基于librime开发的。当前该发行版似乎还在积极改进中,我在这就暂不吐槽我在修改配置过程中遇到的种种bug了,仅贴上官方文档并提醒:时刻记得备份自己的配置文件(们),以及尽可能不要使用其GUI中的键盘设置
。不然会变得不幸
我是基于同文官方的trime.yaml
修改的配置,主要调整了少量键盘布局、增加了夜间配色、实现了少量自定义按键以及移除了大量(对我而言)没什么用的键盘、配色等,我的方案可以参看我的gist。
关于夜间配色
官方文档中指出如下:
[3.2.6]
dark_scheme
:配色方案如有此参数,即视为明亮模式的配色。当系统切换为暗黑模式后,再次弹出键盘时,自动切换配色方案为dark_scheme
指定的配色。
不过经过我的实测,这样配置确实可以自动切换到夜间模式,但是在自动切换回日间模式时,输入法的悬浮窗还会保留夜间模式的配色,这点在trime官方群讨论中得到了证实,希望日后可以得到修复(
关于按键自定义
自定义按键理论上可以做很多有意思,不过另一方面,输入法做得过于喧宾夺主也并不值得推崇。 这里只举一个例子,权当抛砖引玉:
Bili: {label: B站, command: run, option: "bilibili://search/%4$s"}
# ...
- {click: 'r', long_click: 'Bili', swipe_up: 4}
这里我把长按r
键设置为了使用bilibli app搜索当前文本框光标前的字符。其中,bilibili://search/
的字段可以通过adb shell
和logcat | grep
结合app内手动操作获取到,理论上其他app也可以通过类似的方法获取,具体还请自行实践。
DLC
同步方案
说点题外话,rime的发行版们其实有实现基于uuid的同步方案,不过这种方式其实就是生成了一个
最后我还是部分使用了sync
文件夹,具体的云端同步还需要另外结合网盘使用。加之我在配置trime时留下的不好的回忆,让我对这个方案不甚放心。librime
的这套方案,在git同步配置文件的基础上使用了syncthing来同步用户词库:
- git部分
- 使用
master
分支同步共通配置,并主动剔除发行版相关的配置文件,此分支开放在我的github repo供观众老爷们参考 - 各个发行版在
master
分支的基础上增加其对应配置文件并同步于其对应分支 master
独立更新,各发行版分支基于master
来rebase
并更新
- 使用
- syncthing部分
- 使用syncthing同步
sync
文件夹的txt文件,这里我通过在sync/.stignore
文件中添加*.yaml
来忽略所有配置文件,结果上来说实现了只同步词库的目的 - 各平台的
sync
文件夹的用户词库都通过对应输入法的同步
+部署
更新用户词库
- 使用syncthing同步
这对我来说有几个好处:
- 使用git更利于我进行版本管理(至少配置trime时不再会动不动删档重开)
不需借助现在借助了syncthing/nextcloud/onedrive
等工具就能实现多端同步
但这种方案也有几个已知不足之处,观众老爷们如果有更好的方案欢迎评论区留言:
- 由于使用了
rebase
,各发行版分支在push/pull
时往往需要使用-f
参数来强制推送/拉取,这不够优雅 感谢syncthingxxx.userdb
目录,即用户输入历史不方便同步,使用git lfs
等方案也可能导致repo不必要的臃肿