打造个人的输入方案——小狼毫输入法

发布于 2021-07-16  746 次阅读


写在前面

首先需要说明的是:小狼毫(rime)输入法并不是一个好用的输入法。具体体现在:

  • 没有引导,交互性差
  • 没有图形界面,自定义全靠编写代码
  • 配置繁琐,容易出错
  • 词库需要自己导入、更新
  • 阅读教程需要较长时间
  • 出现问题不容易查找、解决

但与此同时,它有了无与伦比的可自定义性,几乎可以满足任何你对输入细节的要求。

还有很重要的一点是,它没有广告(相信你已经受够了搜狗的弹窗)

以下是输入法展示:

安装

RIME | 中州韻輸入法引擎下载安装包,跟着引导安装程序

需要注意两点:

  1. 安装路径不能出现中文字符
  2. 建议用户资料文件夹 自己指定位置(确实还蛮大的)

基本使用

输入模式设置

Ctrl+grave(Tab上面那个键) 进行方案选择

选择『朙月拼音』(如果你用全拼的话) 第二项显示的是你当前的输入模式

说明:朙月拼音、朙月拼音简化字、朙月拼音语句流是完全不同的方案

按提示进行选择即可 比如按4实现繁简转换

输入方案选择

右击托盘图标(左边那个) 打开菜单 选择『输入法设定』

选择需要的输入方案 点击『中』

选择喜欢的皮肤 点击『中』

注意:使用此方法设置输入方案时,default.custcom.yaml、weasel.custcom.yaml文件会被程序格式化(添加基本信息,去除注释行,调整代码顺序等)

至此,rime输入法已经基本可用了

下面以朙月拼音方案为例 开始自定义内容的介绍

配置文件

rime输入法的配置文件分为两处(就是安装时 你指定的两处位置):程序文件夹、用户文件夹

右击托盘图标 可以选择 打开『程序文件夹』和『用户文件夹』

注意:在程序文件夹中的所有文件都不要动,虽然改动这里的文件也能达到自定义的效果,但每次更新都会被重置为默认设置。


我们采用“打补丁”的方式对程序文件夹中的文件进行修改,即在用户文件夹中创建 同名的custom文件。比如要对default.yaml文件修改,就创建default.custom.yaml。

一般来说,我们需要创建的文件就三个

  1. default.custom.yaml 全局方案补丁,即定制内容对所有的输入方案都有效
  2. luna_pinyin.custom.yaml 朙月拼音 输入方案补丁,定制内容只对该方案有效,如果要修改其他方案,创建“方案名.custom.yaml”文件即可
  3. weasel.custom.yaml 皮肤文件补丁,分为样式和颜色两部分,对所有输入方案有效

说明:

  • 所有创建的文件 文件编码必须UTF-8 文件格式必须yaml格式(对缩进的要求很高)
  • yaml文件实际上是文本文件,可以使用记事本编辑
  • 怕创建出错的话 可以把程序文件夹下的文件复制过来 然后改名 清空

其他配置文件:

  • 方案名.schema.yaml 输入方案,直接覆盖程序文件夹下的该方案
  • symbols.yaml 符号方案,对引入该文件的输入方案有效,用来定义按键输出的字符。因为是引用生效,所以自己的符号方案可以随意命名
  • installation.yaml 定义用户资料同步的位置
  • 词典名.dict.yaml 固定词典文件,对引入该文件的输入方案有效,用来定义能打出的词汇
  • Custom_phrase.txt 用户词典文件,对所有输入方案有效,用来添加用户想添加的词汇
  • rime.lua 函数文件,对引入该函数的输入方案有效

定制方案

注意事项

说明:

  • 所有配置修改后要生效 必须重新部署(右击托盘图标)
  • 如果部署后的效果与你的期望相差甚远 请去%TEMP%目录下查看是否有ERROR日志
  • 日志名大致为 rime.weasel.计算机名.用户名.log.ERROR.时间
  • 详细的参数信息 请参考 Rime_collections (github.com)

