2020 年 6 月开始使用双拼,输入工具自然也相应地做了一些调整,加之从 Fcitx 升级至 Fcitx5,以及 Emacs 内转向 Emacs Rime,整体变动还是很多的,这次一并记录下来。

  • 系统:Arch Linux
  • 桌面环境: KDE
  • 编辑器: Emacs
  • 双拼方案:小鹤双拼

安装(Fcitx5 及 Fcitx5-Rime)

# 卸载旧包
$ sudo pacman -Rs $(pacman -Qsq fcitx)
# 安装 Fcitx5 本体、输入法引擎、输入法模块及 GUI 配置工具
$ sudo pacman -S fcitx5 fcitx5-rime fcitx5-qt fcitx5-gtk kcm-fcitx5

配置 Fcitx5

Fcitx5 配置文件

编辑 ~/.config/fcitx5/profile

[Groups/0]
# Group Name
Name=默认
# Layout
Default Layout=us
# Default Input Method
DefaultIM=rime

[Groups/0/Items/0]
# Name
Name=keyboard-us
# Layout
Layout=

[Groups/0/Items/1]
# Name
Name=rime
# Layout
Layout=

[GroupOrder]
0=默认

设置环境变量

程序中正常启用 Fcitx5, 需设置以下环境变量,并重新登陆:

X11 用户直接编辑 ~/.xprofile 添加如下内容

export GTK_IM_MODULE=fcitx5
export XMODIFIERS=@im=fcitx5
export QT_IM_MODULE=fcitx5
fcitx5 &

Wayland 用户在 ~/.pam_environment 中添加如下内容

INPUT_METHOD  DEFAULT=fcitx5
GTK_IM_MODULE DEFAULT=fcitx5
QT_IM_MODULE  DEFAULT=fcitx5
XMODIFIERS    DEFAULT=\@im=fcitx5

修改主题

$ mkdir -p ~/.local/share/fcitx5/themes/fcitx5-dark-transparent
$ git clone https://github.com/hosxy/fcitx5-dark-transparent.git ~/.local/share/fcitx5/themes/fcitx5-dark-transparent
  • Github上有人通过 ssfconv 工具转换了几款搜狗极简风格皮肤的 Fcitx5 主题
  • fcitx5-material-color 类似 win 10 自带的微软输入法皮肤
  • 一些设置,直接通过图形界面设置就好,如设置竖向选词框、字体等

至此,Fcitx5 设置完毕(一些小的设置也可以去 KDE 系统设置里直接修改)。

配置 Fcitx5-Rime

接下来,在 Fcitx5 的基础上配置 Fcitx5-Rime。这里可以直接使用自己以前的配置,也可以从网络上找别人的方案。

Fcitx-Rime 用户配置目录为 ~/.config/fcitx/rime ,Fcitx5-Rime 则为 ~/.local/share/fcitx5/rime

# 直接使用以前的配置
$ cp -r ~/.config/fcitx/rime ~/.local/share/fcitx5/rime

配置参考: Github

(做好备份后)将上方配置中的文件复制到 Fcitx5 用户配置目录,就可以愉快地使用小鹤双拼(简体中文)了。

自定义词库

直接使用 Fcitx5 拼音的话,增加词库十分方便。

# AUR 上有 "肥猫百万大词库"和 "萌娘百科词库"的打包
$ sudo pacman -S fcitx5-pinyin-{zhwiki,moegirl}

而对于 Rime 用户来说,事情好像有一点点复杂……

创建配置文件

用户配置目录下, default.yaml 用来调试全局方案,切换输入方案 *.schema.yaml 后不影响设定,若直接修改 default.yaml*.schema.yaml 等文件,程序更新后内容会被覆盖,因此需要创建 *.custom.yaml 等文件(打补丁),对 Rime 全局配置、各输入方案配置、自制输入方案等进行管理。

编辑 default.custom.yaml 指定输入方案(这里只保留了小鹤双拼 schema: double_pinyin_flypy ) ,并设定一些快捷操作。

