码表方案配置
五笔等码表方案的全局上屏行为、编码提示、z 键引导、词频调整与自动造词
方案 → 码表方案配置。这里的设置是所有码表方案共享的基线——五笔 86、导入的五笔 98 / 虎码、快符表都读同一份。个别方案要不一样,用方案级码表配置覆盖。
对应配置段是 config.toml 的 [schema.codetable],完整键名与默认值见方案与引擎配置。
码表方案是什么
码表方案按「编码 → 词条」的固定映射出候选,编码由方案的码表文件写死,不做拼音那样的语言模型推断。清风内置的五笔 86(ID wubi86)基于极点五笔码表,最大码长 4:
q → 我(一级简码)
dd → 大(二码简码)
gggg → 王(全码)
ggtt → 五笔(二字词)导入第三方码表(五笔 98、新世纪、虎码等)后也是同一套配置在管。
上屏行为
这一组决定「什么时候自动把候选送出去」:
| 选项 | 说明 | 出厂 |
|---|---|---|
| 全码唯一自动上屏 | 编码唯一精确匹配、且没有更长的后继编码时,直接上屏不必按空格 | 关 |
| 自动上屏最短码长 0.122 新增 | 上一项从第几码开始生效,见下。仅在上一项开启时可调 | 满码(跟随方案) |
| 满码空码清空 | 编码达到最大码长且一个候选都没有时,自动清空缓冲,不必按 Esc | 关 |
| 顶码上屏 | 编码超过最大码长时,自动把前 N 码的首选顶上去,多出来的码留在缓冲继续 | 开 |
| 标点顶码上屏 | 有编码时按标点,先上屏首选再输出该标点 | 开 |
「顶码」是码表方案特有的连打机制
四码方案打第五个字母时,前四码那个字已经确定了——顶码上屏就是把它自动送出去,让你不必按空格断开。关掉它,第五个字母会被当作新一轮编码或被丢弃(取决于方案)。
自动上屏最短码长 0.122 新增
「全码唯一自动上屏」默认只在打满全码时才动手:四码方案得打够 4 码。这一项把门槛往前挪。
| 档位 | 从第几码起判定 |
|---|---|
| 满码(跟随方案) | 方案自己的最大码长(四码方案 = 4 码) |
| 1 码 ~ 5 码 | 就是这个码长 |
门槛只是第一道闸,另外两道照旧:该编码得只有一个精确匹配,且词库里没有以它开头的更长编码。所以调到 2 码并不等于「打两码就走」——gg 底下还有 ggtt 之类后继时仍会等你。真正用得上的是短码即到头的码表:快符表那种最大码长 1 的方案,把门槛设成 1 码就能唯一即上屏。
别设得比方案的全码长还大
下拉里的档位是固定的 1~5,而方案的全码长未必有那么长。设成比它大的值,编码永远够不着门槛,自动上屏就等于整个关掉——界面上却看不出异样。拿不准就用「满码(跟随方案)」。
短语的自动上屏跟着同一个门槛走(同一个开关下,短语与码表的「满码」规格必须一致),方案里另设的码表覆盖同样适用。
常用功能
| 选项 | 说明 | 出厂 |
|---|---|---|
| 显示编码提示 | 候选旁显示该词的完整编码。打 gg 时「王」旁边显示剩下的 gg,帮你记全码 | 开 |
| 精确匹配模式 | 只显示编码完全等于你打的那些候选,不再显示前缀补全的长词 | 关 |
| 精确匹配空码补全 | 精确匹配模式下若一个候选都没有,自动从更长编码里取首个候选顶上,避免空码。仅在上一项开启时可用 | 开 |
| z 键重复输入 | 打 z 时首选是上一次上屏的内容,快速重复 | 开 |
| z 键引导功能 | 见下 | 不启用 |
| 出简让全 0.117 新增 | 见下 | 关闭 |
| 单字输入 0.121 新增 | 只出单字。同码没有词来争首选,满码唯一即可直接上屏,不必看候选窗。见下 | 关 |
精确匹配模式适合谁
默认(关)时,打 gg 会同时出精确匹配的「王」和前缀补全的 ggtt「五笔」等长词。开启后只剩精确匹配的,候选干净、位置稳定,适合已经打熟、靠肌肉记忆盲打的用户;代价是失去「打半个码就看到长词」的便利。
「精确匹配空码补全」是它的安全网:某个编码在词库里恰好没有精确条目时,不至于面对空候选卡住。
z 键引导功能
z 在五笔 86 里是死码(不参与任何编码),可以借来当引导键。空码状态下按 z 直接进入所选模式:
z 有三重身份,冲突时按固定顺序裁决
z 键重复输入、z 键引导功能、以及「z 是本方案的活码前缀」三者共用一个键。运行时的裁决顺序是:z 是本方案活码 > 「z 键重复输入」开着且有上屏历史 > 引导功能。
所以在 z 参与编码的方案(如某些三码方案)上配引导功能不会生效;在五笔 86 上则要先关掉「z 键重复输入」,引导功能才有机会拿到这个键。
其它引导键(符号键)在临时拼音 / 临时英文 / 快捷输入各自的触发键设置里配——那三处只收符号键,字母键统一走这一项。
出简让全 0.117 新增
一个字如果有简码,打全码时就不该再占着首选——那个位置留给词组更划算。
以五笔的「大」为例,它的一简是 d:
| 你打的 | 关闭 | 全部简码 |
|---|---|---|
d | 大 | 大 |
dddd | 大、大厦、硕大、磕磕碰碰 | 大厦、硕大、磕磕碰碰、大 |
打一个键就能出「大」,那么打满四码时再把它摆在第一位只是浪费一次翻页。让位之后「大」不会消失,而是沉到该编码所有候选之后——它已经有更短的打法了。
档位说的是「简码算到第几级」,它同时决定两件事:哪些字让位,以及从第几码开始让:
| 档位 | 哪些字让位 | 从第几码开始让 |
|---|---|---|
| 关闭 | 都不让,完全按词库顺序 | — |
| 一、二级简码 | 有一简或二简的字 | 3 码 |
| 全部简码 | 有一到三简的字 | 4 码 |
两档的差别落在只有三简、没有更短打法的字上:选「全部简码」,它们在全码位让位;选「一、二级简码」,它们不在范围内,全码位仍保留首选。
代价是后者让得更早——一简、二简的字从三简位就开始让位了。想让三简位也保持词库原样,选「全部简码」。
出厂关,要用请自己开
「有简码的字,短码首选就是它自己」这个前提只对五笔这类前缀式简码成立。别的码表(词频码、 二三重码表等)的短码首选是作者按频次排定的常用字,让位会把它们沉到底——所以这一项出厂是关的, 内置的五笔方案也一样,不替你做主。词库侧同理:发行的五笔词库保留极点上游排定的候选次序, 没有在生成阶段做过任何让位。
用五笔并且想要这个功能,在上面那个下拉里选「全部简码」就行——这里改的是全局,对所有码表方案生效。 只想给其中一个方案开,用方案级码表配置:勾上「出简让全」 那一行单独设,没勾时那一行显示的是它当前跟随的档位。
0.118 升级到 0.119 的用户
0.118 这一项的出厂值是「全部简码」。如果你当时没动过它,升级后它会变成关闭,候选顺序会有变化—— 按上面的说明开回来即可。当时主动设成「关闭」或「一、二级简码」的,设置保留不变。
没有词组接手时不让位
让位的前提是该编码下确实有词组可以顶上。若一个编码只有单字候选,首选原样不动——不会为了让位而把另一个生僻字推到前面。
键名汉字不设豁免
上面的 dddd 正是五笔的 25 个键名汉字码之一(aaaa = 工、ffff = 土……)。它们按同一条规则让位,没有例外。若你依赖打满四码出键名汉字,把档位调到「关闭」。
单字输入 0.121 新增
开启后候选只出单字,不出词。
五笔一类的定长码表最用得上:单字恒是全码长,同码的词被滤掉之后「满码唯一即上屏」的成立率大幅提高,可以不看候选窗连续敲;练习拆字、录入人名与古文时也用得着。
几条边界:
- 短语、命令、快捷输入的候选不受管辖,开着也照常显示——它们是你自己写的内容,不是词库里的「词」。
- 与候选检索范围是两回事:那个按字的常用度筛,这个按候选长短筛,可以同时生效。
- 「一个字」按显示上的一个字算,
⚽️这类由多个码位组成的图形也算一个。 - 拼音方案另有自己的一份开关,取值互不共享——「五笔只出单字、拼音照常出词」在全局层就配得了。
- 临时拼音、临时英文、快捷输入、特殊模式各有各的候选路径,当前不走这道过滤。
这一项可以逐方案覆盖:一台机器上常有多张码表、简码体系深浅不同。也可以绑一个热键随时开关(动词 single_char,见按键功能表),热键切的是临时状态,重启或切方案后回到设置里的值。
英文候选 0.121 新增
码表方案的候选列表里捎带英文词库候选:打 hello 直接选到 hello,不必切英文方案、也不必走临时英文。适合常打命令行与变量名的用户。
| 选项 | 说明 | 出厂 |
|---|---|---|
| 启用英文候选 | 同时查询英文词库并显示英文候选 | 关 |
| 英文最小触发长度 | 有中文候选时,编码达到此长度才查英文(0 = 默认 3) | 3 |
| 有英文候选时否决满码上屏 | 满码自动上屏前若存在英文候选则不自动上屏 | 开 |
整串恰好是一个英文词时才混入——打 githu 不出 GitHub,想打某个词就敲完它。收窄到精确之后英文天然只剩一两条,不会刷屏。
「最小触发长度」只约束「中文侧有候选」那一路。中文候选为空时不受它约束,2 码起就给英文补全——wi / vi / hi 这类不成音节、中文一条也给不出的串,因此不再是空码。
定长码表请让「否决满码上屏」开着
五笔 4 码即满码上屏。关掉它,打 github 到第 4 键就被顶出中文,英文永远等不到露面。
英文候选的位次是自动的:中文解得好就让位、解不出就上前。hen 排在 很/恨/狠/痕 之后,github 排第 1(中文侧本来就没候选)。代价是英文不参与词频学习——选多少次它的位置都由上面这条规则决定。
词频调整
先读原理再调参数
这一组的每个选项都建立在「词频与权重是两个独立维度」之上。三种策略的取舍、首选保护为什么按码长分级、提升为什么跨不出档位——完整说明见词频与候选排序。本节只讲每一项的界面含义。
| 选项 | 说明 | 出厂 |
|---|---|---|
| 启用词频调整 | 总开关。关闭后候选顺序完全由词库权重决定 | 关 |
| 调频策略 | 置顶 / 步进 / 位次渐进,见下 | 置顶 |
| 补全词参与调频 | 前缀补全出来的候选是否参与提升。仅「位次渐进」下可用 | 全部 |
| 热度衰减半衰期 | 使用记录衰减到一半所需的小时数,0 = 内置 72 小时。仅「位次渐进」下可用 | 0 |
| 一简位保护前 N 项 | 只打 1 个编码时,词库前 N 项不参与调频 | 1 |
| 二简位保护前 N 项 | 打 2 个编码时同上 | 1 |
| 三简位保护前 N 项 | 打 3 个编码时同上 | 0 |
| 全码位保护前 N 项 | 打 4 个及以上编码时同上 | 0 |
三种调频策略 0.114 新增
| 策略 | 语义 | 适合 |
|---|---|---|
| 置顶 | 用过一次即排到「没用过的那批」之前,已用过的按最近使用时间排 | 想立竿见影、不怕误选 |
| 步进 | 同样是「用过优先」,已用过的内部按累计次数排 | 想抗一点误选 |
| 位次渐进 0.114 新增 | 每用一次目标位次前移一半(第 8 位 → 4 → 2 → 1),久不用按半衰期回落 | 想平滑、误选代价小 |
「置顶」与「步进」的本质是同一个:布尔的「用过优先」——只要用过一次就整体跳到未用过的之前,策略只决定已用过的内部怎么排。好处是立竿见影,代价是一次误选就把词顶到很显眼的位置,且码表侧的「用过」永不衰减。
「位次渐进」没有这道台阶,用连续的位次表达强弱,误选一次只前移一档;也是唯一带时间衰减的策略,所以「补全词参与调频」和「热度衰减半衰期」两项只在它下面可用,其余策略下会置灰。
三者都不会破坏「五笔优先」:提升只在同一来源档内发生,补全词再怎么用也跨不到精确全码之前。
简码位的首选保护 0.113 新增
首选保护按本次输入的码长分成四档,出厂即为「一简二简保护、三简与全码放开」。
五笔的一简是肌肉记忆的核心,而 25 个一简编码每个都是二选一(a → 工 / 戈、s → 要 / 五……)。调频只看「有没有被选过」、不看词库权重,因此不保护的话,误选一次次选字就会永久换掉首选。分档之后简码位保住词库钦定的首选,全码位仍可正常调频——那里才是调频该起作用的地方。
保护名额只在精确匹配的候选里取,不足则少保护,不会把前缀补全的长词一并钉死。
0.112 及以前开过调频的用户需手动改一项
旧版只有一个 protect_top_n,出厂值是 1;开过调频的用户配置里冻结着这个值,升级后全码位仍被锁死。请把「全码位保护前 N 项」改为 0。三个新增的简码档不受影响,自动按新默认生效。
自动造词
连续上屏的单字会被自动组成词条,算出编码后存入临时词库,此后可直接用该编码打出。
| 选项 | 说明 | 出厂 |
|---|---|---|
| 启用自动造词 | 总开关 | 关 |
| 转入用户词库次数 | 该临时词用满几次后收录进用户词库;0 = 不收录,一直留在临时词库 | 0 |
拼音方案不适用
本节只涉及码表方案与混输方案的码表侧。拼音方案用的是「选词即学」,开关在拼音方案配置 → 自动学习,两者互不影响。
累积与终止
引擎维护一个连续单字缓冲:每上屏一个汉字单字即追加,遇到终止信号则取出已累积的序列尝试造词,随后清空。
只有汉字单字会进入缓冲。混输方案下由拼音打出的单字同样计入,因为造词时的编码由词组编码器按字重新计算,与该字的输入来源无关。
终止信号有七种:
| 信号 | 说明 |
|---|---|
| 上屏多字词 | 选中词组即表明当前不是散字序列。该词组本身不进入缓冲 |
| 上屏非汉字 | 标点、英文、数字、空格。该字符本身也不进入缓冲 |
| 回车 | |
| 切换中英文模式 | |
| 切走输入法或窗口失去焦点 | |
| 移动光标 | 插入点改变后,已累积的字与后续输入不再连续 |
| 距上一个字超过 5 秒 | 见下 |
超时的处理与其余六种不同:它先将旧序列取出造词,再以当前字开启新序列,而非丢弃。此举用于避免跨句拼接,例如间隔十分钟的两次「加好」不会被拼成「加好加好」。间隔阈值由 idle_timeout_ms 控制,0 表示取默认值 5000 毫秒。
造词条件
取出的序列还需满足四项条件,任一不满足则整词作废。
长度 —— 少于 2 字不造词;超过 5 字同样不造词,且是整体放弃而非截取末尾若干字。在连续 8 字的中间切分,结果多半不成词,是杂词的主要来源。上下限为 min_phrase_len(默认 2)与 max_phrase_len(默认 5),均未在设置界面暴露。
取码 —— 按方案文件 [[encoder.rules]] 定义的词组编码器规则,从各字的编码推导词条编码。
取码失败是自动造词不生效的最常见原因
只要序列中有一个字在码表里取不到全码,整词即作废。生僻字、扩展词库中的字往往只有词条而无全码,含这类字的序列不会产出词条。开启 debug 日志可看到失败的具体词条。
查重 —— 若「编码 + 词条」在系统词库或用户词库中已存在则跳过,避免候选出现重复项。
归属 —— 混输方案下,出码与入库均使用主码表方案。因此在混输中造出的词,切回纯码表方案后同样可用。
存储与晋升
新词条写入临时词库,初始权重 800,即时可用。
重复造出同一词条不会重复入库,而是将其使用计数加一,权重不再增长。计数达到「转入用户词库次数」后自动转入用户词库;该项为 0 时不会自动转入,词条一直留在临时词库,可在词库页手动转正、删除或清空。
临时词库默认保留 5000 条(temp_max_entries,0 表示不限),超出时删除权重最低的若干条。检查按写入次数节流,每造词 64 次执行一次,故实际条数可能短暂略高于上限。
排查
将日志级别调至 debug,日志中 auto-phrase: 开头的记录覆盖整条链路:终止信号及其原因、取码失败及具体词条、查重跳过、造词成功及计数、临时词库淘汰。排查完毕后调回 info。
隐藏字段 min_phrase_len / max_phrase_len / idle_timeout_ms / temp_max_entries 的取值范围见配置参考。
相关页面
对这篇文档有疑问,或发现内容有误?
欢迎到文档仓库提 issue,写明问题时附上本页链接即可。