Mac

Mac 下调校 Rime

Posted by 漠然 on March 23, 2019

由于对国内输入法隐私问题的担忧,决定放弃搜狗等输入法;为了更加 Geek 一些,最终决定了折腾 Rime(鼠须管) 输入法,以下为一些折腾的过程

国际惯例先放点图压压惊

example1 example2 example3 example4

一、安装

安装 Rime 没啥好说的,直接从官网下载最新版本的安装包既可;安装完成后配置文件位于 ~/Library/Rime 位置;在进行后续折腾之前我建议还是先 cp -r ~/Library/Rime ~/Library/Rime.bak 备份一下配置文件,以防制后续折腾挂了还可以还原;安装完成以后按 ⌘ + 反引号(~) 切换到 朙月拼音-简化字 既可开启简体中文输入

二、乱码解决

安装完成后在打字时可能出现乱码情况(俗称豆腐块),这是由于 Rime 默认 UTF-8 字符集比较大,预选词内会出现生僻字,而 mac 字体内又不包含这些字体,从而导致乱码;解决方案很简单,下载 花园明朝 A、B 两款字体安装既可,安装后重启一下就不会出现乱码了

fonts

三、配置文件

官方并不建议直接修改原始的配置文件,因为输入法更新时会重新覆盖默认配置,可能导致某些自定义配置丢失;推荐作法是创建一系列的 patch 配置,通过类似打补丁替换这种方式来实现无感的增加自定义配置;

由于使用的是 朙月拼音-简化字 输入方案,所以需要创建 luna_pinyin_simp.custom.yaml 等配置文件,后面就是查文档 + 各种 Google 一顿魔改了;目前我将我自己用的配置放在了 Github 上,有需要的可以直接 clone 下来,用里面的配置文件直接覆盖 ~/Library/Rime 下的文件,然后重新部署既可,关于具体配置细节在下面写

四、自定义配色

皮肤配色配置方案位于 squirrel.custom.yaml 配置文件中,我的配置目前是参考搜狗输入法皮肤自己调试的;官方也提供了一些皮肤外观配置,详见 Gist;想要切换皮肤配色只需要修改 style/color_scheme 为相应的皮肤配色名称既可

patch:
  show_notifications_when: appropriate          # 状态通知,适当,也可设为全开(always)全关(never)

  style/color_scheme: mritd_dark                # 方案命名,不能有空格
  preset_color_schemes:
    mritd_dark:
      name: 漠然/mritd dark
      author: mritd <mritd1234@gmail.com>
      horizontal: true                          # 水平排列
      inline_preedit: true                      # 单行显示,false双行显示
      candidate_format: "%c\u2005%@"            # 用 1/6 em 空格 U+2005 来控制编号 %c 和候选词 %@ 前后的空间。
      corner_radius: 5                          # 候选条圆角
      hilited_corner_radius: 3                  # 高亮圆角
      border_height: 6                          # 窗口边界高度,大于圆角半径才生效
      border_width: 6                           # 窗口边界宽度,大于圆角半径才生效
      border_color_width: 0
      #font_face: "PingFangSC"                   # 候选词字体
      font_point: 16                            # 候选字词大小
      label_font_point: 14                      # 候选编号大小

      text_color: 0xdedddd                      # 拼音行文字颜色,24位色值,16进制,BGR顺序
      back_color: 0x4b4b4b                      # 候选条背景色
      label_color: 0x888785                     # 预选栏编号颜色
      border_color: 0x4b4b4b                    # 边框色
      candidate_text_color: 0xffffff            # 预选项文字颜色
      hilited_text_color: 0xdedddd              # 高亮拼音 (需要开启内嵌编码)
      hilited_back_color: 0x252320              # 高亮拼音 (需要开启内嵌编码)
      hilited_candidate_text_color: 0xFFE696    # 第一候选项文字颜色
      hilited_candidate_back_color: 0x4b4b4b    # 第一候选项背景背景色
      hilited_candidate_label_color: 0xffffff   # 第一候选项编号颜色
      comment_text_color: 0xdedddd              # 拼音等提示文字颜色

五、增加自定义快捷字符

