Rime Squirrel 鼠须管输入法配置详解

好用的开源输入法:朙月拼音、小鹤双拼、自然码双拼

发布日期:2022-01-06

如果你是一位注重个人隐私,又排斥原生输入法,那么鼠须管应该是你要找的那个,或许还能激发你重新拾回多年前的博客。

特点

  • 朙月拼音、小鹤双拼、自然码双拼
  • 词库不丢失,支持多平台同步
  • 百万搜狗词库(带词频)、七万日常聊天词库
  • Emoji 与 Mac 同步
  • 动态输入时间、日期、星期
  • 速度快、开源、不联网保护隐私、自定义

配置仓库地址:点击这里,Rime 电报群:@RIMEIM

安装

下载 鼠须管,安装后切换到 Rime 输入法,开始使用。
默认繁体输出,通过组合键 Control+`F4 键切换输入方案,例如选择【朙月拼音·简化字】简体输出。

注:建议 Mac 打开 Squirrel 通知,之后部署会提示是否成功。

备份初始配置(可选)

防止操作不当配置无法恢复,可以为初始配置做个备份。在【终端】中输入以下命令,按回车键,会出现一个【Rime.bak】文件夹即备份。

1
cp -r ~/Library/Rime ~/Library/Rime.bak

还原:初始配置【Rime】文件夹清空,将【Rime.bak】内的文件复制粘贴过去,点击菜单栏【ㄓ】-【重新部署】。

定制

  1. 下载 配置 解压得到【配置文件】和【花园明朝字体】,将字体安装到字体册,原因是 Mac 缺少部分生僻字。
  2. 点击菜单栏【ㄓ】-【用户设定】,将【配置文件】里所有文件粘贴进去,并选择覆盖。
  3. 点击菜单栏【ㄓ】-【重新部署】(快捷键 Control+Option+`),至此完成定制配置,可以愉快的使用了。

全局设置

全局设置文件 default.custom.yaml,包含输入方案、候选词个数、中英文切换、快捷键。

注:建议用 VSCode 软件打开文件,因分隔符问题还需要 修改 Tab 键

输入方案