格式强调:

  • 文件编码必须UTF-8 文件格式必须yaml格式(对缩进的要求很高)
  • 所有的缩进都是空格 同一层级缩进必须对齐
  • 一个文件只能有一个patch 冒号后面不换行都有空格

default.custom.yaml

default.custom.yaml 和 weasel.custom.yaml 的设置比较简单,直接上代码

patch:
  # 可选的输入方案列表
  schema_list:
    - {schema: luna_pinyin}
  # 候选栏显示的词语个数 
  "menu/page_size": 6
  # 切换/热键 ctrl+`(tab上面那个键)
  # 这里的切换指 输入方案及其设置的选择
  "switcher/hotkeys":
      -"Control+grave"
  # 处理英文模式及中英文切换
  # 大小写锁定键亮时 输出大写-true 输出小写-false
  ascii_composer/good_old_caps_lock: true
  ascii_composer/switch_key:
      # clear 清除已输入的字符
      # noop 什么也不做
      # commit_code 已输入的字符上屏
      # commit_text 已输入的字符对应的词语上屏
      # inline_ascii 输入法转变并可以继续输入

      # 大小写锁定键
      # 这个键位最好不要设置为noop(可以尝试)
      Caps_Lock: clear
      # 左shift
      Shift_L: inline_ascii
      Shift_R: inline_ascii
      Control_L: noop 
      Control_R: noop 

weasel.custom.yaml

设置app_options即可 皮肤可以直接使用现有方案

patch:
  # 默认以英文输入模式 进入应用
  # cmd.exe 默认开启
  app_options:
    LeagueClient.exe: {ascii_mode: true}
    Xshell.exe: {ascii_mode: true}
    sublime_text.exe: {ascii_mode: true}

下面是 样式与配色方案(皮肤) 的设置:

patch: 
  "style/color_scheme": Time_water # 应用的配色方案
  "style/font_face": "Microsoft YaHei" # 应用的字体
  "style/font_point": 13 # 字号大小
  "style/horizontal": true # 候选栏横排显示
  "style/inline_preedit": false # 隐藏打字栏
  "style/display_tray_icon": false # 不显示托盘图标
  "style/layout/spacing": 8 # 打字栏与候选栏的间距
  "style/layout/border_width": 2 # 边框宽度
  "style/layout/margin_x": 10 # 候选字左右边距
  "style/layout/margin_y": 10 # 候选字上下边距
  "style/layout/candidate_spacing": 10 # 候选字间隔
  "style/layout/hilite_spacing": 3 # 序号和候选字之间的间隔
  "style/layout/round_corner": 10 # 候选字背景色块圆角幅度
  "style/layout/hilite_padding": 4 # 候选字背景色色块高度和打字栏未选择字背景色块高度 若想候选字背景色块无边界填充候选框,仅需其高度和候选字上下边距一致即可

  # 配色方案名称(用于使用 建议英文)
  "preset_color_schemes/Time_water":
    name: 时光如水 # 名称 只用于阅读
    author: 7e2hj # 作者 只用于阅读
    text_color: 0x969483 # 打字栏除正在选择字外的字 字体颜色
    back_color: 0xf2f2f2 # 打字栏与候选栏 背景色
    border_color: 0xffccff # 边框颜色
    #label_color: 0xffffff  # 候选栏 序号颜色
    candidate_text_color: 0x000000 # 候选栏 未候选字颜色
    comment_text_color: 0xd28b26 # 候选栏 补充说明 字体颜色
    hilited_text_color: 0x394bdd # 打字栏 正在选择的字 字体颜色
    hilited_back_color: 0xf2f2f2 # 打字栏 正在选择的字 背景色
    hilited_candidate_text_color: 0xff2288 # 候选栏 候选字颜色
    hilited_candidate_back_color: 0xffccff # 候选栏 候选字背景色

颜色具体对应的位置 如图:

示例皮肤样式:

img

符号与特殊输入

标点符号可单独写入 symbols.yaml 文件 再导入 "punctuator/import_preset": 文件名

也可以直接加到 输入方案.custom.yaml 文件中 如下

#半角符号输入优化
  punctuator: # 标点符号
    import_preset: symbols # 导入symbols.yaml文件
    half_shape: # 半角符号 全角为 full_shape
    # 左边代表 中文输出状态下的各符号按键(即使它是英文的) 
    # 右边代表你期望输出的(区分中英文)
      "!": "!"
      "@": "@"
      "#": "#"
      "~": "~"
      "$": "¥"
      "%": "%"
      "^": "……"
      "&": "&"
      "*": "*"
      "(": "("
      ")": ")"
      "_": "——"
      "=": "="
      "[": "["
      "]": "]"
      "{": "{"
      "}": "}"
      '\': "、"
      '|': '|'
      ';': ';'
      ':': ':'
      "'": {pair: ["‘", "’"]} # pair为 交替输出
      '"': {pair: ["“", "”"]}
      "<": ["<", "《"]
      ">": [">", "》"]
      "/": ["/", "/", "、", "÷"]
      '?': '?'
      "`": "`" # 个人写makedown的习惯
      # "`": ["·", "`"]
    symbols: # 特殊符号(指带/的)
      '/zkh': [ (, 「, 【, 〔, 『, 〖 ]
      '/ykh': [ ), 」, 】, 〕, 』, 〗 ]
      '/yx': [ 353577830@qq.com, xxx@163.com ]
      '/wz': [ www.7e2hj.com, www.baidu.com, www.bilibili.com ]

键位绑定

键位绑定可以新建 key_bindings.custom.yaml 文件 再添加

也可以单独写文件 并导入 "key_binder/import_preset": 文件名

还可以直接加到 输入方案.custom.yaml 文件中 如下

# 修改键位 输入。 直接上屏
  "key_binder/bindings":
    - { when: has_menu, accept: period, send: period }
    # 格式
    - { when: xxx, accept: xxx, send: xxx }

说明:

  • 原本功能为 候选词翻页
  • when: has_menu 当有候选菜单时
  • accept: period 接收句号
  • send: period 输出句号
  • 详细参数见 章节开始的说明

词库导入与修改

rime词库分为 用户词库 和 固定词库

用户词库

用户词库即 Custom_phrase.txt

# Rime table
# coding: utf-8

#词语(tab/制表符)编码(tab/制表符)权重
的    d    100
了    l    100
啊    a    100
->    zjt    100
<-    yjt    100
·    dian    0

注意: 间隔一定不能用空格!

固定词库

固定词库即 词典名.dict.yaml

说明:

  • 本文不教如何制作、转化词库 只教最基本的在词库中添加词语
  • 想学制作词库 请看文末 官方文档 或 其他教程

固定词库的格式

  1. 词语 编码 权重 编码部分 不同音节用空格分割
  2. 词语 系统自动编码 词语中不能出现除中文外的任何字符
# 例一
四五來    si wu lai    20923
四五塊    si wu kuai    7009
七彩鎮    qi cai zhen    2562
便利化    bian li hua    8071
# 例二
佛耶戈
厄斐琉斯
莎弥拉

执行顺序

即使符号设置正确,你也依旧无法让 「 ` 」 直接上屏(在luna_pinyin中)

因为 有比 punctuator 更先执行的操作(先前绑定键位使直接上屏 就是利用了此原理)

正确设置的 ` 直接上屏:

punctuator:
    import_preset: symbols
    half_shape:
      "`": "`"

妨碍上屏的输入识别:

# 识别
recognizer:
  import_preset: default
  patterns:
    # 识别特殊符号/
    punct: '^/([0-9]0?|[A-Za-z]+)$'
    # 识别使用五笔
    # reverse_lookup: "`[a-z]*'?$"

真实的执行顺序:

# 参数含义见 章节开始的说明
engine:
  processors:
    - ascii_composer
    - recognizer # 输入识别
    - key_binder # 键位
    - speller
    - punctuator # 此为符号
    - selector
    - navigator
    - express_editor

emoji表情设置

具体来说 是使你的候选框中 出现emoji表情选项

在用户文件夹下 放入下载的opencc文件夹(具体见我的配置章节)

输入方案.custom.yaml 文件中添加如下语句

patch:
  # 添加emoji功能
  'engine/filters/@before 0':
    simplifier@emoji_suggestion
  emoji_suggestion:
    opencc_config: emoji.json
    option_name: emoji_suggestion
    tips: all 

函数设置

Rime输入法中,可以添加函数来实现某些功能

比如说 输出 2021-07-22 23:51:11 (日期 时间)

在用户文件夹下新建 rime.lua 添加如下语句

function date_translator(input, seg)
if (input == "date" or 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("time", seg.start, seg._end, os.date("%Y/%m/%d %H:%M:%S"), ""))
yield(Candidate("time", seg.start, seg._end, os.date("%Y%m%d_%H%M%S"), ""))
end
if (input == "time" or input == "sj") then
--- Candidate(type, start, end, text, comment)
yield(Candidate("time", seg.start, seg._end, os.date("%H:%M:%S"), ""))
yield(Candidate("time", seg.start, seg._end, os.date("%H:%M"), ""))
yield(Candidate("time", seg.start, seg._end, os.date("%Y/%m/%d %H:%M:%S"), ""))
yield(Candidate("time", seg.start, seg._end, os.date("%Y%m%d%H%M%S"), ""))
end
end

schema 文件的translators后 加入- lua_translator@date_translator 具体如下

  translators:
    - lua_translator@date_translator # @后面 和函数名一致

我的配置

我的配置中已经做好了 emoji表情 和 时间函数 的添加,并且附带@imy0823大佬整理的700w词库

下载地址如下:

链接:https://pan.baidu.com/s/1qxcaj1yHiTg02nDvY48vVw 提取码:epdn

附送 少数派XNOM制作的微软输入法皮肤

patch:
"style/display_tray_icon": true
"style/horizontal": true #横排显示
"style/font_face": "Microsoft YaHei" #字体
"style/font_point": 13 #字体大小
"style/inline_preedit": true # 嵌入式候选窗单行显示

"style/layout/border_width": 0
"style/layout/border": 0
"style/layout/margin_x": 12 #候选字左右边距
"style/layout/margin_y": 12 #候选字上下边距
"style/layout/hilite_padding": 12 #候选字背景色色块高度 若想候选字背景色块无边界填充候选框,仅需其高度和候选字上下边距一致即可
"style/layout/hilite_spacing": 3 # 序号和候选字之间的间隔
"style/layout/spacing": 10 #作用不明
"style/layout/candidate_spacing": 24 # 候选字间隔
"style/layout/round_corner": 0 #候选字背景色块圆角幅度

"style/color_scheme": Micosoft
"preset_color_schemes/Micosoft":
 name: "Micosoft"
 author: "XNOM"
 back_color: 0xffffff #候选框 背景色
 border_color: 0xD77800 #候选框 边框颜色
 text_color: 0x000000 #已选择字 文字颜色
 hilited_text_color: 0x000000 #已选择字右侧拼音 文字颜色
 hilited_back_color: 0xffffff #已选择字右侧拼音 背景色
 hilited_candidate_text_color: 0xffffff #候选字颜色
 hilited_candidate_back_color: 0xD77800 #候选字背景色
 candidate_text_color: 0x000000 #未候选字颜色

参考资料

rime定制指南 - 知乎 (zhihu.com)

自由输入法RIME简明配置指南 - 少数派 (sspai.com)

UserGuide · rime/home Wiki (github.com)

【图片】【SuperRime拓展词库】 for 朙月拼音&Win10拼音(700万词)【rime吧】_百度贴吧 (baidu.com)