进阶专题配置文件

方案与引擎配置

schema 域全部配置项——方案选择、码表与拼音引擎、混输、调频、自动造词

v0.116.0

[schema] 域管理方案选择全局引擎基线。这里配置的码表、拼音、混输等参数是所有同类方案共用的公共基线;单个方案若需与基线不同,通过 schema_overrides/<方案ID>.toml 逐字段覆盖(仅 schema.codetable 支持方案级 override,schema.pinyin / schema.mix 全局唯一)。方案本身的定义与覆盖机制见自定义方案

默认值来源

本页默认值以系统预置 data/config.toml[schema] 段为准。未写进预置文件的隐藏 / 内部字段,默认值取自程序内置代码默认。

方案选择

[schema]
active = "wubi86"                        # 当前激活方案
available = ["wubi86", "wubi86_pinyin"]  # 可循环切换的方案列表(顺序即切换顺序)
primary_codetable = ""                   # 主码表方案 ID(拼音反查码源),留空按 available 顺序取第一个码表方案
primary_pinyin = ""                      # 主拼音方案 ID(临时拼音目标方案),留空 = 全拼 "pinyin"
类型可选值默认说明
active字符串"wubi86"当前激活的方案 ID
available字符串数组["wubi86", "wubi86_pinyin"]可循环切换的方案列表,顺序即切换顺序
primary_codetable字符串""主码表方案 ID,作拼音反查的码源。留空时按 available 顺序取第一个码表方案
primary_pinyin字符串""主拼音方案 ID,作临时拼音的目标方案。留空 = 全拼("pinyin"

码表引擎(schema.codetable)

所有码表方案的公共基线。方案可经 schema_overrides/<方案ID>.toml[codetable] 段(带 enabled 总开关)逐字段覆盖。

[schema.codetable]
top_code_commit = true        # 顶码上屏(超满码长取前 N 码首选上屏)
clear_on_empty_max = false    # 满码无候选时清空缓冲
auto_commit_at_full = false   # 满码唯一精确时自动上屏
punct_commit = true           # 标点触发上屏
show_code_hint = true         # 显示编码提示
single_code_input = false     # 精确匹配模式(关闭前缀匹配)
single_code_complete = true   # 精确匹配空码补全(无候选时从更长编码取首选)
z_key_repeat = true           # z 键重复输入
input_chars = ""              # 码元字符集:哪些字符可进输入缓冲;空 = a-z
leading_chars = ""            # 可作第一码的字符(码元字符集的子集);空 = 与 input_chars 相同

# auto_commit_min_len = 0     # 隐藏项,见下方 Callout
类型可选值默认说明
top_code_commit布尔true顶码上屏:超满码长时取前 N 码首选上屏
clear_on_empty_max布尔false满码无候选时清空缓冲
auto_commit_at_full布尔false满码唯一精确时自动上屏
auto_commit_min_len整数0自动上屏最短码长;0 = 等于全码长。隐藏项
punct_commit布尔true标点触发上屏
show_code_hint布尔true显示编码提示
single_code_input布尔false精确匹配模式,关闭前缀匹配
single_code_complete布尔true精确匹配空码补全:无候选时从更长编码取首选
z_key_repeat布尔false(预置为 truez 键重复输入
input_chars字符串范围+字面""码元字符集:哪些字符可进输入缓冲。空 = 内置默认 a-z
leading_chars字符串范围+字面""可作第一码的字符,须是 input_chars 的子集。空 = 与 input_chars 相同

隐藏项:auto_commit_min_len

schema.codetable.auto_commit_min_len 不在设置工具中开放,仅可通过 config.toml 手改。0 表示等于全码长(默认行为)。

input_chars / leading_chars 实际取方案文件那份

这两个键在本段与方案文件的 [engine.codetable] 段里都存在,但引擎只从方案文件取——它们是方案的引擎固定参数,不是全局行为基线。写在 config.toml[schema.codetable] 下不会生效。

写法(范围 + 字面)、数字作码元时为何要配 leading_chars、以及码元会从选词键手里抢按键的代价,见方案配置 · 码元字符集

码表调频(schema.codetable.frequency)

[schema.codetable.frequency]
enabled = false          # 码表调频总开关
strategy = "top"         # top = 一次到顶 MRU / step = 逐次提升 / position = 位次渐进
promote_prefix = "all"   # 补全词参与调频:none / single / all(仅 position 下生效)
protect_top_n = 0        # 全码位(码长 ≥ 4)锁定原始前 N 位
protect_top_n_len1 = 1   # 一简位(码长 1)
protect_top_n_len2 = 1   # 二简位(码长 2)
protect_top_n_len3 = 0   # 三简位(码长 3)
half_life = 0.0          # 热度衰减半衰期(小时),0 = 内置 72 小时;仅 position 下生效
类型可选值默认说明
enabled布尔false码表调频总开关(取代旧 user_frequency
strategy枚举top / step / position"top"词频应用策略:top = 一次到顶 MRU;step = 逐次提升;position = 位次渐进 0.114 新增
promote_prefix枚举none / single / all"all"前缀补全候选参与位置提升的范围 0.114 新增strategy = "position" 时生效
protect_top_n整数0码长 ≥ 4 的全码位锁定原始前 N 位不被调频挤动(0 = 不保护)
protect_top_n_len1整数1码长 1 的一简位
protect_top_n_len2整数1码长 2 的二简位
protect_top_n_len3整数0码长 3 的三简位
half_life小数0.0调频热度的衰减半衰期(小时)0.114 新增0 = 内置 72 小时。仅 position 策略生效

三个策略相关键的生效条件

单个方案要与这份全局基线不同,用 schema_overrides/<方案ID>.toml[codetable] 段覆盖;图形界面入口是方案级码表配置

英文 [schema.english] 0.114 新增

英文是一个普通的可切换方案,有自己的配置段,不再共用码表那套——此前英文的调频策略挂在 schema.codetable.frequency 下,改它会连带改掉五笔的。设置工具位置:方案 → 全局方案配置 → 英文方案配置

[schema.english]
commit_space = false     # 上屏一个英文词后再补一个空格

[schema.english.frequency]
enabled = false          # 英文调频总开关
strategy = "position"    # position(默认)/ top / step
promote_prefix = "all"   # 补全词参与调频:none / single / all(仅 position 下生效)
half_life = 0.0          # 热度衰减半衰期(小时),0 = 内置 72 小时;仅 position 下生效
code_scope = "candidate" # 调频记账方式:candidate(按整词)/ input(按编码)
类型可选值默认说明
commit_space布尔false上屏一个英文词后自动补一个空格,连续打词不必手动按。生效范围见下
frequency.enabled布尔false英文调频总开关
frequency.strategy枚举position / top / step"position"词频应用策略
frequency.promote_prefix枚举none / single / all"all"前缀补全候选参与位置提升的范围。position 时生效
frequency.half_life小数0.0衰减半衰期(小时),0 = 内置 72 小时。position 时生效
frequency.code_scope枚举candidate / input"candidate"词频记账码口径

默认策略与码表不同position vs top),且没有 protect_top_n*——原因见英文方案配置

code_scope候选来源生效(混输里混进来的英文候选同样按它记账),commit_space当前方案生效(只在英文方案下补空格)。两者的完整语义与补空格的边界见英文方案配置

码表与拼音的记账口径不受 code_scope 影响:码表恒用输入码,拼音恒用候选码,见词频与候选排序 · 记账口径

首选保护按码长分级 0.113 新增

四个 protect_top_n* 只对纯码表方案(及混输的码表侧)生效,按本次输入的码长决定用哪一档。出厂即为「一简二简保护、三简与全码放开」。

保护名额只在精确匹配的候选里取,不足则少保护。分档的来龙去脉、老配置的迁移注意事项见词频与候选排序 · 首选保护

码表自动造词(schema.codetable.auto_phrase)

连续单字上屏累积成序列,遇终止符(标点 / 回车 / 空格 / 焦点切换 / 光标移动 / 多字词上屏)或超时后,为整个序列算词组编码并写入临时词库(立即可作候选);累计使用达 promote_count 次才晋升进用户词库。

[schema.codetable.auto_phrase]
enabled = false          # 自动造词总开关

# 以下均为隐藏 / 内部字段,见下方 Callout:

# min_phrase_len = 2     # 造词最小字数

# max_phrase_len = 5     # 造词最大字数(超长整体放弃,不截末尾 N 字)

# promote_count = 0      # 晋升进用户词库所需使用次数,0 = 不晋升(一直留临时词库)

# idle_timeout_ms = 0    # 连续单字最大间隔(毫秒),0 = 默认 5000

# temp_max_entries = 5000 # 临时词库条目上限,0 = 不限
类型可选值默认说明
enabled布尔false码表自动造词总开关
min_phrase_len整数2造词最小字数。隐藏项
max_phrase_len整数5造词最大字数;超长序列整体放弃,不截取末尾 N 字(避免切出杂词)。隐藏项
promote_count整数0临时词晋升进用户词库所需使用次数;0 = 不晋升,一直留在临时词库。隐藏项
idle_timeout_ms整数0连续单字之间的最大间隔(毫秒),超过则视作终止;0 = 默认 5000。隐藏项
temp_max_entries整数5000临时词库条目上限,超出淘汰权重最低者;0 = 不限。隐藏项

隐藏项:自动造词内部参数

enabled 外,min_phrase_len / max_phrase_len / promote_count / idle_timeout_ms / temp_max_entries 均为内部字段,不在设置工具中开放,仅可通过 config.toml 手改。默认组合已针对五笔场景调优,一般无需改动。

拼音引擎(schema.pinyin)

所有拼音类方案(全拼 / 双拼 / 混输拼音子方案 / 临时拼音反查)共用,无方案级 override。

[schema.pinyin]
show_code_hint = true       # 显示编码提示
use_smart_compose = true    # 智能组词
separator = "auto"          # 分隔策略:auto / quote / backtick / none
类型可选值默认说明
show_code_hint布尔true显示编码提示
use_smart_compose布尔true智能组词
separator字符串(隐性枚举)auto / quote / backtick / none"auto"拼音分隔策略。auto = ' 未被占作选择键时用 '、否则用反引号;quote = 强制 'backtick = 强制反引号;none = 禁用分隔符。双拼方案下不生效

双拼(schema.pinyin.shuangpin)

双拼相关的全局行为,一次配置对所有双拼方案生效。与方案级 engine.pinyin.shuangpin(那里放 layout,即某个方案的编码规则)分工不同:这里放的是「这台机器怎么用双拼」的偏好,无方案级 override。

[schema.pinyin.shuangpin]
allow_full_pinyin = false   # 双拼方案下额外把击键当全拼再解释一遍
类型可选值默认说明
allow_full_pinyin布尔false 0.115 新增双拼方案下额外把击键串当全拼再解释一遍(zaijian → 「再见」)。非双拼方案下无效;混输的拼音次引擎强制关闭

面向「多人共用一台机器」:主力用户打双拼,偶尔来的人只会全拼。开启后,双拼方案在自己的候选之外,额外把击键串当全拼解释一遍,覆盖精确整词、子短语、前缀补全与整句。

只有低置信的全拼候选(前缀补全、子短语)会沉到候选列表末尾;精确整词与整句和双拼候选同层竞争,由消费长度决定先后。同一个词双拼也打得出时,保留的是双拼那条。模糊音跟随 [schema.pinyin.fuzzy],与双拼流共用同一套设置。

关闭时(默认)对候选无任何影响,纯全拼方案与码表、混输三条路径也都不受此项影响。用法与候选顺序示例见拼音方案配置 · 全拼降级输入

模糊音(schema.pinyin.fuzzy)

各模糊音配对开关默认全关,需先开 enabled 总开关再逐项启用。

[schema.pinyin.fuzzy]
enabled = false
zh_z = false
ch_c = false
sh_s = false
n_l = false
f_h = false
r_l = false
an_ang = false
en_eng = false
in_ing = false
ian_iang = false
uan_uang = false
类型可选值默认说明
enabled布尔false模糊音总开关
zh_z布尔falsezh ↔ z 不分
ch_c布尔falsech ↔ c 不分
sh_s布尔falsesh ↔ s 不分
n_l布尔falsen ↔ l 不分
f_h布尔falsef ↔ h 不分
r_l布尔falser ↔ l 不分
an_ang布尔falsean ↔ ang 不分
en_eng布尔falseen ↔ eng 不分
in_ing布尔falsein ↔ ing 不分
ian_iang布尔falseian ↔ iang 不分
uan_uang布尔falseuan ↔ uang 不分

拼音调频(schema.pinyin.frequency)

0.114 起为位置提升模型:按候选位次前移,不打分。只有 half_life 参与(衰减),为 0 时用词频存储的内置默认(72 小时)。

[schema.pinyin.frequency]
enabled = true             # 拼音调频总开关
promote_prefix = "single"  # 补全词参与调频:none / single / all

# half_life = 0.0          # 半衰期(小时),0 = 用 store 默认(72)

# base_scale = 0.0         # 当前模型不使用,改动无效

# recency_peak = 0.0       # 当前模型不使用,改动无效
类型可选值默认说明
enabled布尔true拼音调频总开关
promote_prefix枚举none / single / all"single"前缀补全候选参与位置提升的范围 0.114 新增。判据为语义单元数
half_life浮点0.0半衰期(小时);0 = 用 store 默认(72)
base_scale浮点0.0base 系数 当前模型不使用,改动无效果
recency_peak浮点0.0最近使用峰值 当前模型不使用,改动无效果

两项已成死链,但没有删除

拼音词频从「衰减打分」改为「位置提升」后,base_scalerecency_peak 不再有任何消费者。保留而非删除是为了将来若恢复打分模型可直接复用,也避免跨仓改动设置工具的守门测试。写在配置里不会报错,只是没有效果。

模型细节见词库与词频 · 拼音调频:位置提升模型

拼音词组补全(schema.pinyin.completion)

[schema.pinyin.completion]
min_syllables = 2         # 至少输入几个音节才给词组候选
max_extra_syllables = 3   # 词组最多比输入多几个音节
类型可选值默认说明
min_syllables整数142 0.114 新增至少输入几个音节才给出词组候选;1 = 不限制
max_extra_syllables整数063 0.114 新增词组最多比已输入内容多几个音节

两项约束的都是词组补全——即码比输入长、引擎在预测你尚未输入的音节的那些候选。精确匹配、分段子词、整句、简拼一律不受影响,它们没有预测成分。

判据的尺子是输入自身的音节数:完整音节数 +(有未成音节的尾部字母则算起头的一个)。所以 dian 算 1 个音节,dianh 算 2 个。

逐档的候选对照表、「堤岸」为何仍在、以及 max_extra_syllables 为何不存在两全值,见拼音方案配置 · 词组补全

拼音自动造词(schema.pinyin.auto_learn)

[schema.pinyin.auto_learn]
enabled = true          # 拼音自动造词总开关

# min_word_length = 0   # 造词最小字数,0 = 回退 2

# promote_count = 0     # 临时词晋升所需使用次数
类型可选值默认说明
enabled布尔true拼音自动造词总开关
min_word_length整数0造词最小字数;0 = 回退 2
promote_count整数0临时词晋升所需使用次数

混输(schema.mix)

融合策略,全局唯一,无方案级 override。控制码表 / 拼音 / 英文候选如何在混输方案里融合与竞争上屏。

[schema.mix]
show_source_hint = false             # 显示候选来源标记
enable_english = false               # 启用英文候选
pinyin_only_overflow = true          # 超码长时仅查拼音
top_code_override_pinyin = false     # 顶码覆盖拼音
auto_commit_block_on_pinyin = true   # 满码上屏遇拼音候选则否决
auto_commit_block_on_english = false # 满码上屏遇英文候选则否决
min_pinyin_length = 2                # 拼音最小触发长度
min_english_length = 3               # 英文最小触发长度
block_commit_on_pinyin_word = true   # 拼音歧义拦截(词强度启发式)
pinyin_word_min_weight = 0           # 拼音歧义拦截的权重阈值
enable_pinyin_abbrev = true          # 拼音产出简拼候选(声母缩写,nh→你好)
类型可选值默认说明
show_source_hint布尔false显示候选来源标记
enable_english布尔false启用英文候选
pinyin_only_overflow布尔true超码长时仅查拼音
top_code_override_pinyin布尔false顶码偏好:顶码覆盖拼音
auto_commit_block_on_pinyin布尔true满码上屏遇拼音候选则否决(粗粒度:只要有拼音候选就拦,不看拼音成不成词)。与细粒度的 block_commit_on_pinyin_word 叠加,任一命中即否决。它同时管顶码上屏,也是满码空码清空的总闸,见下
auto_commit_block_on_english布尔false满码上屏遇英文候选则否决(仅 enable_english 开时有意义)
min_pinyin_length整数2拼音最小触发长度;0 = 回退 2
min_english_length整数3英文最小触发长度;0 = 回退 3
block_commit_on_pinyin_word布尔true拼音歧义拦截:整串是强拼音词时否决码表自动 / 顶码上屏(如 wangba→网吧)
pinyin_word_min_weight整数0拼音歧义拦截的词强度权重阈值;0 = 仅结构判据(≥2 汉字且消费整串)
enable_pinyin_abbrev布尔true混输时拼音是否产出简拼候选(声母缩写);关闭后混输里拼音只认全拼,候选更干净。仅影响混输的拼音子引擎,纯拼音方案不受影响

auto_commit_block_on_pinyin 也是「满码空码清空」的总闸

它开着时,schema.codetable.clear_on_empty_max 会被拼音侧拦下:「已有拼音候选」或「拼音还没打完」都不清空。关掉它则拼音不再干预,满码只剩「部分匹配」的拼音候选时即清空(如 nunl,候选「嫩」只解释了前 3 码 nun)。

仍在打的词不受影响——wanl 有前缀补全候选(wanle → 完了,消费整串),照常拦住清空。

快捷输入(schema.quick_input)

只放与候选来源无关的全局行为,目前仅一个键。

[schema.quick_input]
decimal_places = 6       # 计算器结果小数位数
类型可选值默认说明
decimal_places整数6计算器结果小数位数(0 = 取整)

快捷输入的其余设置都不在这一段,而在内置「快捷」融合模式(schema.mix_modes 里 id 为 quick_mix 的那一项)上:

想改什么去哪
开哪些候选来源、优先级members —— 有无即开关,顺序即优先级
候选窗横排 / 竖排candidate_layout
触发键 / 禁用整个功能trigger_keys —— 清空即进不去,故没有单独的总开关
自由字面输入free_input 0.114 新增 —— off / auto / always
自由输入下 ; ' 是字面还是选词free_input_takes_select_keys 0.114 新增 —— 默认 true(字面)

三个已移除的键

旧版本这一段还有 enabledforce_verticalenable_english,现已全部移除,写在配置里不会有任何效果:

  • enabled 从未被任何逻辑读取,关掉不产生效果,故删除。禁用改为清空 quick_mixtrigger_keys
  • force_vertical(布尔)→ quick_mixcandidate_layout(三态)。它的判定条件本就是「这个融合实例含快捷来源」,属于实例的属性,却被放在了与实例无关的全局段。存量配置会在启动时自动迁移trueverticalfalsefollow
  • enable_english → 改为 members 里有没有 english 这一项。它与 members 曾是双真相源。存量配置同样自动迁移false → 从 members 移除 english

自 0.114 起,enabledenable_english 这两个退役键会在启动时从用户配置里自动清除force_vertical 走的是迁移而非清除)。此前它们只是被解析器丢弃、却一直留在 config.toml 里,用户看见 enable_english = true 会以为它还生效。清除是幂等的,且清除前后 load() 的结果逐键完全相同——它们本来就不产生任何效果。若 [schema.quick_input] 段因此变空,整段一并回收。

注意 schema.mix.enable_english另一个键(管混输里的英文候选),仍然有效,没有被删。

更多用法见快捷输入

混输模式(mix_modes)


# schema.mix_modes 是数组(对象列表),此处不展开子字段
类型说明
mix_modes结构体数组临时混输模式列表(引导键触发,合并多个成员方案的候选)。内置一项 quick_mix快捷输入

这是每实例配置:同一份列表里的不同条目各有自己的候选来源与 candidate_layout,互不影响。

special_modes 已在 0.115.0 移除

特殊模式曾经也是这里的一个数组 schema.special_modes。0.115.0 起改为:呈现配置进方案文件[overlay],引导键进 [keys.key_actions]。残留的旧数组不再生效,只在启动日志里告警。

从 0.114 升级的用户需要手工改写一次,完整前后对照见0.115.0 配置格式变更

mix_modes 每一项的常用子字段:

子字段类型默认说明
id / name / short_name字符串实例标识、显示名、模式指示短称(空则取 name 首字)
trigger_keys字符串数组引导键列表;清空即禁用该实例
members字符串数组候选来源:有无即开关,顺序即优先级
candidate_layout枚举follow进入本实例期间的候选窗布局,退出后恢复
comment_template_vertical / _horizontal结构体跟随全局本实例期间的候选注释模板覆盖
free_input枚举auto自由字面输入:off / auto / always 0.114 新增。见快捷输入 · 自由字面输入
free_input_takes_select_keys布尔true自由输入时把第 2 / 3 候选键(默认 ; ')当作字面字符 0.114 新增。关掉则它们恢复选词,代价是 rock'n'roll 这类内容打不出。数字键 19 始终选词,不受本项影响

这两项不要写进 data/config.toml

它们的默认值定义在程序内部。系统预置文件 data/config.toml 一旦写出这两个数组,就会整体替换内置默认、把当时的定义冻结成快照——日后版本给内置「快捷」加候选来源或改触发键,都会被这份陈旧快照静默遮蔽。

要改就改用户配置%APPDATA%\WindInput\config.toml),或直接用设置工具。

相关阅读

本页目录