方案配置制作
本文面向需要创建自定义输入方案或深度修改现有方案的用户。普通用户通过设置工具即可完成配置,无需手动编辑方案文件。
行为参数在全局配置
用户可配的引擎行为(上屏策略、调频、造词、模糊音等)是全局配置,集中在 config.toml 的 [schema.codetable] / [schema.pinyin] / [schema.mix];单方案的差异化通过 schema_overrides\<方案ID>.toml 覆盖。方案文件(*.schema.toml)只包含引擎固定参数(码长、词库、双拼布局等)。详见方案配置详解。
方案文件结构
方案文件为 TOML 格式,位于 %APPDATA%\WindInput\schemas\ 目录,命名为 <方案ID>.schema.toml。最小结构如下:
[schema]
id = "my_schema" # 方案 ID,须与文件名前缀一致
name = "我的方案"
icon_label = "我" # 模式指示/状态气泡的图标短称(可选)
version = "1.0"
author = "作者"
description = "方案说明"
[engine]
type = "codetable" # 引擎类型:pinyin / codetable / mixed
# …引擎固定参数与词库…引擎类型
拼音引擎(pinyin)
适用于全拼和双拼方案。方案文件只写 scheme、双拼布局与语言模型路径;show_code_hint、模糊音等行为已在全局 [schema.pinyin]。
[engine]
type = "pinyin"
[engine.pinyin]
scheme = "full" # full(全拼)/ shuangpin(双拼)
unigram_path = "pinyin/unigram.txt" # unigram 语言模型(长句打分用,可选)
# 双拼方案额外指定布局
[engine.pinyin.shuangpin]
layout = "xiaohe" # xiaohe / ziranma / mspy / sogou / abc / ziguang码表引擎(codetable)
适用于五笔等基于编码表的方案。仅三个固定参数:
[engine]
type = "codetable"
[engine.codetable]
max_code_length = 4 # 最大码长(0=回退 4)
base_sort = "weight" # 基础排序:weight(默认)/ natural(字根序)
input_chars = "" # 输入码字符集,如 "a-x"(空=默认)上屏策略、调频、造词、临时拼音等已在全局 [schema.codetable] 与 schema_overrides,不写在方案文件里。
混合引擎(mixed)
五笔 + 拼音混合输入,五笔优先、拼音兜底:
[engine]
type = "mixed"
[engine.mixed]
primary_schema = "wubi86" # 主方案(码表)
secondary_schema = "pinyin" # 辅助方案(拼音)
codetable_weight_boost = 10000000 # 码表精确匹配提权基线(0=回退 10_000_000)融合策略(enable_english、min_pinyin_length、顶码偏好等)在全局 [schema.mix],详见全局混输配置。
词库配置
每个方案的 dictionaries 数组列出所有词库,分主词库与附加词库两类:
- 主词库 — 仅 1 个,
default = true,始终启用 - 附加词库 — 任意多个,可被用户独立开关
# 主词库
[[dictionaries]]
id = "wubi86_main"
label = "极点五笔主词库"
description = "极点五笔基础词库,含单字与高频词组"
path = "wubi86/wubi86_jidian.dict.yaml" # 词库文件为 Rime YAML 格式
type = "rime_codetable"
default = true
# 附加词库
[[dictionaries]]
id = "wubi86_emoji"
label = "Emoji 表情"
description = "按五笔编码检索 emoji;输入 emoj 可查看常用表情"
path = "wubi86/wubi86_jidian_emoji.dict.yaml"
type = "rime_codetable"
default_enabled = true # 方案默认启用
weight_as_order = true词库条目字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 词库 ID,全局唯一 |
label | string | UI 显示名,留空回退 id |
description | string | 设置工具开关下方的小字说明 |
path | string | 词库文件路径,相对 data\ / 用户数据根目录 |
type | string | rime_codetable / rime_pinyin / english(空=回退 rime_codetable) |
default | bool | 是否为主词库;每方案有且仅一个 |
default_enabled | bool | 附加词库的方案默认启用状态;省略视为未启用 |
enabled | bool | 用户覆盖启用状态;由设置工具写入用户方案文件,未设时继承 default_enabled |
weight_as_order | bool | 权重仅表示同码内排序序号,不参与跨码比较 |
weight_spec | table | 权重归一化参数(median / max / min / mode) |
启用判定优先级:enabled > default_enabled > 主词库始终启用。
附加词库的热重载
在设置工具中切换附加词库开关会即时生效:开关写入用户数据目录下 schemas\<方案ID>.schema.toml 的 dictionaries[].enabled 字段,输入服务监听到方案文件变更后自动重载对应附加层。
词库权重
通过 weight_spec 控制词库在候选排序中的权重分布:
[[dictionaries]]
id = "pinyin_main"
[dictionaries.weight_spec]
median = 200 # 中位权重
max = 19260817 # 最大权重
mode = "log" # linear(线性)/ log(对数)若码表词库的权重不是真实词频而是同编码内的重码序号(如极点五笔的 10/20/30/40),加 weight_as_order = true,前缀匹配按码表文件顺序排列,避免重码加权导致的排序异常。
拆字提示
形码方案可挂拆字库,在候选悬停提示里显示构字信息(路径相对 data\schemas\):
[engine.chaizi]
db_path = "wubi86/wubi86_chaizi.txt" # 拆字库(字\t字根\t编码)
font_path = "wubi86/HeiTiZiGen.ttf" # 字根字体 TTF(可选)
font_family = "黑体字根" # 字根字体的 DirectWrite 家族名(可选)编码器
编码器根据规则自动为词组生成编码,常用于五笔方案:
[encoder]
max_word_length = 10
[[encoder.rules]]
length_equal = 2 # 二字词
formula = "AaAbBaBb" # 第一字前两码 + 第二字前两码
[[encoder.rules]]
length_equal = 3 # 三字词
formula = "AaBaCaCb"
[[encoder.rules]]
length_in_range = [4, 10] # 四字及以上
formula = "AaBaCaZa"公式语法:A/B/C/Z = 第 1、2、3、末个字;a/b = 该字的第 1、2 个编码(如 Aa = 第 1 字第 1 码,Ab = 第 1 字第 2 码)。
临时拼音
码表方案下「忘码时切到拼音」的临时拼音已是全局配置,不在方案文件里。在 config.toml 的 [input.temp_pinyin] 设置触发键与目标拼音方案,详见输入行为配置。
自定义短语
短语(PhraseLayer)是全局共享的,不区分方案,统一存储在 userdata.redb 中。添加自定义短语请通过「设置 → 词库 → 快捷短语」,写入后跨所有方案立即生效,无需编辑方案文件。存储模型与系统种子说明详见短语词库的存储。
创建自定义方案示例
以下是一个简化版五笔方案的完整示例:
[schema]
id = "simple_wubi"
name = "简版五笔"
icon_label = "简"
version = "1.0"
[engine]
type = "codetable"
[engine.codetable]
max_code_length = 4
base_sort = "weight"
[[dictionaries]]
id = "wubi86_main"
path = "wubi86/wubi86_jidian.dict.yaml"
type = "rime_codetable"
default = true
[encoder]
max_word_length = 10
[[encoder.rules]]
length_equal = 2
formula = "AaAbBaBb"
[[encoder.rules]]
length_equal = 3
formula = "AaBaCaCb"
[[encoder.rules]]
length_in_range = [4, 10]
formula = "AaBaCaZa"将此文件保存为 %APPDATA%\WindInput\schemas\simple_wubi.schema.toml,然后在全局配置的 schema.available 中加入 "simple_wubi",即可通过「切换输入方案」快捷键切换到该方案。上屏策略、调频等行为在全局 [schema.codetable] 统一调整,或用 schema_overrides\simple_wubi.toml 单独覆盖。