Control+` 显示输入方案。如果你不用双拼或大写数字,可以将其连同配置里的文件一并删除;同理,你也可以添加其他方案,例如:五笔、地球拼音、袖珍拼音

注:输入方案都是以 .schema.yaml 命名,例如 luna_pinyin_simp.schema.yaml,可以修改该文件进行定制,但是输入法一旦更新,这个文件也会跟着更新,定制就会丢失。
解决办法是新建文件 luna_pinyin_simp.custom.yaml,然后在里面定制,所有方案对应的补丁名都是 <方案名>.custom.yaml

1
2
3
4
5
schema_list:
  - schema: luna_pinyin_simp      # 朙月拼音
  - schema: double_pinyin_flypy   # 小鹤双拼
  - schema: double_pinyin         # 自然码双拼
  - schema: numbers               # 大写数字

候选词个数

修改后面的数字更改候选词个数。

1
menu/page_size: 9

中英文切换

下面代码表示使用 Caps 键切换大小写,使用 Shift 键切换中英文。

1
2
3
4
5
6
7
ascii_composer/good_old_caps_lock: true # 若为 true, Caps 只切换大小写
ascii_composer/switch_key:
  Caps_Lock: commit_code                # Caps 键
  Shift_L: commit_code                  # 左 Shift,切换中英文
  Shift_R: commit_code                  # 右 Shift,切换中英文
  Control_L: noop                       # 左 Control,屏蔽该切换键
  Control_R: noop                       # 右 Control,屏蔽该切换键

注:如果 Caps 键不能切换大小写,打开 Mac 系统偏好设置 > 键盘 > 输入法 > 取消【使用大写锁定键切换“美国”输入模式】。

其他切换策略:

  • inline_ascii:在输入法的临时英文编辑区内输入字母、数字、符号、空格等,回车上屏后自动复位到中文
  • commit_text:已输入的候选文字上屏并切换至英文输入模式

翻页快捷键

  • when:有几种状态 composinghas_menupaging
  • accept:控制接受的按键 minusequal,、periodcommabracketleftbracketright
  • send:控制动作 Page_UpPage_DownEscape(清空输入码)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 翻页
- { when: has_menu, accept: Tab, send: Page_Down }            # "tab" 键翻页, 和下一条 "tab" 键分词只能二选一
- { when: composing, accept: Shift+Tab, send: Shift+Left }    # "Shift+Tab" 键向左选拼音分词
- { when: paging, accept: minus, send: Page_Up }              # "-" 上一页
- { when: has_menu, accept: equal, send: Page_Down }          # "=" 下一页
- { when: paging, accept: comma, send: Page_Up }              # "," 上一页
- { when: has_menu, accept: period, send: Page_Down }         # "." 下一页
- { when: paging, accept: bracketleft, send: Page_Up }        # "[" 上一页
- { when: has_menu, accept: bracketright, send: Page_Down }   # "]" 下一页

# 快捷键
- { when: has_menu, accept: semicolon, send: 2 }              # ":" (分号)选择第 2 个候选词
- { when: has_menu, accept: apostrophe, send: 3 }             # "'" (引号)选择第 3 个候选词
- { when: composing, accept: Shift+Tab, send: Shift+Left }    # "Shift+Tab" 键向左选拼音分词
- { when: composing, accept: Control+a, send: Home }          # "Control+a" 光标移至首
- { when: composing, accept: Control+e, send: End }           # "Control+e" 光标移至尾
- { when: composing, accept: Control+g, send: Escape }        # "Control+g" 清码
- { when: composing, accept: Return, send: Escape }           # "Return" 回车清码
- { when: always, accept: Control+Shift+1, select: .next }             # 切换输入方案
- { when: always, accept: Control+Shift+2, toggle: ascii_mode }        # 中/英文切换
- { when: always, accept: Control+Shift+3, toggle: full_shape }        # 全角/半角切换
- { when: always, accept: Control+Shift+4, toggle: simplification }    # 繁简体切换
- { when: always, accept: Control+Shift+5, toggle: extended_charset }  # 通用/增广切换(显示生僻字)
- { when: composing, accept: Control+b, send: Left }           # "Control+b" 移动光标
- { when: composing, accept: Control+f, send: Right }          # "Control+f" 向右选择候选词
- { when: composing, accept: Control+h, send: BackSpace }      # "Control+h" 删除输入码

词库格式

新建文件命名格式为 <词库名>.dict.yaml

示例:朙月拼音 AV 女优词库 luna_pinyin.av.dict.yaml

1
2
3
4
5
6
7
8
9
# 日本 AV 女优

name: luna_pinyin.av  # 要和文件名一致
version: "2021.12.21"
sort: by_weight
use_preset_vocabulary: false
...
                              # 此处空一行
三上悠亞  san shang you ya  1  # 汉字和编码用 Tab 键间隔,拼音之间用空格键

词库外挂

打开 luna_pinyin.extended.dict.yaml,将词库名添加。

示例:AV 女优词库 luna_pinyin.av.dict.yaml 即输入 luna_pinyin.av

1
2
3
4
5
import_tables:
  - luna_pinyin
  - luna_pinyin.av
  - luna_pinyin.chat
  - luna_pinyin.sogou

词库载入

打开 luna_pinyin_simp.custom.yaml,载入中英文词库,还可以修改英文候选词位置、Emoji 显示注释等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
patch:
  # 启用罕见字過濾
  engine/filters:
    - simplifier
    - simplifier@emoji_conversion
    - uniquifier
    - charset_filter@gbk # (※3) GBK 过滤
    - single_char_filter

  emoji_conversion:
    opencc_config: emoji.json
    option_name: show_emoji
    tags: abc
    #tips: all    # Emoji 显示注释

  # 改写拼写运算,含英文的词汇(luna_pinyin.cn_en.dict.yaml)不影响简拼
  "speller/algebra/@before 0": xform/^([b-df-hj-np-tv-z])$/$1_/

  # 载入朙月拼音扩充词库
  "translator/dictionary": luna_pinyin.extended

  # 加载easy_en依赖
  "schema/dependencies/@1": easy_en
  # 载入翻译英文的码表翻译器,取名为 english
  "engine/translators/@4": table_translator@english
  # english翻译器的设定项
  english:
    dictionary: easy_en
    spelling_hints: 9
    enable_completion: false # 是否启用英文输入联想补全
    enable_sentence: false # 混输时不出现带有图案的英文
    initial_quality: -0.5 # 英文候选词的位置, 数值越大越靠前。

模式转换

打开 luna_pinyin_simp.custom.yaml,switches 列了:中文西文、全角半角、Emoji、简繁体、字节编码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
patch:
  switches:
    - name: ascii_mode                   # 0 中文,1 英文
      reset: 0
      states: ["中文", "西文"]
    - name: full_shape                   # 全角/半角符号开关
      states: ["半角", "全角"]
    - name: show_emoji                   # Emoji 开关
      reset: 1
      states: [ "🈚️️\uFE0E", "🈶️️\uFE0F" ]
    - name: zh_simp                      # (※1) 繁简转换
      reset: 1
      states: ["漢字", "汉字"]
    - options: ["utf8", "gbk", "gb2312"] # (※2)字符集选单
      reset: 0                           # 默认 UTF8
      states:
        - UTF-8
        - GBK
        - GB2312

搜狗词库转换

转换方法:点击这里。本配置里的搜狗词库包含官网 12 个分类(城市、工程、农业、人文、社会、生活、艺术、医学、游戏、娱乐、运动、自然),满足绝大部份用户使用。

Emoji

打开 opencc 文件夹内 emoji_word.txt,规则:字符用 Tab 键间隔,其他用空格键,简体和繁体都要加入。

1
2
开心  开心 😄 😃 😺
開心  開心 😄 😃 😺

Control + ` 组合键,可以选择开启或关闭 Emoji。

