# 安装Fcitx+Rime

Linux中的中文输入法与Windows上的输入法有所不同,不像Windows中一个输入法软件即可提供输入服务,在Linux中首先需要安装基础输入法软件Fcitx或者iBus,再通过Addon的方式添加各家的输入法解决方案如Google Pinyin、Sogou Pinyin等,本篇推荐的方案就是Fcitx加Rime的组合。其中,Rime的官方名称是中州韻輸入法引擎,官方网站是Rime.im,其默认用作输入繁体,因此需要一定的配置才能输入简体字。

Manjaro的软件安装策略使得安装应用程序非常便利,直接安裝以下软件包:

sudo pacman -S fcitx-im #安裝全部fcitx組件
sudo pacman -S fcitx-rime #安裝rime
sudo pacman -S fcitx-configtool #安裝fcitx圖形管理工具

# 选择Rime

打开fcitx-configtool后,在Input Method选项卡中点击加号弹出搜索对话框,搜索Rime,点击OK添加。默认的输入法切换按键是Ctrl+Space,切换到Rime后再按Shift可以切换中英文。

一个值得注意的地方是Rime会接管部分的Fcitx设置,比如候选项数量。

然後修改~/.xprofile文件,將如下內容添加進文件中。

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

# 具体的Rime配置

自定义Rime是一桩技术活,本篇只介绍我所使用的配置,你的个性配置可以参考GitHub

当用户需要对Rime中的各种设定做小幅的调节,最直接、但不完全正确的做法是:编辑build文件夹(~/.config/fcitx/rime/build)中那些.yaml 文档。但由于更新后总会覆盖build文件夹中的文件,这么做的弊端不言而喻,因此推荐在用户文件夹(~/.config/fcitx/rime)创建custom文件,来进行自定义。创建的文件应当符合以下文件名格式:主体部份(「.」之前)与要定制的文件相同、次级扩展名(「.yaml」之前)为.custom。例如源文件为luna_pinyin.schema.yaml,你的自定义文件就为luna_pinyin.custom.yaml

我的配置文件luna_pinyin.custom.yaml如下,其主要任务便是提供简体字输出。
# luna_pinyin.custom.yaml
#
# 【朙月拼音】模糊音定製模板
#   佛振配製 :-)
#
# 位置:
# ~/.config/fcitx/rime  (Linux)
# ~/Library/Rime  (Mac OS)
# %APPDATA%\Rime  (Windows)
#
# 於重新部署後生效
#

patch:
  switches:                   # 注意缩进
    - name: ascii_mode
      reset: 0                # reset 0 的作用是当从其他输入法切换到本输入法重设为指定状态
      states: [ 中文, 西文 ]   # 选择输入方案后通常需要立即输入中文,故重设 ascii_mode = 0
    - name: full_shape
      states: [ 半角, 全角 ]   # 而全/半角则可沿用之前方案的用法。
    - name: simplification
      reset: 1                # 增加这一行:默认启用「繁→簡」转换。
      states: [ 漢字, 汉字 ]

  '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/^n/l/                     # n => l
    #- derive/^l/n/                     # l => n

    # 這兩組一般是單向的
    #- derive/^r/l/                     # r => l

    #- derive/^ren/yin/                 # ren => yin, reng => ying
    #- derive/^r/y/                     # r => y

    # 下面 hu <=> f 這組寫法複雜一些,分情況討論
    #- derive/^hu$/fu/                  # hu => fu
    #- derive/^hong$/feng/              # hong => feng
    #- derive/^hu([in])$/fe$1/          # hui => fei, hun => fen
    #- derive/^hu([ao])/f$1/            # hua => fa, ...

    #- derive/^fu$/hu/                  # fu => hu
    #- derive/^feng$/hong/              # feng => hong
    #- derive/^fe([in])$/hu$1/          # fei => hui, fen => hun
    #- derive/^f([ao])/hu$1/            # fa => hua, ...

    # 韻母部份
    #- derive/^([bpmf])eng$/$1ong/      # meng = mong, ...
    - derive/([ei])n$/$1ng/            # en => eng, in => ing
    - derive/([ei])ng$/$1n/            # eng => en, ing => in

    # 樣例足夠了,其他請自己總結……

    # 反模糊音?
    # 誰說方言沒有普通話精確、有模糊音,就能有反模糊音。
    # 示例爲分尖團的中原官話:
    #- derive/^ji$/zii/   # 在設計者安排下鳩佔鵲巢,尖音i只好雙寫了
    #- derive/^qi$/cii/
    #- derive/^xi$/sii/
    #- derive/^ji/zi/
    #- derive/^qi/ci/
    #- derive/^xi/si/
    #- derive/^ju/zv/
    #- derive/^qu/cv/
    #- derive/^xu/sv/
    # 韻母部份,只能從大面上覆蓋
    #- derive/^([bpm])o$/$1eh/          # bo => beh, ...
    #- derive/(^|[dtnlgkhzcs]h?)e$/$1eh/  # ge => geh, se => sheh, ...
    #- derive/^([gkh])uo$/$1ue/         # guo => gue, ...
    #- derive/^([gkh])e$/$1uo/          # he => huo, ...
    #- derive/([uv])e$/$1o/             # jue => juo, lve => lvo, ...
    #- derive/^fei$/fi/                 # fei => fi
    #- derive/^wei$/vi/                 # wei => vi
    #- derive/^([nl])ei$/$1ui/          # nei => nui, lei => lui
    #- derive/^([nlzcs])un$/$1vn/       # lun => lvn, zun => zvn, ... 
    #- derive/^([nlzcs])ong$/$1iong/    # long => liong, song => siong, ...
    # 這個辦法雖從拼寫上做出了區分,然而受詞典制約,候選字仍是混的。
    # 只有真正的方音輸入方案纔能做到!但「反模糊音」這個玩法快速而有效!

    # 模糊音定義先於簡拼定義,方可令簡拼支持以上模糊音
    - abbrev/^([a-z]).+$/$1/           # 簡拼(首字母)
    - abbrev/^([zcs]h).+$/$1/          # 簡拼(zh, ch, sh)

    # 以下是一組容錯拼寫,《漢語拼音》方案以前者爲正
    - derive/^([nl])ve$/$1ue/          # nve = nue, lve = lue
    - derive/^([jqxy])u/$1v/           # ju = jv,
    - derive/un$/uen/                  # gun = guen,
    - derive/ui$/uei/                  # gui = guei,
    - derive/iu$/iou/                  # jiu = jiou,

    # 自動糾正一些常見的按鍵錯誤
    - 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

  # 分尖團後 v => ü 的改寫條件也要相應地擴充:
  #'translator/preedit_format':
  #  - "xform/([nljqxyzcs])v/$1ü/"
  
  # 候选词数量设定为9
  "menu/page_size": 9

# Fcitx的皮肤

自Fcitx 4.0以来,已经可以安装第三方皮肤,例如GitHub上就有一些不错的Material Style皮肤,可以依照自身喜好选择。