方案与引擎配置
schema 域全部配置项——方案选择、码表与拼音引擎、混输、调频、自动造词
[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(${code_rev} 的码源),留空按 available 顺序取第一个码表方案
primary_pinyin = "" # 主拼音方案 ID(临时拼音目标方案),留空 = 全拼 "pinyin"| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
active | 字符串 | — | "wubi86" | 当前激活的方案 ID |
available | 字符串数组 | — | ["wubi86", "wubi86_pinyin"] | 可循环切换的方案列表,顺序即切换顺序 |
primary_codetable | 字符串 | — | "" | 主码表方案 ID,作拼音反查(${code_rev})的码源。留空时按 available 顺序取第一个码表方案。注意 ${shuangpin}(双拼编码)不经过它 |
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 # 满码唯一精确时自动上屏
auto_commit_min_len = 0 # 自动上屏最短码长:上一项从第几码起判定;0 = 等于全码长
punct_commit = true # 标点触发上屏
show_code_hint = true # 显示编码提示
single_code_input = false # 精确匹配模式(关闭前缀匹配)
single_code_complete = true # 精确匹配空码补全(无候选时从更长编码取首选)
z_key_repeat = true # z 键重复输入
z_key_action = "" # z 键附加功能:空 = 不启用(方案级参数,见下方 Callout)
short_code_yield_level = 0 # 出简让全:0 关 / 2 一二级简码 / 3 全部简码(出厂关)
single_char = false # 单字输入:候选只出单字,不出词(方案可覆盖)
input_chars = "" # 码元字符集:哪些字符可进输入缓冲;空 = a-z
leading_chars = "" # 可作第一码的字符(码元字符集的子集);空 = 与 input_chars 相同| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
top_code_commit | 布尔 | — | true | 顶码上屏:超满码长时取前 N 码首选上屏 |
clear_on_empty_max | 布尔 | — | false | 满码无候选时清空缓冲 |
auto_commit_at_full | 布尔 | — | false | 满码唯一精确时自动上屏 |
auto_commit_min_len | 整数 | ≥ 0 | 0 | 自动上屏最短码长:auto_commit_at_full 从第几码起判定;0 = 等于全码长。设置界面 0.122 新增 开放为「方案 → 码表方案配置 → 上屏行为」的下拉档位,手改 config.toml 可以写下拉里没有的值——比方案全码长还大的值等于把自动上屏整个关掉 |
punct_commit | 布尔 | — | true | 标点触发上屏。关掉是吞键——标点本身也不输出,编码留着继续打。想「废码作废、标点照常出」请用 input.punct_on_empty_behavior,两者不是一回事 |
show_code_hint | 布尔 | — | true | 显示编码提示:给码表前缀候选标出剩余编码(敲 si 时 sikao 标 kao)。与拼音侧的 schema.pinyin.code_hint_source 是两件事,别弄混 |
single_code_input | 布尔 | — | false | 精确匹配模式,关闭前缀匹配 |
single_code_complete | 布尔 | — | true | 精确匹配空码补全:无候选时从更长编码取首选 |
z_key_repeat | 布尔 | — | false(预置为 true) | z 键重复输入 |
z_key_action | 字符串 | "" / none / temp_pinyin / temp_english / mix:<实例id> / special:<方案id> | "" 0.114 新增 | z 键的附加功能:进临时拼音 / 临时英文 / 融合模式 / 特殊模式;"" 与 none = 不启用,z 作正常码元。与 z_key_repeat 正交:重复输入先手,继续打字母才轮到本项。动词语义同 key_actions,字母键让位规则也一致(z 是活码时先当编码) |
short_code_yield_level | 整数 | 0 / 2 / 3 | 0 0.117 新增 | 出简让全:有简码的字在更长编码上把首选让给词组。值 = 对哪几级简码生效。出厂关——「短码首选就是简码」只对五笔这类前缀式简码成立,对别的码表是破坏,故不预设;内置方案(含 wubi86)也不在自己的 [engine.codetable] 里声明它。第三方方案作者可以声明,那属于方案定义的一部分。0.118 的全局出厂值曾是 3 |
single_char 0.121 新增 | 布尔 | — | false | 单字输入:候选只出单字,不出词。只管码表方案,拼音另有一份 schema.pinyin.single_char,取值互不共享。单个码表方案可在自己的 [engine.codetable] 里写同名键覆盖(不写 = 跟随此处) |
input_chars | 字符串 | 范围+字面 | "" | 码元字符集:哪些字符可进输入缓冲。空 = 内置默认 a-z |
leading_chars | 字符串 | 范围+字面 | "" | 可作第一码的字符,须是 input_chars 的子集。空 = 与 input_chars 相同 |
input_chars / leading_chars / z_key_action 实际取方案文件那份
这三个键在本段与方案文件的 [engine.codetable] 段里都存在,但引擎只从方案文件取——它们是方案的引擎固定参数,不是全局行为基线。写在 config.toml 的 [schema.codetable] 下不会生效。z_key_action 按码表在自己的方案文件(或 schema_overrides/<方案ID>.toml)里开。
写法(范围 + 字面)、数字作码元时为何要配 leading_chars、以及码元会从选词键手里抢按键的代价,见方案配置 · 码元字符集。
单字输入 0.121 新增
开启后候选只出单字,不出词。五笔一类的定长码表最用得上:单字恒是全码长,同码的词被滤掉之后「满码唯一即上屏」的成立率大幅提高,可以不看候选窗连续敲;也用于练习拆字、录入人名与古文。
按引擎分成互不共享的两份,因为两边的诉求本就不同:
| 落点 | 管谁 | 方案级覆盖 |
|---|---|---|
schema.codetable.single_char | 所有码表方案 | 有——方案文件的 [engine.codetable] single_char,不写 = 跟随全局 |
schema.pinyin.single_char | 所有拼音类方案 | 无 |
分成两份之后,「五笔只出单字、拼音照常出词」在全局层就表达得了,不必逐方案配。方案级覆盖只给码表:一台机器上常有多张码表、简码体系深浅不同,逐方案配是真实需求;拼音方案通常只有一张。混输方案不必单独写,它跟随自己的主码表方案。
几条边界:
- 「一个字」按字素簇算,不按码位数——
⚽️是 2 个码位但算一个字。 - 短语、命令、快捷输入的候选不受管辖,开着也照常显示。它们是用户自己编写的内容,不是词库里的「词」。
- 与
input.filter_mode是两回事:那个按字的常用度筛,这个按候选长短筛,可以同时生效。 - 英文方案恒不受管辖——英文候选是单词,滤掉就全没了。
- 临时拼音 / 临时英文 / 快捷输入 / 特殊模式各有各的候选装配路径,当前不走这道过滤,别照配置表推断临拼会跟着拼音那一档走。
也可以绑热键随时开关,动词是 single_char(裸写 = 切换,另有 :on / :off / :toggle / :follow),两张按键表通用,见按键功能表。热键切的是临时态,不写配置——重启或切方案后回到这里配的值。
英文候选混入(schema.codetable.english_merge) 0.121 新增
码表方案的候选列表里捎带英文词库候选:打 hello 直接选到 hello,不必切英文方案或走临时英文。
[schema.codetable.english_merge]
enable = false # 总开关
min_length = 3 # 最小触发长度
block_commit = true # 有英文候选时否决满码上屏| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
enable | 布尔 | — | false | 总开关 |
min_length | 整数 | — | 3 | 有中文候选时,编码达到此长度才查英文(0 = 回退 3)。中文候选为空时不受本项约束,2 码起就给英文补全——wi / vi / hi 这类不成音节的串因此不再空码 |
block_commit | 布尔 | — | true | 存在英文候选时否决满码自动上屏 / 顶码上屏 / 满码空码清空。定长码表必须开着:4 码即满码上屏,关掉的话打 github 到第 4 键就被顶出中文,英文永远等不到露面 |
方案可逐项覆盖本段:在方案文件的 [engine.codetable.english_merge] 里写同名字段,不写即跟随全局(与 frequency 同一套三态覆盖)。
「出候选」和「挡上屏」用的不是同一把尺
候选列表里只收精确整串命中——打 githu 不出 GitHub,想打某个词就敲完它,所以英文天然只剩一两条、不会刷屏。而 block_commit 是按前缀判的:打到 gith 时精确命中还不存在,若它也要求精确,五笔满码会在第 4 键就把中文顶上屏,github 永远敲不完。
英文候选的位次由协调器在所有排序(含调频)之后统一定位:插在开头那段连续的中文常用精确解之后、其余候选之前。于是「中文解得好就让位、解不出就上前」是自动的——hen 排在 很/恨/狠/痕 之后,github 排第 1(中文侧无候选)。代价是英文不参与词频学习,换来位次完全确定。
另外,整串恰好是一个英文词时,引擎新合成的整句(词库里没有这个词、由智能组句拼出来的,如 hello → 「和理论哦」)不得排在它前面;有词库背书的候选不受影响(data → 「打他」照旧排在英文之前)。
码表调频(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 策略生效 |
三个策略相关键的生效条件
strategy三档的语义与取舍见词频与候选排序 · 四种调频策略promote_prefix与half_life仅strategy = "position"时生效,其余策略下设置页会置灰half_life的单位是小时,0= 内置 72 小时,见热度衰减半衰期
单个方案要与这份全局基线不同,用 schema_overrides/<方案ID>.toml 的 [codetable] 段覆盖;图形界面入口是方案级码表配置。
英文 [schema.english] 0.114 新增
英文是一个普通的可切换方案,有自己的配置段,不再共用码表那套——此前英文的调频策略挂在 schema.codetable.frequency 下,改它会连带改掉五笔的。设置工具位置:方案 → 英文方案配置。
[schema.english]
commit_space = false # 上屏一个英文词后再补一个空格
raw_candidate = "always" # 首候选是不是所打原文:always / in_dict / off
case_variants = false # 大小写变形候选(全小写/首字母大写/全大写)
case_follow_input = true # 候选跟随输入的大小写(打 Hi 出 Hill)
phrase_seg = false # 词组分词输入:ip'max → iPhone 15 Pro Max
[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 | 上屏一个英文词后自动补一个空格,连续打词不必手动按。生效范围见下 |
raw_candidate | 枚举 0.122 新增 | always / in_dict / off | "always" 0.119 新增 | 把所打原文作首候选钉在词库词之前。英文「输入即内容」,开着调频时某个词会被顶到首位,届时想上屏原文就只剩回车。三档的取舍见首候选给不给原文 |
case_variants | 布尔 | — | false 0.119 新增 | 是否补出全小写/首字母大写/全大写三种形态。每条各占一个候选位,英文方案是长时输入场景,故默认关(临时英文那侧默认开) |
case_follow_input | 布尔 | — | true 0.121 新增 | 词库候选跟随你打的大小写:打 Hi 出 Hill、打 WoW 出 WoWed。只跟大写——输入里的小写位保持词库原文,China / iPhone / Hi-Fi 自带的大写不会被压掉;候选与输入逐位对不上的(短语、命令类)整条保持原样 |
phrase_seg 0.122 新增 | 布尔 | — | 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 按候选来源生效(混输里混进来的英文候选同样按它记账)。两者的完整语义与补空格的边界见英文方案配置。
-
本段同时管辖临时英文 0.118 新增——两者打同一份英文词库,调频是同一套配置、同一份学习数据;临英里选过的词,切到英文方案照样排在前面,反之亦然。补空格自 0.122 起两侧各一份(临英那份是
input.temp_english.commit_space),临英独有的按键语义(字符白名单、空格作输入)同样在input.temp_english段 -
跟随输入大小写也是两侧各一份 0.121 新增——
case_follow_input同样互不影响,但默认都是开。⚠️ 临英由Shift + 字母进入、缓冲首字母恒大写,于是开着它临英候选恒为首字母大写形态;不想要这个观感就单独关掉临英那一侧,词库候选即回到词库原文(大小写仍可由变形候选取到) -
候选面那两个键两侧各有一份 0.119 新增——
raw_candidate与case_variants在schema.english与input.temp_english下各自独立,互不影响,case_variants的默认值还刻意相反(临英true/ 英文方案false)。两个场景不是一回事:临英是「中文里插一个英文词」,首字母大写是刚需;英文方案是长时输入,每条变形都吃掉一个候选位
码表与拼音的记账口径不受 code_scope 影响:码表恒用输入码,拼音恒用候选码,见词频与候选排序 · 记账口径。
首候选给不给原文 0.122 新增
| 取值 | 行为 |
|---|---|
always(出厂) | 所打原文恒作首候选,钉在所有词库词之前 |
in_dict | 仅当所打原文本身就是词库里的词时才作首候选,否则一条都不产,列表是纯词库候选 |
off | 不产原文候选,总是走词库补全;想上屏所打原文按回车 |
in_dict 补的是另外两档各只满足一半的那个缺口:打 hel(词库里没有这个词)时 always 会多出一条占位的 hel;打 hell(词库里有)时 off 又让它被用得更多的 hello 顶下去。in_dict 下这两件事同时成立——不是词库词就不产,是词库词就恒排第一、不受调频影响。
判据按字面,区分大小写
打 usa 时词库里只有 USA,usa 这个字面不在词库中 ⇒ 不产原文候选,USA 成为首选。想上屏小写的 usa,按回车走「上屏原码」。
老配置的 true / false 仍可读入,等价于 always / off。⚠️ 命令行写入侧不再接受布尔,config set 该键时要写三档之一。
词组分词输入 0.122 新增
用 ' 把词组切成几段,每段只打前缀:
| 打 | 得到 |
|---|---|
bue'air | Buenos Aires |
ip'max | iPhone 15 Pro Max |
ip'pro | iPhone 15 Pro(允许跳词,不必写成 ip'15'pro) |
段序必须与词序一致,且首段锚定第一个词——否则 pro 会命中一切含 Pro 的词组,候选直接爆炸。
作用域是英文方案 + 快捷输入里的英文成员(后者用的就是英文方案那个引擎,同一份词库同一套规则);临时英文另有独立的一份开关 input.temp_english.phrase_seg。
开启后 ' 不再是第三候选键
' 要被收进缓冲当分词符,所以它在英文方案下不再作第 3 候选的别名。用数字键 3 代替。这是所有英文方案用户都会察觉的变化,故默认关。
不影响含撇号的词:查询是合并而非劫持,原路径照查——打 o'c 会同时拿到 OS X El Capitan(分词命中)与 o'clock(原路径命中)。
首选保护按码长分级 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)
所有拼音类方案(全拼 / 双拼 / 混输拼音子方案 / 临时拼音反查)共用。除 separator 外无方案级 override——方案文件的 [pinyin] separator 会盖过这里的值,不写则回落到这里。出厂就靠它让全拼与双拼分头处置反引号:全拼拿它当分隔符,双拼拿它进辅助码。
[schema.pinyin]
code_hint_source = "auto" # 编码提示来源:off / codetable / schema / auto
use_smart_compose = true # 智能组词
single_char = false # 单字输入:候选只出单字
separator = "auto" # 分隔策略:auto / quote / backtick / none| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
code_hint_source 0.122 新增 | 字符串 | off / codetable / shuangpin / auto | "auto" | 候选注释里显示哪种编码,见下方 Callout。0.122 之前是布尔键 show_code_hint,升级自动迁移 |
use_smart_compose | 布尔 | — | true | 智能组词 |
`code_hint_source` 的四档
它决定哪一类编码被允许显示,而具体摆在哪、用什么格式,由候选注释模板决定。
| 值 | 放行的变量 |
|---|---|
off | 都不放行 |
codetable | ${code_rev} / ${code_rev_all}(主码表反查) |
shuangpin | ${shuangpin}(双拼编码,全拼方案下也能显示) |
auto(出厂) | 两者都放行,谁先出由模板的回退链决定 |
从旧版升级时,show_code_hint = true 自动迁移为 codetable、false 为 off,行为不变。
想让双拼码显示出来,改成 auto 或 shuangpin。
| single_char 0.121 新增 | 布尔 | — | false | 单字输入:候选只出单字。与码表那份是两件独立的事——拼音没有定长码,开了只是「不出词」,无方案级覆盖,写在这里就够了 |
| separator | 字符串(隐性枚举) | auto / quote / backtick / none | "auto" | 拼音分隔策略。auto = 自动挑一个空闲的符号键(未被选词键、也未被本方案 [key_actions] 占用):先看 ',再看反引号,都不空闲就不启用;quote = 强制 ';backtick = 强制反引号;none = 禁用分隔符。双拼同样支持,但 auto 下不会占键(' 是选词键、反引号归辅助码),要用得显式配 quote |
英文候选混入(schema.pinyin.english_merge) 0.121 新增
口径同码表那份,但取值完全独立——全拼的英文词与拼音串大面积重叠(hen / men / she 既是音节又是英文词),要不要开与码表方案是两个判断。一个总开关只会逼人在「两个都开」和「两个都关」之间二选一。
[schema.pinyin.english_merge]
enable = false
min_length = 3| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
enable | 布尔 | — | false | 总开关 |
min_length | 整数 | — | 3 | 有中文候选时的最小触发长度(0 = 回退 3)。中文候选为空时不受约束 |
本段刻意没有 block_commit:那一项否决的是满码自动上屏与顶码上屏,拼音方案两者都没有——放在这里会是一个恒不生效的开关。拼音侧暂无方案级覆盖。
双拼(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.aux_code) 0.118 新增
在拼音候选上再按字形筛一轮:打出「时间」的拼音后,续敲形码只留字形对得上的候选。本段是全局行为基线;用哪张码表由方案文件的 [engine.aux_code] 段声明,方案也可用同名段逐字段覆盖本节(缺省回落,与方案级码表配置同一套分层)。
[schema.pinyin.aux_code]
enabled = false
max_phrase_len = 0| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
enabled | 布尔 | — | false | 总开关。开启会改变触发键的既有语义并把码表读进内存,故出厂关闭 |
max_phrase_len | 整数 | ≥ 0 | 0 | 词组长度上限:字数大于此值的词组不参与筛选(0 = 不限,单字恒参与)。长词组靠首字前缀容易大量残留,设 4 左右可挡掉 |
开了总开关还要有触发键,两张表都能绑,取决于键的种类:
# 符号键与 z 走这张(键名值域只有它们)
[keys.key_actions]
backslash = "aux_code"
# Tab / PageDown / 方向键那一批走这张
[keys.session_actions]
tab = "aux_code"两条通向同一个功能。方案文件里写同名段即为只对该方案生效(双拼出厂就是
[key_actions] backtick = "aux_code")。
session_actions 还有一个共键写法,让同一个键既能进辅助码又能翻页:
[keys.session_actions]
tab = "aux_code:page_next"语义是「能进辅助码就进、进不去就翻下一页」:第一次按 Tab 进筛选,之后按继续翻页;已经在辅助码里、辅助码没开、方案没配码表,它都退化成纯翻页键;空闲无候选时仍原样交还给应用。
⚠️ 全拼不能绑 `:出厂 separator = "auto" 且 ' 作次选键,于是反引号被判为音节分隔符——绑了也走不到辅助码,内核会为此打一条告警(共键写法在这里则退化成纯翻页键,反引号也就不再是分隔符了)。
模糊音(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 | 布尔 | — | false | zh ↔ z 不分 |
ch_c | 布尔 | — | false | ch ↔ c 不分 |
sh_s | 布尔 | — | false | sh ↔ s 不分 |
n_l | 布尔 | — | false | n ↔ l 不分 |
f_h | 布尔 | — | false | f ↔ h 不分 |
r_l | 布尔 | — | false | r ↔ l 不分 |
an_ang | 布尔 | — | false | an ↔ ang 不分 |
en_eng | 布尔 | — | false | en ↔ eng 不分 |
in_ing | 布尔 | — | false | in ↔ ing 不分 |
ian_iang | 布尔 | — | false | ian ↔ iang 不分 |
uan_uang | 布尔 | — | false | uan ↔ 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.0 | |
recency_peak | 浮点 | — | 0.0 |
两项已成死链,但没有删除
拼音词频从「衰减打分」改为「位置提升」后,base_scale 与 recency_peak 不再有任何消费者。保留而非删除是为了将来若恢复打分模型可直接复用,也避免跨仓改动设置工具的守门测试。写在配置里不会报错,只是没有效果。
模型细节见词库与词频 · 拼音调频:位置提升模型。
拼音词组补全(schema.pinyin.completion)
[schema.pinyin.completion]
min_syllables = 4 # 至少输入几个音节才给词组候选
max_extra_syllables = 5 # 词组最多比输入多几个音节| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
min_syllables | 整数 | 1–6 | 4 0.117 新增 | 至少输入几个音节才给出词组候选;1 = 不限制 |
max_extra_syllables | 整数 | 0–10 | 5 0.117 新增 | 词组最多比已输入内容多几个音节 |
默认值在 0.117 从 2 / 3 调整为 4 / 5。4 对齐 librime 与 fcitx5 各自选定的
预测门槛——输入不足 4 个音节时不预测你没打的内容,zaim 因此不再出现「在美国」这类
比输入长的候选。
两项必须配合调整:召回上限 = started < min_syllables ? started : started + max_extra_syllables。
把 min_syllables 调到 4 却不动 max_extra_syllables,上限只到 7 个音节,
9 音节的「冰冻三尺非一日之寒」在任何输入长度下都召回不到。
两项约束的都是词组补全——即码比输入长、引擎在预测你尚未输入的音节的那些候选。精确匹配、分段子词、整句、简拼一律不受影响,它们没有预测成分。
判据的尺子是输入自身的音节数:完整音节数 +(有未成音节的尾部字母则算起头的一个)。所以 dian 算 1 个音节,dianh 算 2 个。
逐档的候选对照表、「堤岸」为何仍在、以及两项如何配合,见拼音方案配置 · 词组补全。
上下文语言模型(schema.pinyin.grammar) 0.117 新增
整句转换的 n-gram 上下文打分。实验性,尚未正式发布:默认关闭,且模型文件不随安装包分发(许可与体积),需自行获取并放到 data/schemas/pinyin/grammar/ 下。
[schema.pinyin.grammar]
weight = 0.0 # 语言模型权重,0 = 关闭
model = "" # 模型文件名,空 = 不启用| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
weight | 浮点 | — | 0.0 0.117 新增 | 语言模型在整句打分中的权重;0 = 关闭。关闭时不读模型文件、不占内存,整句结果与没有该功能时逐位相同 |
model | 字符串 | — | "" 0.117 新增 | 模型文件名,相对 data/schemas/pinyin/grammar/;空 = 不启用。weight 与 model 两个都要显式配置才生效——只调 weight 不会静默启用某个默认模型 |
拼音自动造词(schema.pinyin.auto_learn)
[schema.pinyin.auto_learn]
enabled = true # 拼音自动造词总开关
# min_word_length = 0 # 造词最小字数,0 = 回退 2
# max_word_length = 10 # 造词最大字数,0 = 不限
# promote_count = 0 # 临时词晋升所需使用次数| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
enabled | 布尔 | — | true | 拼音自动造词总开关 |
min_word_length | 整数 | — | 0 | 造词最小字数;0 = 回退 2 |
max_word_length | 整数 | — | 10 | 造词最大字数;0 = 不限。超出后整体放弃,不截取片段 |
promote_count | 整数 | — | 0 | 临时词晋升所需使用次数 |
自动造词的来源有两类:分步选词(逐段确认组成的词)与智能组句(一次选中引擎合成的
整句)。后者只产生一段,故 max_word_length 对它等价于「超过这个字数就不学」——不会
把长句截成片段入库。学到的词进临时词库,简拼可直接召回;已在用户词库里的词不重复学。
混输(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 = false # 拼音产出简拼候选(声母缩写,nh→你好)
pinyin_partial_candidates = false # 码长内保留「未消费整串」的拼音候选
pinyin_partial_candidates_overflow = true # 超码长时保留同类候选| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
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 | 布尔 | — | false 0.117 新增 | 混输时拼音是否产出简拼候选(声母缩写)。出厂关:开着它会让超码长顶码上屏基本不发生,见下。仅影响混输的拼音子引擎,纯拼音方案不受影响 |
pinyin_partial_candidates | 布尔 | — | false 0.117 新增 | 码长内(输入未超过主码表码长)是否保留未消费整串的拼音候选。关(默认):gedw(五笔精确码「青春」)不再列出 ge 的两百多条同音单字——它们每条只解释了 4 键中的 2 键。代价:码长内没有分步上屏(选一条部分候选先上屏、剩余码接着打)。正在输入中的拼音不受影响:wanl → 「完了」是前缀补全(消费整串),照常出候选 |
pinyin_partial_candidates_overflow | 布尔 | — | true 0.117 新增 | 超码长(输入已超过主码表码长、切入纯拼音语境)是否保留同类候选。开(默认):长拼音是拼音的地盘,nihaom 选「你好」再续打 ma 的分步上屏要留着 |
顶码上屏时,「归属已判给码表」不受本项否决
超码长(编码长度超过码表满码)顶码上屏时,若前 N 码是码表精确全码且拼音与英文都解释不了整串,auto_commit_block_on_pinyin 不再否决——让路给拼音的前提是拼音接得住这一串。
例:五笔拼音混输打 cety(唯一全码「通往」)再按第 5 键,ce 是完整音节但 ty 连音节前缀都不是,拼音只解释了 5 键里的 2 键,于是照常顶码上屏「通往」+ 余码。
block_commit_on_pinyin_word(整串是拼音词时否决)不享受这个例外——它判的是词强度,与归属是两回事。
打开 enable_pinyin_abbrev 会让超码长顶码基本不发生
简拼候选会「消费整串」(cety → 从而同样),于是超码长归属恒判给拼音,由 pinyin_only_overflow 独立拦下顶码——上面两个否决开关都关掉也没用。
这正是 enable_pinyin_abbrev 出厂为 false 的原因:混输用户以码表为主,默认让顶码可用。
不把简拼改成「不算主张整串」是有意取舍:那样长简拼词(如 zgrmghg)会被前 4 码的五笔全码顶码截胡。需要简拼打长词的用户显式打开本项,代价是失去超码长顶码上屏。
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(字面) |
更多用法见快捷输入。
混输模式(mix_modes)
# schema.mix_modes 是数组(对象列表),此处不展开子字段| 键 | 类型 | 说明 |
|---|---|---|
mix_modes | 结构体数组 | 临时混输模式列表(引导键触发,合并多个成员方案的候选)。内置一项 quick_mix 即快捷输入 |
这是每实例配置:同一份列表里的不同条目各有自己的候选来源与 candidate_layout,互不影响。
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 这类内容打不出。数字键 1–9 始终选词,不受本项影响 |
这两项不要写进 data/config.toml
它们的默认值定义在程序内部。系统预置文件 data/config.toml 一旦写出这两个数组,就会整体替换内置默认、把当时的定义冻结成快照——日后版本给内置「快捷」加候选来源或改触发键,都会被这份陈旧快照静默遮蔽。
要改就改用户配置(%APPDATA%\WindInput\config.toml),或直接用设置工具。
相关阅读
对这篇文档有疑问,或发现内容有误?
欢迎到文档仓库提 issue,写明问题时附上本页链接即可。