快捷符号

以朙月拼音为例,打开 luna_pinyin_simp.custom.yaml,自行添加修改。

注:打开【用户设定】-【build 文件夹】- luna_pinyin_simp.schema.yaml 里有超多快捷符号,将需要修改的快捷符号添加到下面区域。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
"/fs": [½, ‰, ¼, ⅓, ⅔, ¾, ⅒ ]
"/xh": [ *, ×, ✱, ★, ☆, ✩, ✧, ❋, ❊, ❉, ❈, ❅, ✿, ✲]
"/dq": [🌍,🌎,🌏,🌐,🌑,🌒,🌓,🌔,🌕,🌖,🌗,🌘]
"/sg": [🍇,🍉,🍌,🍍,🍎,🍏,🍑,🍒,🍓,🍗,🍦,🎂,🍺,🍻]
"/dw": [🙈,🐵,🐈,🐷,🐨,🐼,🐾,🐔,🐬,🐠,🦋]
"/bq": [😀,😁,😂,😃,😄,😅,😆,😉,😊,😋,😎,😍,😘,😗]
"/ss": [💪,👈,👉,👆,👇,✋,👌,👍,👎,✊,👊,👋,👏,👐]
"#": "#"
"*": "*"
"`": "`"
"~": "~"
"@": "@"
"=": "="
'\': "、"
"%": "%"
"$": ["¥", "$"]
"|": ["|", "|", "·"]
"/": ["/", "÷"]
"'": { pair: ["「", "」"] }  #表示一对
"[": "【"
"]": "】"
"<": "《"
">": "》"

模糊音纠错

打开 luna_pinyin_simp.custom.yaml,若关闭前面加 #

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 需要哪組就刪去行首的 # 號,單雙向任選
- 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

# 超级简拼
- abbrev/^([a-z]).+$/$1/           # 簡拼(首字母)
- abbrev/^([zcs]h).+$/$1/          # 簡拼(zh, ch, sh)

# 智能纠错
- 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

动态时间日期

打开 Rime.lua,默认编码如下,双拼用户时间和星期无效,建议改为不冲突编码,例如时间 sj 改为 time

  • 【日期】rq = 2022-01-142022年01月14日01-142022/01/14
  • 【时间】sj = 03:1103:11:00
  • 【星期】xq = 周五星期五礼拜五
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function date_translator(input, seg)
    if (input == "rq") then
       Candidate(type, start, end, text, comment)
        yield(Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), ""))
        yield(Candidate("date", seg.start, seg._end, os.date("%Y年%m月%d日"), ""))
        yield(Candidate("date", seg.start, seg._end, os.date("%m-%d"), ""))
        yield(Candidate("date", seg.start, seg._end, os.date("%Y/%m/%d"), ""))
    end
    if (input == "sj") then
       Candidate(type, start, end, text, comment)
        yield(Candidate("time", seg.start, seg._end, os.date("%H:%M"), ""))
        yield(Candidate("time", seg.start, seg._end, os.date("%H:%M:%S"), ""))
    end
    if (input == "xq") then
        local weakTab = {'日', '一', '二', '三', '四', '五', '六'}
        yield(Candidate("week", seg.start, seg._end, "周"..weakTab[tonumber(os.date("%w")+1)], ""))
        yield(Candidate("week", seg.start, seg._end, "星期"..weakTab[tonumber(os.date("%w")+1)], ""))
        yield(Candidate("week", seg.start, seg._end, "礼拜"..weakTab[tonumber(os.date("%w")+1)], ""))
    end