快捷字符例如在中文输入法状态下可以直接输入 /dn 来调出特殊符号输入;这些配置位于 luna_pinyin_simp.custom.yamlpunctuator 配置中,我目前自行定义了一些,有需要的可以依葫芦画瓢直接修改

punctuator:
    import_preset: symbols
    symbols:
      "/fs": [½,,¼,,,¾,]
      "/dq": [🌍,🌎,🌏,🌐,🌑,🌒,🌓,🌔,🌕,🌖,🌗,🌘,🌙,🌚,🌛,🌜,🌝,🌞,,🌟,🌠,,,,🔥,💧,🌊]
      "/jt": [,,,,,,,,,,,,,,🔃,🔄,🔙,🔚,🔛,🔜,🔝]
      "/sg": [🍇,🍈,🍉,🍊,🍋,🍌,🍍,🍎,🍏,🍐,🍑,🍒,🍓,🍅,🍆,🌽,🍄,🌰,🍞,🍖,🍗,🍔,🍟,🍕,🍳,🍲,🍱,🍘,🍙,🍚,🍛,🍜,🍝,🍠,🍢,🍣,🍤,🍥,🍡,🍦,🍧,🍨,🍩,🍪,🎂,🍰,🍫,🍬,🍭,🍮,🍯,🍼,🍵,🍶,🍷,🍸,🍹,🍺,🍻,🍴]
      "/dw": [🙈,🙉,🙊,🐵,🐒,🐶,🐕,🐩,🐺,🐱,😺,😸,😹,😻,😼,😽,🙀,😿,😾,🐈,🐯,🐅,🐆,🐴,🐎,🐮,🐂,🐃,🐄,🐷,🐖,🐗,🐽,🐏,🐑,🐐,🐪,🐫,🐘,🐭,🐁,🐀,🐹,🐰,🐇,🐻,🐨,🐼,🐾,🐔,🐓,🐣,🐤,🐥,🐦,🐧,🐸,🐊,🐢,🐍,🐲,🐉,🐳,🐋,🐬,🐟,🐠,🐡,🐙,🐚,🐌,🐛,🐜,🐝,🐞,🦋]
      "/bq": [😀,😁,😂,😃,😄,😅,😆,😉,😊,😋,😎,😍,😘,😗,😙,😚,😇,😐,😑,😶,😏,😣,😥,😮,😯,😪,😫,😴,😌,😛,😜,😝,😒,😓,😔,😕,😲,😷,😖,😞,😟,😤,😢,😭,😦,😧,😨,😬,😰,😱,😳,😵,😡,😠]
      "/ss": [💪,👈,👉,👆,👇,,👌,👍,👎,,👊,👋,👏,👐]
      "/dn": [, , , , , , , , , ↩︎, , , , , , , , , ]
      "/fh": [©,®,,,,,,,,,,,,,,☑︎,,,,,,,,,,,]
      "/xh": [,×,,,,,,,,,,,,]

六、设置输入方案

在第一次按 ⌘ + 反引号(~) 设置输入法时实际上我们可以看到很多的输入方案,而事实上很多方案我们根本用不上;想要删除和修改方案可以调整 default.custom.yaml 中的 schema_list 字段

patch:
  menu:
    page_size: 8
  schema_list:
  - schema: luna_pinyin_simp      # 朙月拼音 简化字
  - schema: luna_pinyin           # 朙月拼音
  - schema: luna_pinyin_fluency   # 语句流
#  - schema: double_pinyin         # 自然碼雙拼
#  - schema: double_pinyin_flypy   # 小鹤雙拼
#  - schema: double_pinyin_pyjj    # 拼音加加双拼
#  - schema: wubi_pinyin           # 五笔拼音混合輸入

实际上我只能用上第一个…毕竟写了好几年代码还得看键盘的人也只能这样了…

七、调整特殊键行为

在刚安装完以后发现在中文输入法状态下输入英文,按 shift 键后字符上屏,然后还得回车一下,这就很让我难受…最后找到了这篇 Gist,目前将大写锁定、shift 键调整为了跟搜狗一致的配置,有需要调整的可以自行编辑 default.custom.yaml 中的 ascii_composer/switch_key 部分