patch:
  schema_list:
    - schema: double_pinyin_flypy
  switcher/hotkeys:
    - F4
  switcher/save_options:
    - full_shape
    - ascii_punct
    - simplification
  menu/page_size: 6
  ascii_composer:
    good_old_caps_lock: false
    switch_key:
      Shift_L: noop
      Shift_R: noop
      Control_L: noop
      Control_R: noop
      Caps_Lock: commit_code
      Eisu_toggle: clear
  key_binder/bindings:
    - {accept: "Control+p", send: Up, when: composing}
    - {accept: "Control+n", send: Down, when: composing}
    - {accept: "Control+b", send: Left, when: composing}
    - {accept: "Control+f", send: Right, when: composing}
    - {accept: "Control+a", send: Home, when: composing}
    - {accept: "Control+e", send: End, when: composing}
    - {accept: "Control+d", send: Delete, when: composing}
    - {accept: "Control+k", send: "Shift+Delete", when: composing}
    - {accept: "Control+h", send: BackSpace, when: composing}
    - {accept: "Control+g", send: Escape, when: composing}
    - {accept: "Control+bracketleft", send: Escape, when: composing}
    - {accept: "Alt+v", send: Page_Up, when: composing}
    - {accept: "Control+v", send: Page_Down, when: composing}
    # - {accept: ISO_Left_Tab, send: "Shift+Left", when: composing}
    - {accept: "Shift+Tab", send: Page_Up, when: composing}
    - {accept: Tab, send: Page_Down, when: composing}
    - {accept: minus, send: Page_Up, when: has_menu}
    - {accept: equal, send: Page_Down, when: has_menu}

填写配置信息

在配置文件 double_pinyin_flypy.custom.yaml 中写入以下内容

patch:
# 指定自定义词库位置
translator/dictionary: extended

"translator/dictionary 字段的值可自定义,它代表不含扩展名 *.dict.yaml 的词库文件,接下来创建该文件( extended.dict.yaml)

创建词库配置

extended.dict.yaml 中增加准备好的词库。

---
name: extended    # 词库名称,与文件名一致
version: "1.0"                # 版本号,任填
sort: by_weight               # 排序依据,by_weight表示按权重(词频)排序
use_preset_vocabulary: true   # 是否启用默认的“八股文”词库及词频系统
import_tables:
  - luna_pinyin.idiom      # 第三方词库1
  - luna_pinyin.place          # 第三方词库2
  - luna_pinyin.poem       # 第三方词库3
---

重新部署

修改配置文件后,需要 重新部署 使其生效。

同步

使用 Rime 一定要做好同步,否则丢了自己几年的输入习惯就太可惜了。同步需要修改配置目录下的 installation.yaml 文件:

installation_id: "Arch Linux"
sync_dir: "~/Sync/RimeSync/"

下面的 Emacs Rime 乃至 Android 上的同文输入法,都需要修改这个文件来指定同步目录,这样还能做到 Linux+Emacs+Android 等不同环境下的词库同步。

Emacs Rime 安装及配置

M-x package-install rime

以下是一个简单的配置示意:

(use-package rime
  :custom
  (default-input-method "rime")
  (rime-show-candidate 'posframe))

Emacs Rime 作为 Rime 的前端,可以直接使用上面配置好的系统 Rime 输入法的文件,但是不建议把 rime-user-data-dir 设置到系统 Rime 用户数据目录下,“可能会破坏 Rime 本身的自造词和排序数据”。可以修改 .emacs.d/.local/etc/rime/installation.yaml 文件——

installation_id: "Emacs"
sync_dir: "~/Sync/RimeSync/"

然后将其他配置文件从 /.local/share/fcitx5/rime 目录拷贝过来,再回到 Emacs 中 M-x rime-sync

很久很久以前遇到过 Emacs 无法使用 Fcitx 的情况。

$ LC_CTYPE=zh_CN.UTF-8 emacs --daemon
$ emacsclient --create-frame --no-wait

不过在使用 Emacs Rime 后,问题和需求完全和上面反了过来——最好还是在 Emacs 中禁用系统输入法。

  • ~/.Xresources 中设置 Emacs*useXIM: false (推荐)
  • 或者不设置 LC_CTYPEzh_CN.UTF-8

跑题时间: 在Android上使用同文输入法

我很少在手机上打字,对于手机上的输入方案并没有什么特殊需求, 此前一直用的是 Gboard,直到我越来越想自定义一些快捷输入(而非自定义短语)时,才慢慢再次将目光投向了 Rime。

Android 上可以选择 Trime 同文输入法。安装成功后,跟着 Wiki 做一些简单的设定(参考trime.yaml详解 ,酷安上也有大量关于同文输入法的讨论和分享),同时把 Arch Linux 上的配置复制到手机上。

接下来要处理的就是词库同步问题,和上面系统 Rime 输入法以及 Emacs Rime 一样,修改 rime 文件夹下的 installation.yaml 文件,根据自己的情况填写 installation_idsync_dir

installation_id: "Android"
sync_dir: "/storage/emulated/0/Sync/RimeSync/"

可以选择使用 Syncthing 等同步工具,同步电脑和手机词库。

至此,Linux/Emacs/Android 输入法就完全统一起来了。

参考