Rime 输入法方案配置手册
## 一、 Schema.yaml 文件详解
1.1 开始之前
12# Rime schema# encoding: utf-8
1.2 描述档
name: 方案的显示名偁〔即出现于方案选单中以示人的,通常为中文〕
schema_id: 方案内部名,在代码中引用此方案时以此名为正,通常由英文、数字、下划线组成
author: 发明人、撰写者。如果您对方案做出了修改,请保留原作者名,并将自己的名字加在后面
description: 请简要描述方案历史、码表来源、该方案规则等
dependencies: 如果本方案依赖于其它方案〔通常来说会依頼其它方案做为反查,抑或是两种或多种方案混用时〕
version: 版本号,在发布新版前请确保已陞版本号
示例
12345678910111213schema: name: "苍颉检字法" schema_id: cangjie6 author: - "发明人 朱邦复先生、沉红莲女士" dependencies: - luna_pinyin - jyutping - zyenpheng description: | 第六代仓颉输入法 码表由雪斋、惜缘和crazy4u整理 version: 0.19
1.3 开关
通常包含以下数个:
ascii_mode 是中英文转换开关。默认0为中文,1为英文
full_shape 是全角符号/半角符号开关。注意,开启全角时英文字母亦为全角。0为半角,1为全角
extended_charset 是字符集开关。0为CJK基本字符集,1为CJK全字符集
仅table_translator可用
ascii_punct 是中西文标点转换开关,0为中文句读,1为西文标点。
simplification 是转化字开关。一般情况下与上同,0为不开启转化,1为转化。
simplification选项名偁可自定义,亦可添加多套替换用字方案:
123- name: zh_cn states: ["汉字", "汉字"] reset: 0
或
123456- options: [ zh_trad, zh_cn, zh_mars ] states: - 字型 → 汉字 - 字型 → 汉字 - 字型 → 䕼茡 reset: 0
name/options名:须与simplifier中option_name相同
states:可不写,如不写则此开关存在但不可见,可由快捷键操作
reset:设置默认状态〔reset可不写,此时切换窗口时不会重置到默认状态〕
字符集过滤。此选项没有默认名偁,须配合charset_filter使用。可单用,亦可添加多套字符集:
123- name: gbk states: [ 增广, 常用 ] reset: 0
或
12345678- options: [ utf-8, big5hkscs, big5, gbk, gb2312 ] states: - 字集 → 全 - 字集 → 港台 - 字集 → 台 - 字集 → 大陆 - 字集 → 简体 reset: 0
name/options名:须与charset_filter``@后的tag相同
避免同时使用字符集过滤和extended_charset
示例
123456789101112switches: - name: ascii_mode reset: 0 states: ["中文", "西文"] - name: full_shape states: ["半角", "全角"] - name: extended_charset states: ["通用", "增广"] - name: simplification states: ["汉字", "汉字"] - name: ascii_punct states: ["句读", "符号"]
1.4 引擎
以下加粗项为可细配者,_斜体_者为不常用者
引擎分四组:
一、processors
这批组件处理各类按键消息
ascii_composer 处理西文模式及中西文切
recognizer 与matcher搭配,处理符合特定规则的输入码,如网址、反查等tags
key_binder 在特定条件下将按键绑定到其他按键,如重定义逗号、句号为候选翻页、开关快捷键等
speller 拼写处理器,接受字符按键,编辑输入
punctuator 句读处理器,将单个字符按键直接映射为标点符号或文字
selector 选字处理器,处理数字选字键〔可以换成别的哦〕、上、下候选定位、换页
navigator 处理输入栏内的光标移动
express_editor 编辑器,处理空格、回车上屏、回退键
fluid_editor 句式编辑器,用于以空格断词、回车上屏的【注音】、【语句流】等输入方案,替换express_editor
chord_composer 和絃作曲家或曰并击处理器,用于【宫保拼音】等多键并击的输入方案
lua_processor 使用lua自定义按键,后接@+lua函数名
lua函数名即用户文件夹内rime.lua中函数名,参数为(key, env)
二、segmentors
这批组件识别不同内容类型,将输入码分段并加上tag
ascii_segmentor 标识西文段落〔譬如在西文模式下〕字母直接上屛
matcher 配合recognizer标识符合特定规则的段落,如网址、反查等,加上特定tag
abc_segmentor 标识常规的文字段落,加上abc这个tag
punct_segmentor 标识句读段落〔键入标点符号用〕加上punct这个tag
fallback_segmentor 标识其他未标识段落
affix_segmentor 用户自定义tag
此项可加载多个实例,后接@+tag名
lua_segmentor 使用lua自定义切分,后接@+lua函数名
三、translators
这批组件翻译特定类型的编码段为一组候选文字
echo_translator 没有其他候选字时,回显输入码〔输入码可以Shift+Enter上屛〕
punct_translator 配合punct_segmentor转换标点符号
table_translator 码表翻译器,用于仓颉、五笔等基于码表的输入方案
- 此项可加载多个实例,后接@+翻译器名〔如:cangjie、wubi等〕7. script_translator 脚本翻译器,用于拼音、粤拼等基于音节表的输入方案
- 此项可加载多个实例,后接@+翻译器名〔如:pinyin、jyutping等〕11. reverse_lookup_translator 反查翻译器,用另一种编码方案查码
lua_translator 使用lua自定义输入,例如动态输入当前日期、时间,后接@+lua函数名
lua函数名即用户文件夹内rime.lua中函数名,参数为(input, seg, env)
可以env.engine.context:get_option("option_name")方式绑定到switch开关/key_binder快捷键
四、filters
这批组件过滤翻译的结果
uniquifier 过滤重复的候选字,有可能来自**simplifier**
cjk_minifier 字符集过滤〔仅用于script_translator,使之支持extended_charset开关〕
single_char_filter 单字过滤器,如加载此组件,则屛敝词典中的词组〔仅table_translator有效〕
simplifier 用字转换
reverse_lookup_filter 反查滤镜,以更灵活的方式反查,Rime1.0后替代_reverse_lookup_translator_
此项可加载多个实例,后接@+滤镜名〔如:pinyin_lookup、jyutping_lookup等〕
charset_filter 字符集过滤
后接@+字符集名〔如:utf-8(无过滤)、big5、big5hkscs、gbk、gb2312〕
lua_filter 使用lua自定义过滤,例如过滤字符集、调整排序,后接@+lua函数名
lua函数名即用户文件夹内rime.lua中函数名,参数为(input, env)
可以env.engine.context:get_option("option_name")方式绑定到switch开关/key_binder快捷键
示例
cangjie6.schema.yaml
1234567891011121314151617181920212223242526272829303132333435363738engine: processors: - ascii_composer - recognizer - key_binder - speller - punctuator - selector - navigator - express_editor segmentors: - ascii_segmentor - matcher - affix_segmentor@pinyin - affix_segmentor@jyutping - affix_segmentor@pinyin_lookup - affix_segmentor@jyutping_lookup - affix_segmentor@reverse_lookup - abc_segmentor - punct_segmentor - fallback_segmentor translators: - punct_translator - table_translator - script_translator@pinyin - script_translator@jyutping - script_translator@pinyin_lookup - script_translator@jyutping_lookup - lua_translator@get_date filters: - simplifier@zh_simp - uniquifier - cjk_minifier - charset_filter@gbk - reverse_lookup_filter@middle_chinese - reverse_lookup_filter@pinyin_reverse_lookup - reverse_lookup_filter@jyutping_reverse_lookup - lua_filter@single_char_first
1.5 细项配置
凡comment_format、preedit_format、speller/algebra所用之正则表达式,请参阅「Perl正则表达式」
引擎中所举之加粗者均可在下方详细描述,格式为:
12name: branches: configurations
或
123name: branches: - configurations
一、speller
alphabet: 定义本方案输入键
initials: 定义仅作始码之键
finals: 定义仅作末码之键
delimiter: 上屛时的音节间分音符
algebra: 拼写运算规则,由之算出的拼写汇入prism中
max_code_length: 形码最大码长,超过则顶字上屛〔number〕
auto_select: 自动上屛〔true或false〕
auto_select_pattern: 自动上屏规则,以正则表达式描述,当输入串可以被匹配时自动顶字上屏。
use_space: 以空格作输入码〔true或false〕
speller的演算包含:
123456xform --改写〔不保留原形〕derive --衍生〔保留原形〕abbrev --简拼〔出字优先级较上两组更低〕fuzz --畧拼〔此种简拼仅组词,不出单字〕xlit --变换〔适合大量一对一变换〕erase --删除
示例
luna_pinyin.schema.yaml
1234567891011121314151617speller: alphabet: zyxwvutsrqponmlkjihgfedcba delimiter: " '" algebra: - erase/^xx$/ - abbrev/^([a-z]).+$/$1/ - abbrev/^([zcs]h).+$/$1/ - derive/^([nl])ve$/$1ue/ - derive/^([jqxy])u/$1v/ - derive/un$/uen/ - derive/ui$/uei/ - derive/iu$/iou/ - derive/([aeiou])ng$/$1gn/ - derive/([dtngkhrzcs])o(u|ng)$/$1o/ - derive/ong$/on/ - derive/ao$/oa/ - derive/([iu])a(o|ng?)$/a$1$2/
二、segmentor
segmentor配合recognizer标记出tag。这里会用到affix_segmentor和abc_translator
tag用在translator、reverse_lookup_filter、simplifier中用以标定各自作用范围
如果不需要用到extra_tags则不需要单独配置segmentor
tag: 设置其tag
prefix: 设置其前缀标识,可不塡,不塡则无前缀
suffix: 设置其尾缀标识,可不塡,不塡则无尾缀
tips: 设置其输入前提示符,可不塡,不塡则无提示符
closing_tips: 设置其结束输入提示符,可不塡,不塡则无提示符
extra_tags: 为此segmentor所标记的段落插上其它tag
当affix_segmentor和translator重名时,两者可併在一处配置,此处1-5条对应下面19-23条。abc_segmentor仅可设extra_tags
示例
cangjie6.schema.yaml
123456789reverse_lookup: tag: reverse_lookup prefix: "`" suffix: ";" tips: "【反查】" closing_tips: "【苍颉】" extra_tags: - pinyin_lookup - jyutping_lookup
三、translator
每个方案有一个主translator,在引擎列表中不以@+翻译器名定义,在细项配置时直接以translator:命名。以下加粗项为可在主translator中定义之项,其它可在副〔以@+翻译器名命名〕translator中定义
enable_charset_filter: 是否开启字符集过滤〔仅table_translator有效。启用cjk_minifier后可适用于script_translator〕
enable_encoder: 是否开启自动造词〔仅table_translator有效〕
encode_commit_history: 是否对已上屛词自动成词〔仅table_translator有效〕
max_phrase_length: 最大自动成词词长〔仅table_translator有效〕
enable_completion: 提前显示尚未输入完整码的字〔仅table_translator有效〕
sentence_over_completion: 在无全码对应字而仅有逐键提示时也开启智能组句〔仅table_translator有效〕
strict_spelling: 配合speller中的fuzz规则,仅以畧拼码组词〔仅table_translator有效〕
disable_user_dict_for_patterns: 禁止某些编码录入用户词典
enable_sentence: 是否开启自动造句
enable_user_dict: 是否开启用户词典〔用户词典记录动态字词频、用户词〕
以上选塡true或false
dictionary: 翻译器将调取此字典文件
prism: 设置由此主翻译器的speller生成的棱镜文件名,或此副编译器调用的棱镜名
user_dict: 设置用户词典名
db_class: 设置用户词典类型,可设tabledb〔文本〕或userdb〔二进制〕
preedit_format: 上屛码自定义
comment_format: 提示码自定义
spelling_hints: 设置多少字以内候选标注完整带调拼音〔仅script_translator有效〕
initial_quality: 设置此翻译器出字优先级
tag: 设置此翻译器针对的tag。可不塡,不塡则仅针对abc
prefix: 设置此翻译器的前缀标识,可不塡,不塡则无前缀
suffix: 设置此翻译器的尾缀标识,可不塡,不塡则无尾缀
tips: 设置此翻译器的输入前提示符,可不塡,不塡则无提示符
closing_tips: 设置此翻译器的结束输入提示符,可不塡,不塡则无提示符
contextual_suggestions: 是否使用语言模型优化输出结果〔需配合grammar使用〕
max_homophones: 最大同音簇长度〔需配合grammar使用〕
max_homographs: 最大同形簇长度〔需配合grammar使用〕
示例
cangjie6.schema.yaml 苍颉主翻译器
12345678910111213141516translator: dictionary: cangjie6 enable_charset_filter: true enable_sentence: true enable_encoder: true encode_commit_history: true max_phrase_length: 5 preedit_format: - xform/^([a-z ])$/$1|\U$1\E/ - xform/(?<=[a-z])\s(?=[a-z])// - "xlit|ABCDEFGHIJKLMNOPQRSTUVWXYZ|日月金木水火土竹戈十大中一弓人心手口尸廿山女田止卜片|" comment_format: - "xlit|abcdefghijklmnopqrstuvwxyz~|日月金木水火土竹戈十大中一弓人心手口尸廿山女田止卜片・|" disable_user_dict_for_patterns: - "^z.$" initial_quality: 0.75
cangjie6.schema.yaml 拼音副翻译器
123456789101112pinyin: tag: pinyin dictionary: luna_pinyin enable_charset_filter: true prefix: 'P' #须配合recognizer suffix: ';' #须配合recognizer preedit_format: - "xform/([nl])v/$1ü/" - "xform/([nl])ue/$1üe/" - "xform/([jqxy])v/$1u/" tips: "【汉拼】" closing_tips: "【苍颉】"
pinyin_simp.schema.yaml 拼音・简化字主翻译器
1234567translator: dictionary: luna_pinyin prism: luna_pinyin_simp preedit_format: - xform/([nl])v/$1ü/ - xform/([nl])ue/$1üe/ - xform/([jqxy])v/$1u/
luna_pinyin.schema.yaml 朙月拼音用户短语
1234567custom_phrase: #这是一个table_translator dictionary: "" user_dict: custom_phrase db_class: tabledb enable_sentence: false enable_completion: false initial_quality: 1
四、reverse_lookup_filter
此滤镜须挂在translator上,不影响该translator工作
tags: 设置其作用范围
overwrite_comment: 是否覆盖其他提示
dictionary: 反查所得提示码之码表
comment_format: 自定义提示码格式
示例
cangjie6.schema.yaml
12345678pinyin_reverse_lookup: #该反查滤镜名 tags: [ pinyin_lookup ] #挂在这个tag所对应的翻译器上 overwrite_comment: true dictionary: cangjie6 #反查所得为苍颉码 comment_format: - "xform/$/〕/" - "xform/^/〔/" - "xlit|abcdefghijklmnopqrstuvwxyz |日月金木水火土竹戈十大中一弓人心手口尸廿山女田止卜片、|"
五、simplifier
option_name: 对应switches中设置的切换项名
opencc_config: 用字转换配置文件
位于:rime_dir/opencc/,自带之配置文件含:
繁转简〔默认〕:t2s.json
繁转台湾:t2tw.json
繁转香港:t2hk.json
简转繁:s2t.json
tags: 设置转换范围
tips: 设置是否提示转换前的字,可塡none〔或不塡〕、char〔仅对单字有效〕、all
show_in_comment: 设置是否仅将转换结果显示在备注中
excluded_types: 取消特定范围〔一般为_reverse_lookup_translator_〕转化用字
示例
修改自 luna_pinyin_kunki.schema
12345zh_tw: option_name: zh_tw opencc_config: t2tw.json tags: [ abc ] #abc对应abc_segmentor tips: none
六、chord_composer_
并击把键盘分两半,相当于两块键盘。两边同时击键,系统默认在其中一半上按的键先于另一半,由此得出上屛码
alphabet: 字母表,包含用于并击的按键。击键虽有先后,形成并击时,一律以字母表顺序排列
algebra: 拼写运算规则,将一组并击编码转换为拼音音节
output_format: 并击完成后套用的式样,追加隔音符号
prompt_format: 并击过程中套用的式样,加方括弧
示例
combo_pinyin.schema.yaml
123456789101112131415161718192021222324252627chord_composer: # 字母表,包含用于并击的按键 # 击键虽有先后,形成并击时,一律以字母表顺序排列 alphabet: "swxdecfrvgtbnjum ki,lo." # 拼写运算规则,将一组并击编码转换为拼音音节 algebra: # 先将物理按键字符对应到宫保拼音键位中的拼音字母 - 'xlit|swxdecfrvgtbnjum ki,lo.|sczhlfgdbktpRiuVaNIUeoE|' # 以下根据宫保拼音的键位分别变换声母、韵母部分 # 组合声母 - xform/^zf/zh/ - xform/^cl/ch/ - xform/^fb/m/ - xform/^ld/n/ - xform/^hg/r/ …… # 声母独用时补足隠含的韵母 - xform/^([bpf])$/$1u/ - xform/^([mdtnlgkh])$/$1e/ - xform/^([mdtnlgkh])$/$1e/ - xform/^([zcsr]h?)$/$1i/ # 并击完成后套用的式样,追加隔音符号 output_format: - "xform/^([a-z]+)$/$1'/" # 并击过程中套用的式样,加方括弧 prompt_format: - "xform/^(.*)$/[$1]/"
七、lua
请参攷hchunhui/librime-lua 以寻求更多灵感。
lua_translator
lua_filter
lua_processor
lua_segmentor
示例
rime.lua
12345678function get_date(input, seg, env) --- 以 show_date 为开关名或 key_binder 中 toggle 的对象 on = env.engine.context:get_option("show_date") if (on and input == "date") then --- Candidate(type, start, end, text, comment) yield(Candidate("date", seg.start, seg._end, os.date("%Y年%m月%d日"), " 日期")) endend
八、其它
包括recognizer、key_binder、punctuator。标点、快捷键、二三选重、特殊字符等均于此设置
import_preset: 由外部统一文件导入
grammar: 下设:
language: 取值zh-han[ts]-t-essay-bg[wc]
collocation_max_length: 最大搭配长度(整句输入可忽畧此项)
collocation_min_length: 最小搭配长度(整句输入可忽畧此项)
recognizer: 下设patterns: 配合segmentor的prefix和suffix完成段落划分、tag分配
前字段可以为以affix_segmentor@someTag定义的Tag名,或者punct、reverse_lookup两个内设的字段。其它字段不调用输入法引擎,输入即输出〔如url等字段〕
key_binder: 下设bindings: 设置功能性快捷键
每一条binding可能包含:accept实际所按之键、send输出效果、toggle切换开关和when作用范围〔send和toggle二选一〕
toggle可用字段包含各开关名
when可用字段包含:
1234paging 翻䈎用has_menu 操作候选项用composing 操作输入码用always 全域
accept和send可用字段除A-Za-z0-9外,还包含以下键板上实际有的键:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108BackSpace 退格Tab 水平定位符Linefeed 换行Clear 清除Return 回车Pause 暂停Sys_Req 印屏Escape 退出Delete 删除Home 原位Left 左箭头Up 上箭头Right 右箭头Down 下箭头Prior、Page_Up 上翻Next、Page_Down 下翻End 末位Begin 始位Shift_L 左ShiftShift_R 右ShiftControl_L 左CtrlControl_R 右CtrlMeta_L 左MetaMeta_R 右MetaAlt_L 左AltAlt_R 右AltSuper_L 左SuperSuper_R 右SuperHyper_L 左HyperHyper_R 右HyperCaps_Lock 大写锁Shift_Lock 上档锁Scroll_Lock 滚动锁Num_Lock 小键板锁Select 选定Print 打印Execute 执行Insert 插入Undo 还原Redo 重做Menu 菜单Find 蒐寻Cancel 取消Help 帮助Break 中断spaceexclam !quotedbl "numbersign #dollar $percent %ampersand &apostrophe 'parenleft (parenright )asterisk *plus +comma ,minus -period .slash /colon :semicolon ;less
editor用以订制操作键〔不支持import_preset:〕,键板键名同key_binder/bindings中的accept和send,效果定义如下:
123456789101112confirm 上屏候选项commit_comment 上屏候选项备注commit_raw_input 上屏原始输入commit_script_text 上屏变换后输入commit_composition 语句流单字上屏revert 撤消上次输入back 按字符回退back_syllable 按音节回退delete_candidate 删除候选项delete 向后删除cancel 取消输入noop 空
punctuator: 下设full_shape:和half_shape:分别控制全角模式下的符号和半角模式下的符号,另有use_space:空格顶字〔true或false〕
每条标点项可加commit直接上屏和pair交替上屏两种模式,默认为选单模式
示例
修改自 cangjie6.schema.yaml
123456789101112131415161718key_binder: import_preset: default bindings: - {accept: semicolon, send: 2, when: has_menu} #分号选第二重码 - {accept: apostrophe, send: 3, when: has_menu} #引号选第三重码 - {accept: "Control+1", select: .next, when: always} - {accept: "Control+2", toggle: full_shape, when: always} - {accept: "Control+3", toggle: simplification, when: always} - {accept: "Control+4", toggle: extended_charset, when: always}editor:bindings:Return: commit_commentpunctuator:import_preset: symbolshalf_shape:"'": {pair: ["「", "」"]} #第一次按是「,第二次是」"(": ["〔", "["] #弹出选单.: {commit: "。"} #无选单,直接上屛。优先级最高
1.6 其它
Rime还为每个方案提供选单和一定的外观订制能力
通常情况下menu在default.yaml中定义〔或用户修改档default.custom.yaml〕,style在squirrel.yaml或weasel.yaml〔或用户修改档squirrel.custom.yaml或weasel.custom.yaml〕
示例
1234menu: alternative_select_labels: [ ①, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨ ] # 修改候选标籤 alternative_select_keys: ASDFGHJKL #如编码字符占用数字键则须另设选字键 page_size: 5 #选单每䈎显示个数
Dict.yaml 详解
开始之前
123# Rime dict# encoding: utf-8〔你还可以在这注释字典来源、变动记录等〕
描述档
name: 内部字典名,也即schema所引用的字典名,确保与文件名相一致
version: 如果发布,请确保每次改动陞版本号
示例
12name: "cangjie6.extended"version: "0.1"
配置
sort: 字典初始排序,可选original或by_weight
use_preset_vocabulary: 是否引入「八股文」〔含字词频、词库〕
max_phrase_length: 配合use_preset_vocabulary:,设置导入词条最大词长
min_phrase_weight: 配合use_preset_vocabulary:,设置导入词条最小词频
columns: 定义码表以Tab分隔出的各列,可设text【文本】、code【码】、weight【权重】、stem【造词码】
import_tables: 加载其它外部码表
encoder: 形码造词规则
exclude_patterns:
rules: 可用length_equal:和length_in_range:定义。大写字母表示字序,小写字母表示其所跟随的大写字母所以表的字中的编码序
tail_anchor: 造词码包含结构分割符〔仅用于仓颉〕
exclude_patterns 取消某编码的造词资格
示例
cangjie6.extended.dict.yaml
123456789101112131415161718sort: by_weightuse_preset_vocabulary: falseimport_tables: - cangjie6 #单字码表由cangjie6.dict.yaml导入columns: #此字典为纯词典,无单字编码,仅有字和词频 - text #字/词 - weight #字/词频encoder: exclude_patterns: - '^z.*$' rules: - length_equal: 2 #对于二字词 formula: "AaAzBaBbBz" #取第一字首尾码、第二字首次尾码 - length_equal: 3 #对于三字词 formula: "AaAzBaYzZz" #取第一字首尾码、第二字首尾码、第三后缀码 - length_in_range: [4, 5] #对于四至五字词 formula: "AaBzCaYzZz" #取第一字首码,第二后缀码、第三字首码、倒数第二后缀码、最后一后缀码 tail_anchor: "'"
码表
以Tab分隔各列,各列依columns:定义排列。
示例
cangjie6.dict.yaml
12345columns: - text #第一列字/词 - code #第二列码 - weight #第三列字/词频 - stem #第四列造词码
cangjie6.dict.yaml
1234567891011121314个 owjr 246268 ow'jr看 hqbu 245668中 l 243881呢 rsp 242970来 doo 235101吗 rsqf 221092为 bhnf 211340会 owfa 209844她 vpd 204725与 xyc 203975给 vfor 193007等 hgdi 183340这 yymr 181787用 bq 168934 b'q