# capslock 键切换英文并输出大写
ascii_composer/good_old_caps_lock: true
# 输入法中英文状态快捷键
ascii_composer/switch_key:
  Caps_Lock: commit_code
  Control_L: noop
  Control_R: noop
  # 按下左 shift 英文字符直接上屏,不需要再次回车,输入法保持英文状态
  Shift_L: commit_code
  Shift_R: noop

八、自定义词库

Rime 默认的词库稍为有点弱,我们可以下载一些搜狗词库来进行扩展;不过搜狗词库格式默认是无法解析的,好在有人开发了工具可以方便的将搜狗细胞词库转化为 Rime 的格式(工具点击这里下载);目前该工具只支持 Windows(也有些别人写的 py 脚本啥的,但是我没用),所以词库转换这种操作还得需要一个 Windows 虚拟机;

转换过程很简单,先从搜狗词库下载一系列的 scel 文件,然后批量选中,接着调整一下输入和输出格式点击转换,最后保存成一个 txt 文本

input-setting

convert

光有这个文本还不够,我们要将它塞到词库的 yaml 配置里,所以新建一个词库配置文件 luna_pinyin.sougou.dict.yaml,然后写上头部说明(注意最后三个点后面加一个换行)

# Rime dictionary
# encoding: utf-8
# 搜狗词库 目前包含如下:
# IT计算机 实用IT词汇 亲戚称呼 化学品名 数字时间 数学词汇 淘宝词库 编程语言 软件专业 颜色名称 程序猿词库 开发专用词库 搜狗标准词库
# 摄影专业名词 计算机专业词库 计算机词汇大全 保险词汇 最详细的全国地名大全 饮食大全 常见花卉名称 房地产词汇大全 中国传统节日大全 财经金融词汇大全

---
name: luna_pinyin.sougou
version: "1.0"
sort: by_weight
use_preset_vocabulary: true
...

接着只需要把生成好的词库 txt 文件内容粘贴到三个点下面既可;但是词库太多的话你会发现这个文本有好几十 M,一般编辑器打开都会卡死,解决这种情况只需要用命令行 cat 一下就行

cat sougou.txt >> luna_pinyin.sougou.dict.yaml

最后修改 luna_pinyin.extended.dict.yaml 中的 import_tables 字段,加入刚刚新建的词库既可

---
name: luna_pinyin.extended
version: "2016.06.26"
sort: by_weight  #字典初始排序,可選original或by_weight
use_preset_vocabulary: true
#此處爲明月拼音擴充詞庫(基本)默認鏈接載入的詞庫,有朙月拼音官方詞庫、明月拼音擴充詞庫(漢語大詞典)、明月拼音擴充詞庫(詩詞)、明月拼音擴充詞庫(含西文的詞彙)。如果不需要加載某个詞庫請將其用「#」註釋掉。
#雙拼不支持 luna_pinyin.cn_en 詞庫,請用戶手動禁用。

import_tables:
  - luna_pinyin
  # 加入搜狗词库
  - luna_pinyin.sougou
  - luna_pinyin.poetry
  - luna_pinyin.cn_en
  - luna_pinyin.kaomoji

九、定制特殊单词

由于长期撸码,24 小时离不开命令行,偶尔在中文输入法下输入了一些命令导致汉字直接出现在 terminal 上就很尴尬…这时候我们可以在 luna_pinyin.cn_en.dict.yaml 加入一些我们自己的专属词库,比如这样

---
name: luna_pinyin.cn_en
version: "2017.9.13"
sort: by_weight
use_preset_vocabulary: true
...

git	git
ls	ls
cd	cd
pwd	pwd
git ps	gitps
kubernetes	kubernetes
kubernetes	kuber
kubectl	kubectl
kubectl	kubec
docker	docker
docker	dock
ipvs	ipvs
ps	ps
bash	bash
source	source
source	sou
rm	rm

配置后如果我在中文输入法下输入 git 则会自动匹配 git 这个单词,避免错误的键入中文字符;需要注意的是第一列代表上屏的字符,第二列代表输入的单词,即 “当输入第二列时候选词为第一列”;两列之间要用 tag 制表符隔开,记住不是空格

转载请注明出处,本文采用 CC4.0 协议授权