「鼠鬚管」的调教笔记

144
作者 scomper
2015.06.14 13:46 字数 4236

最开始只是想调整一下鼠须管的界面风格,让它变得小清新一点,结果周末的时间就都掉到鼠须管配置的这个「坑」里,改完了界面接着想解决候选词乱码的问题,然后是模糊拼音扩充词库、表情输入、符号输入、特殊符号直接上屏等需求接踵而来。

鼠须管官网的介绍其实已经很全面了,还提供了很多参照代码。但是设置的过程毕竟不是友好的图形界面,需要打开「用户设定」目录下的具体文件修改代码部分,所以过程并不顺畅,即便是简单的复制和粘贴,也要考虑语法缩进的问题。在没有更好的图形化配置界面出来以前,注定鼠须管是一个有一定学习成本的输入法,而要让它更好用只能学习并调教它。


图1

基本的调教并没有想象中的那么复杂,看完官网的帮助后就可以动手试试。由鼠须管的图标中选择「用户设定」(~/Library/Rime/)定位到具体文件,修改完成再执行一次「重新部署」就能看到修改后的效果。


图2

方案特点:支持 /dn 方式的符号输出;常见拼写的容错处理;输入字母 v 开头的短语输出颜文字;词义关联模式的表情符号;#、`、符号直接上屏;单引号输出「」;- +以及<> 键翻页;上下箭头选择其他候选; 包含常用汉语、诗词和英文的词典。

如果你平时用的就是「明月拼音·简化字」,可以跳过后续具体配置的介绍直接到文章最后下载附件,解压缩并将其中的文件放到「用户设定」目录「重新部署」即可。

配置文件和基本思路

鼠须管的「用户设定」文件夹里包含很多文件,根据自己的输入要求定制的时候实际上涉及的文件只有固定的几个,一些是调整输入法外观和参数的,还有一大部份是扩展词库的文件。


图3

配置输入法的的外观和特性的几个文件:

  • squirrel.custom.yaml ,自定义皮肤;
  • default.custom.yaml ,设定备选词数量,定义输入方案;
  • luna_pinyin_simp.custom.yaml ,定义扩充词库、加载符号库、模糊拼音。明月拼音·简化字的输入方案配置文件,明月拼音对应的文件就是 luna_pinyin.custom.yaml;
  • installation.yaml,定义配置文件保存到 Dropbox 文件夹

以上几个以 .custom.yaml 作为后缀的文件,意味着是以补丁的方式来实现个性化定制的,输入法后续升级不会覆盖这些文件。所以自定义的文件配置中起始部分都会有patch:的字段,每个配置文件中有且只需要一行这个代码段。

