因为在 Arch Linux 里使用的搜狗拼音候选框总是无法完全显示, 一直没有好的办法. 根据这里的 建议, 尝试了优麒麟版搜狗. 问题确实可以解决, 无奈功能有点简陋, 所以还是不太合适.

搜索 Linux 里常用的中文输入法, 发现了 RIME (名字也是递归梗), 而且被 Arch wiki 称为著名输入法 (英文版倒是没加著名, 但作为中文输入法我更相信中文版 wiki). 不过 RIME 居然在 Linux, Windows 和 MacOS 里分别有不同的名字, 分 别叫小狼毫, 鼠须管什么的, 实在让人心生疑虑. 不过好在 Arch 已经有对应的包, 所以倒可以先试试.

安装

直接安装 librime 就好, 配合 fcitx-rime 或者 ibus-rime 使用. 需要双拼方 案的话再安装 rime-double-pinyin.

配置

RIME 的文档有 点随性, 但仔细阅读的话很有用. 和通常的 Linux 程序一样, RIME 也分为默认 设置 (多在 /usr/share/rime-data, 一般无需修改) 和用户设置 (fcitx 的话一般在 $HOME/.config/fcitx/rime). 用户设置又分为两种, 针对所有 RIME 输入法 (schema) 的放在 default.custom.yaml, 针对特定输入法的放在 <schema>.custom.yaml, 将 <schema> 换成相应输入法的 schema (我这里是 double_pinyin_flypy).

RIME 的配置其实就是给已定义好的设置打补丁 (patch). 一个文件只能有一个 关键词 patch, 其他的项都在这个 patch 下面. 比如改变默认候选词数量的设 定就是

# default.custom.yaml
patch:
  "menu/page_size": 7

指的是, 将默认 “menu/page_size” 的值改为 7. 相关的设置选项可以在 /usr/share/rime-data/default.yaml 以及相应的输入法 schema 文件中找到.

我用的几个设置是:

使用简体中文

默认的 RIME 输入法都是繁体. 查看我使用的 double_pinyin_flypy.schema.yaml 里面, 有 simplification switch:

switches:
  - name: ascii_mode
    reset: 0
    states: [ 中文, 西文 ]
  - name: full_shape
    states: [ 半角, 全角 ]
  - name: simplification
    states: [ 漢字, 汉字 ]
  - name: ascii_punct
    states: [ 。,, ., ]

所以按这里, 将这个 switch (第三个选项) 永远设为 1 即可 (在 double_pinyin_custom.yaml 里面):

# double_pinyin_custom.yaml
patch:
  "switches/@2/reset": 1

中文输入也使用西文标点

文档里是指定了一份自定义的标点来实现. 不过 RIME 会自带一个 punctuation.yaml 的文件, 所以我们可以偷个懒, 直接把输入法的标点指定为 ascii style.

# double_pinyin_custom.yaml
patch:
  "punctuator/half_shape":
    __include: punctuation:/ascii_style

自定义短语

仿照 luna_pinyin.schema.yaml 里的写法, 在 double_pinyin_custom.yaml 里面加上:

patch:
  engine/translators:
    - punct_translator
    - reverse_lookup_translator
    - script_translator
    - table_translator@custom_phrase
    - table_translator

  custom_phrase:
    dictionary: ""
    user_dict: custom_phrase
    db_class: stabledb
    enable_completion: false
    enable_sentence: false
    initial_quality: 1

然后在用户的 rime 文件夹下添加 custom_phrase.txt 即可. 文件格式参加 这里. 需要注意的是, 每行短语 定义需要用 TAB 分隔, 空格是不行滴.

小结

至此, 输入法的问题得以解决. 目前的设置已足以满足需求. 你好, RIME.