Skip to content

方案配置制作

本文面向需要创建自定义输入方案或深度修改现有方案的用户。普通用户通过设置工具即可完成配置,无需手动编辑方案文件。

行为参数在全局配置

用户可配的引擎行为(上屏策略、调频、造词、模糊音等)是全局配置,集中在 config.toml[schema.codetable] / [schema.pinyin] / [schema.mix];单方案的差异化通过 schema_overrides\<方案ID>.toml 覆盖。方案文件(*.schema.toml)只包含引擎固定参数(码长、词库、双拼布局等)。详见方案配置详解

方案文件结构

方案文件为 TOML 格式,位于 %APPDATA%\WindInput\schemas\ 目录,命名为 <方案ID>.schema.toml。最小结构如下:

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]

toml
[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)

适用于五笔等基于编码表的方案。仅三个固定参数:

toml
[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)

五笔 + 拼音混合输入,五笔优先、拼音兜底:

toml
[engine]
type = "mixed"

[engine.mixed]
primary_schema = "wubi86"       # 主方案(码表)
secondary_schema = "pinyin"     # 辅助方案(拼音)
codetable_weight_boost = 10000000  # 码表精确匹配提权基线(0=回退 10_000_000)

融合策略(enable_englishmin_pinyin_length、顶码偏好等)在全局 [schema.mix],详见全局混输配置

词库配置

每个方案的 dictionaries 数组列出所有词库,分主词库与附加词库两类:

  • 主词库 — 仅 1 个,default = true,始终启用
  • 附加词库 — 任意多个,可被用户独立开关
toml
# 主词库
[[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

词库条目字段

字段类型说明
idstring词库 ID,全局唯一
labelstringUI 显示名,留空回退 id
descriptionstring设置工具开关下方的小字说明
pathstring词库文件路径,相对 data\ / 用户数据根目录
typestringrime_codetable / rime_pinyin / english(空=回退 rime_codetable
defaultbool是否为主词库;每方案有且仅一个
default_enabledbool附加词库的方案默认启用状态;省略视为未启用
enabledbool用户覆盖启用状态;由设置工具写入用户方案文件,未设时继承 default_enabled
weight_as_orderbool权重仅表示同码内排序序号,不参与跨码比较
weight_spectable权重归一化参数(median / max / min / mode

启用判定优先级:enabled > default_enabled > 主词库始终启用

附加词库的热重载

在设置工具中切换附加词库开关会即时生效:开关写入用户数据目录下 schemas\<方案ID>.schema.tomldictionaries[].enabled 字段,输入服务监听到方案文件变更后自动重载对应附加层。

词库权重

通过 weight_spec 控制词库在候选排序中的权重分布:

toml
[[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\):

toml
[engine.chaizi]
db_path = "wubi86/wubi86_chaizi.txt"   # 拆字库(字\t字根\t编码)
font_path = "wubi86/HeiTiZiGen.ttf"    # 字根字体 TTF(可选)
font_family = "黑体字根"               # 字根字体的 DirectWrite 家族名(可选)

编码器

编码器根据规则自动为词组生成编码,常用于五笔方案:

toml
[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 中。添加自定义短语请通过「设置 → 词库 → 快捷短语」,写入后跨所有方案立即生效,无需编辑方案文件。存储模型与系统种子说明详见短语词库的存储

创建自定义方案示例

以下是一个简化版五笔方案的完整示例:

toml
[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 单独覆盖。

注意事项

  • 方案 ID 必须与文件名前缀一致(如 my_schema.schema.toml 的 ID 为 my_schema
  • 词库文件需放置在用户数据目录 schemas\ 下(或复用 data\ 下的内置词库路径)
  • 修改方案文件后需要重启输入法或切换方案才能生效(词库开关等热重载项除外)
  • 建议先导出内置方案作为模板,在其基础上修改
  • 分发方案用方案包.zip):在设置工具方案页导出,包内为零层级结构(根目录直接放方案文件与词库,可附可选的 package.toml 元信息);导入方自动预览包内容并选择合并/替换
  • 全局引擎行为与覆盖机制详见方案配置详解