扩展词库涉及到的几个配置文件,参照扩展词库的内容,你可以自己定义类似的词库:

  • luna_pinyin.extended.dict.yaml,扩展词库主文件,其他词库都需要在这个主文件中定义才能被调用,如果不想加载某个词库在此文件中注释掉即可(在所在行前加 # 井号)
  • luna_pinyin.cn_en.dict.yaml,英文、中英文混合短语和名词
  • luna_pinyin.computer.dict.yaml,计算机术语
  • luna_pinyin.emoji.dict.yaml,表情符号
  • luna_pinyin.hanyu.dict.yaml,汉语大词典
  • luna_pinyin.kaomoji.dict.yaml,颜文字表情符号
  • luna_pinyin.movie.dict.yaml,电影名称
  • luna_pinyin.music.dict.yaml,音乐和歌曲名
  • luna_pinyin.name.dict.yaml,人名
  • luna_pinyin.poetry.dict.yaml,唐诗宋词、千家集、楚辞、诗经

词库文件是相对单独的,鼠须管中挂载词库的方式比以前更灵活,而且编辑起来也很方便,在luna_pinyin.extended.dict.yaml 这个词库主文件中定义和关联其他词库,而扩展词库的加载则是由 luna_pinyin_simp.custom.yaml 这个文件来决定。

扩展词库文件被修改后需要「重新部署」才能生效。

鼠须管的配置中,重要的是主要外观和特性文件的设置,第一步是修改default.custom.yaml 确定你的输入方案,也就是按「control+` 」时出现的可供选择的明月拼音、明月拼音·简化字、五笔等;第二步是修改输入法的外观 squirrel.custom.yaml;第三步就是修改你的输入方案的配置文件,例如:明月拼音·简化字,那么只需要修改 luna_pinyin_simp.custom.yaml ,输入方案的配置文件像是一个接口文件,模糊拼音、加载扩充词库、定义一些特殊符号的直接上屏、定义个性化的翻页按键等都在这个文件里。

安装完鼠须管后,用户文件夹里可能看不到上述提到的这些文件,简单的办法就是复制一个同样后缀的文件然后对照修改。下载的词库或配置文件中也可能直接包含这样的文件,如果从不同来源下载的文件中包含同样命名的文件,最好对照一下内容,不要盲目覆盖导致配置丢失。

luna_pinyin.extended.dict.yaml

词库部署的过程就是下载扩充词库(登录页面后点击右下角的「Download ZIP」),下载完成后解压缩并将 luna_pinyin.dict 中的文件复制到你的「用户设定」目录。假如你和我一样是使用「明月拼音·简化字」,就不用复制文件夹中的double_pinyin.custom.yaml这个文件。复制完成后重命名luna_pinyin.custom.yaml为luna_pinyin_simp.custom.yaml。如果这个文件已经存在,那么需要将下载文件luna_pinyin.custom.yaml中的内容合并到已有luna_pinyin_simp.custom.yaml文件当中。

英文常用词库(luna_pinyin.cn_en.dict.yaml)里自己尝试添加了一个 osx ☞ OS X,第一次失败是因为间隔之间没有用 tab 键,而是用空格,第二次失败是因为音节之间没有正确空格,正确的规则是「文字-编码-权重频度」三个字段之间是 tab,编码如果是多个「音节」音节之间用空格分开,权重数值的高低决定了音节相同时多个候选词在候选条上排列的先后顺序,当然全局性的词频拥有更高的优先级(候选条上高亮选中,然后 shift+fn+delete 可以删除记忆错误的词频调整)。


图4

编辑字典文件时,TextWrangler 编辑器可以「View-Text Display-Show Invisibles」将隐藏符号显示出来以便查错和参照。TextWrangler 「Edit - Text Options」设置里去掉「Auto-expend tabs」的勾选,输出的就是tab而不是4个空格。

表情符号的问题,有几种解决方案,一种是把表情作为输入方案的一种选择,需要的时候像切换繁体和简体一样切换到表情输入;另一种是将表情加入到拼音方案中,但是这种方式每次都出来一堆表情,而且没法实现词频的调整,所以最后选择的是将表情作为字典来使用的方案,基于网友 @ lembacon 的表情文件制作了一份字典文件(luna_pinyin.emoji.dict.yaml,已包含在文章后的下载中),需要注意的是新的表情字典,需要在扩展字典的主文件(luna_pinyin.extended.dict.yaml)中添加一段代码:- luna_pinyin.emoji

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

default.custom.yaml

全局性的这个文件里,主要是定义输入方案和候选词的数量,输入方案上我选择了:明月拼音·简化字、明月拼音、明月拼音·语句流、五笔拼音混合輸入,候选词数量设置的是7个(page_size: 7)。

patch:
  switcher:
    caption: 〔方案选单〕
    hotkeys:
    - Control+grave

  menu:
    page_size: 7
  schema_list:
  - schema: luna_pinyin_simp
  - schema: luna_pinyin
  - schema: luna_pinyin_fluency  # 语句流
  - schema: wubi_pinyin          # 五笔拼音混合輸入

squirrel.custom.yaml

输入法外观的设定是在梁海方案的基础上修改的,并参照了 10.11 El Capitan 输入法的配色和字体。候选词条中如果出现生僻字无法显示(显示为框问号),可以在方案配色的字体指向上多加一个「 花园明朝」字体。

patch:
  show_notifications_when: appropriate  # 状态通知,适当(appropriate),开(always)关(never)

  style:
    color_scheme: apathy
  preset_color_schemes:
    apathy: 
      name: "冷漠 / Apathy"
      author: "LIANG Hai "
      horizontal: true  # 水平排列
      inline_preedit: true #单行显示,false双行显示
      candidate_format: "%c\u2005%@\u2005"  # 编号 %c 和候选词 %@ 前后的空间
      corner_radius: 5  #候选条圆角
      border_height: 0 
      border_width: 0
      back_color: 0xFFFFFF  #候选条背景色
      font_face: "PingFangSC-Regular,H-SiuNiu"  #候选词字体
      font_point: 16  #候选字词大小
      text_color: 0x424242  #高亮选中词颜色
      label_font_face: "PingFangSC-Light"   #候选词编号字体
      label_font_point: 12   #候选编号大小
      hilited_candidate_text_color: 0xEE6E00  #候选文字颜色
      hilited_candidate_back_color: 0xFFF0E4  #候选文字背景色
      comment_text_color: 0x999999  #拼音等提示文字颜色

外观设置中指向了 El Capitan 最新的字体「苹方」和「 花园明朝」,后者需要单独下载安装。

luna_pinyin_simp.custom.yaml

部署过扩充词库后,我们可以继续修改 luna_pinyin_simp.custom.yaml 这个文件来定义符号的快速输入和模糊拼音的部分。

符号的快速输入(例如:输入/dn,显示电脑常用符号)在明月拼音和明月拼音·语句流里都已经包含,要将其移植到简化字方案中,需要在 luna_pinyin_simp.custom.yaml 方案中补充 punctuator:recognizer:两个部分的内容。在加入这个部分代码的时候因为缩进的问题出现了第一次问题,因为直接从明月拼音中复制过来的代码加入到自定义的方案中时需要重新调整缩进。

为了方便在Ulysses这样的Markdown语法中快速输入#符号,紧接着在 luna_pinyin_simp.custom.yaml中增加了直接上屏的定义,添加这个部分代码时又一次犯错,重复写入了包含 punctuator的部分,琢磨清楚以后才搞定#一类符号的直接上屏。

patch:     
 # 載入朙月拼音擴充詞庫
  "translator/dictionary": luna_pinyin.extended
  "speller/algebra/@before 0": xform/^([b-df-hj-np-tv-z])$/$1_/

 #  符号快速上屏
  punctuator:
    import_preset: symbols
    half_shape:
      "#": "#"
      "`": "`"
      "~": "~"
      "@": "@"
      "=": "="
      "/": ["/", "÷"]
      '\': ["、", '\']
      "'": {pair: ["「", "」"]}
      "[": ["【", "["]
      "]": ["】", "]"]
      "$": ["¥", "$", "€", "£", "¢", "¤"]
      "<": ["《", "〈", "«", "<"]
      ">": ["》", "〉", "»", ">"]
  recognizer:
    patterns:
      email: "^[A-Za-z][-_.0-9A-Za-z]*@.*$"
      uppercase: "[A-Z][-_+.'0-9A-Za-z]*$"
      url: "^(www[.]|https?:|ftp[.:]|mailto:|file:).*$|^[a-z]+[.].+$"
      punct: "^/([a-z]+|[0-9]0?)$"

过滤生僻字,在 luna_pinyin_simp.custom.yaml中增加以下代码后候选中将不再显示生僻字。「control+`」中选择「通用-增广」来切换,可以输入 ha 来查看效果。虽然实际处理生僻字的代码只是cjk_minifierenable_charset_filter: true这两行,但是在添加代码时需要完整的添加如下部分才行。

  switches:
    - name: ascii_mode
      reset: 0
      states: ["中文", "西文"]
    - name: full_shape
      states: ["半角", "全角"]
    - name: extended_charset  #生僻字开关
      states: ["通用", "增廣"]
    - name: zh_simp
      reset: 1
      states: ["漢字", "汉字"]
    - name: ascii_punct
      states: ["。,", ".,"]

 simplifier:
    option_name: zh_simp

  engine:
    processors:
      - ascii_composer
      - recognizer
      - key_binder
      - speller
      - punctuator
      - selector
      - navigator
      - express_editor
    segmentors:
      - ascii_segmentor
      - matcher
      - abc_segmentor
      - punct_segmentor
      - fallback_segmentor
    translators:
      - punct_translator
      - table_translator@custom_phrase
      - reverse_lookup_translator
      - script_translator
    filters:
      - simplifier
      - uniquifier
      - cjk_minifier  #過濾拼音輸入法中的罕用字
  translator:
    enable_charset_filter: true #启用罕见字過濾

模糊音的部分也是添加到 luna_pinyin_simp.custom.yaml 文件中,从官网复制过来的方案中包含很多模糊音的设置,去掉前面的#就可以生效,不过我只选择了容错拼写的部分。

 # 模糊拼音
  'speller/algebra':
    - erase/^xx$/                      # 第一行保留

    # 模糊音定義先於簡拼定義,方可令簡拼支持以上模糊音
    - 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

英文单词词典
英文单词词典的添加方式和上面提到的词库的方式略有不同,会在 luna_pinyin_simp.custom.yaml 文件中添加如下代码(下图所示),另外英文单词词典配套还需要两个文件easy_en.dict.yaml 和 easy_en.schema.yaml。

 # 加載 easy_en 依賴
  "schema/dependencies/@next": easy_en
  # 載入翻譯英文的碼表翻譯器,取名爲 english
  "engine/translators/@next": table_translator@english
  # english 翻譯器的設定項
  english:
    dictionary: easy_en
    spelling_hints: 9
    enable_completion: true
    enable_sentence: false
    initial_quality: -3

 # 載入朙月拼音擴充詞庫
  "translator/dictionary": luna_pinyin.extended
  # 改寫拼寫運算,使得含西文的詞彙(位於 luna_pinyin.cn_en.dict.yaml 中)不影響簡拼功能(注意,此功能只適用於朙月拼音系列方案,不適用於各類雙拼方案)
  # 本條補靪只在「小狼毫 0.9.30」、「鼠鬚管 0.9.25 」、「Rime-1.2」及更高的版本中起作用。
  "speller/algebra/@before 0": xform/^([b-df-hj-np-tv-z])$/$1_/

单词词典能在输入英文单词时进行候选提示,如果平时没有这种输入的需求只需要在 luna_pinyin_simp.custom.yaml 文件中将英文单词的部分注释掉并删除easy_en.dict.yaml 和 easy_en.schema.yaml以及对应生成的.bin词库文件。


  • 从部署和调教顺序上来说,最好先扩充词库,然后在luna_pinyin_simp.custom.yaml文件中再添加符号定义、模糊拼音设定等内容。

  • 在鼠须管中「 /」这类符号输入后会有很多个选项,如果要快速输入它该怎么办呢,「/ + enter」只需要输入完后直接回车即可。

  • 其他辅助调整还有将配置文件保存到Dropbox,在 installation.yaml 文件中添加一行 sync_dir: '/Users/scomper/Dropbox/RimeSync',指向到自己的 Dropbox 文件夹。

  • 类似于/dn 这样快速输入的符号,可以用文本编辑器(如:TextWrangler)打开「用户设定」文件夹里的 symbols.yaml 文件查看,同理,查看字典文件luna_pinyin.emoji.dict.yaml 和luna_pinyin.kaomoji.dict.yaml可以了解对应短语的设定情况,感兴趣的可以按照格式自行扩充和编辑。

  • 单个汉字匹配的表情默认在词频上很靠后(不知道是什么原因导致的),需要翻几页选择一次后词频才会调整到前面。

※ 文中提到的配置文件和扩充词典文件的squirrel-patch.zip Dropbox网盘下载
花园明朝字体下载:花园明朝·百度网盘

Mac 商务应用指南