end

再将下面代码添加在对应的输入方案,例如:朙月拼音添加在 luna_pinyin_simp.custom.yaml

1
"engine/translators/@6": lua_translator@date_translator

自定义短语

用文本编辑打开 custom_phrase.txt,规则:内容+编码+权重(可选),使用 Tab 键间隔。

示例:

1
2
3
4
Rime  rime	4
鼠须管	rime	3
https://rime.im/	rime	2
Squirrel	rime	1

皮肤

打开 squirrel.custom.yaml,将皮肤主题代码添加进去,皮肤效果点击这里

  • 【浅色】style/color_scheme: 皮肤主题名称
  • 【深色】style/color_scheme_dark: 皮肤主题名称

本配置默认开启跟随 macOS 主题自动切换深浅色皮肤,如果您想浅色模式使用深色皮肤,可以将 style/color_scheme_dark: 里删除 _dark,并只开启一个浅色皮肤,重新部署;如果是深色模式使用浅色皮肤,操作相反。

修改颜色

  • 每 8bit 一组,从低位到高位分别代表 Red、Green、Blue、Alpha,共 32bit。
  • Alpha 值(如果界面支持)是可选的,默认为 0xF F 即不透明。
  • 把颜色值写为十六进制数,即 0xAABBGGRR0xBBGGRR

特定程序中英文

打开 squirrel.custom.yaml,将程序标识符添加进去,并输入对应模式开启默认中英文。

  • ascii_mode: true:默认英文
  • ascii_mode: false:默认中文
  • ascii_punct: true:开启英文标点

示例:VSCode 默认英文输入,始终输出英文标点(半角)。

1
2
3
com.microsoft.VSCode:
    ascii_mode: true
    scii_punct: true

延伸:如何获取程序标识符?

  1. 打开 Mac 活动监视器,选中程序,点击上方 ···取样进程
  2. 找到 Identifier 后面即为程序标识符。

大写数字

配置文件是 numbers.schema.yaml。切换输入方案选择大写数字,使用方法参照下表。

按键 输出 ✂️ 按键(按住Shift) 输出
1234567890 壹贰叁肆伍陆柒捌玖零 ✂️ 1234567890 一二三四五六七八九〇
wqbsjfd. 万仟佰拾角分第点 ✂️ wqbsjfd. 万千百十角分第点
z 整之 ✂️ z 整之
y 元月亿 ✂️ y 元月亿

删除错词

将光标( )移到要删除的词组上,按 Shift+Fn+Delete 键(第三方键盘按 Control+Delete)。只能从用户词典中删除词组,词库里词组只会取消其调频顺序。

同步

同步至 iCloud

  1. 打开配置文件 installation.yaml,将 id 改为Mac(支持自定义)。
  2. 复制下面路径代码粘贴进来,代码中 admin 替换为你的电脑用户名。

    1
    
     sync_dir: "/Users/admin/Library/Mobile Documents/com~apple~CloudDocs/RimeSync"
    
  3. 点击菜单栏【ㄓ】-【同步用户数据】,打开访达 iCloud 即可查看有个叫 RimeSync 文件夹即为同步文件。

示例:

更多同步方案:点击这里

iCloud 词库同步至新配置

  1. 打开配置文件 installation.yaml,将 id 和路径修改为 iCloud 同步文件 installation.yaml 里的一至。
  2. 点击菜单栏【ㄓ】-【同步用户数据】,此时你之前的个人词库已经同步到新配置里。

报错日志

打开终端输入 $TMPDIR/rime.Squirrel.INFO 按回车键,复制路径地址在访达中打开。

找到【rime.squirrel.INFO】文件,右击点选显示原身得到日志文件。

关于词频

配置里搜狗词库已经附带词频,可以满足绝大部分用户需求,初次使用极少部分词频不完全在首位,稍微用几日即可。