引导键特殊模式
用引导键临时进入自建小码表(快符、生僻字等)的配置方法、退出条件与候选行为
在码表方案下,按一个「引导键」临时进入另一套独立的小型码表,完成后自动退出回到原方案。常见用途:快速符号(俗称「快符」)、生僻字、专业术语缩写等。它属于 [schema] 域的 [[schema.special_modes]]:方案文件与词库要自己准备,引导键与码表行为则可以在设置工具里配。
特殊模式默认为空,需要你自己配置
schema.special_modes 出厂是空列表,安装后没有任何可用的特殊模式——包括「快符」。它不是一个开箱即用的功能,而是一套让你自建小码表的机制。
启用需要你准备两样东西:config.toml 里的 [[schema.special_modes]] 配置块,以及它引用的方案文件与词库。唯一预置的引导键模式是 ; 触发的「快捷」混输模式,见快捷输入。
引导键可以在设置工具里配
方案文件准备好之后,引导键这一项不必手写:在方案页勾选「显示特殊方案」让它出现在列表里,选中后 设置 → 进入方式 → 引导键 即可勾选。设置工具会按需新建 [[schema.special_modes]] 条目,并保留你手写的其它字段。
条目的其余字段(show_all_on_enter、candidate_layout、注释模板等)仍需手写。
工作原理:
- 按下配置的引导键(如
\)进入对应特殊模式:编码为空时直接进入;已有候选时先上屏当前高亮候选,再进入模式 - 候选窗口显示模式徽标(如「快符」),此时输入的字符在该模式的码表中检索
- 上屏一个候选后自动退出,回到原方案;也可按
Esc手动退出
若引导键引用的方案加载失败,该键不会被拦截,会按普通标点处理——这是判断配置是否生效的快捷方法:按下引导键却打出了标点,说明方案没加载上。
和快捷输入的区别
快捷输入(; 触发)内置了数字转换、计算器、日期等功能,使用内置逻辑处理;特殊模式则是完全自定义的码表,适合放置任意词条,更灵活。
配置
特殊模式通过全局配置文件 config.toml 的 [[schema.special_modes]] 数组配置,可定义多组。每个特殊模式条目只描述「用哪个引导键、显示什么名字、触发哪个方案」,真正的码表和全码上屏策略都定义在被引用的方案文件 <方案id>.schema.toml 里。
[[schema.special_modes]]
id = "quick_symbols" # 模式唯一 ID(必填)
name = "快符" # 候选窗口显示的模式名(必填)
short_name = "符" # 模式指示短称(可选;留空取 name 首字)
trigger_keys = ["backslash"] # 引导键列表(必填,至少一个)
schema = "quick_symbols" # 引用的方案 id(必填)
hotkey = "" # 专用直达热键(可选,如 "ctrl+shift+u";空=不注册)
show_all_on_enter = false # 进入模式即展示候选(可选,默认 false,见下文)
candidate_layout = "follow" # 候选窗布局(可选,默认 follow,见下文)引导键取键名,支持常用符号键,也支持单个字母 a–z:
| 键名 | 按键 |
|---|---|
backslash | \ |
backtick / grave | ` |
semicolon | ; |
quote | ' |
comma | , |
period | . |
slash | / |
lbracket | [ |
rbracket | ] |
minus | - |
equal | = |
按键冲突
若引导键已被次选键、临时拼音等功能占用,设置工具会提示冲突。同一个键只能分配给一项功能。
多个特殊模式按配置顺序匹配,首个命中者生效——两个模式配了同一个引导键时,后面那个永远进不去。
退出方式
特殊模式的退出条件比"选中候选"要多,完整清单:
| 操作 | 行为 |
|---|---|
| 选中候选(空格 / 数字键 / 次选键) | 上屏并退出 |
Esc | 丢弃输入,退出 |
| 退格 / 删除把编码删空 | 退出(编码已空时按退格也退出) |
| 空格且当前无候选 | 退出 |
Enter 且编码非空 | 上屏编码原文 |
Enter 且编码为空 | 上屏引导符本身并退出(回车行为设为「清空」时则只退出) |
| 再按一次引导键(编码为空时) | 输出该标点并退出 |
| 输入其他标点 | 上屏当前高亮候选 + 转换后的标点,退出 |
| 切换焦点 / 切换模式 | 自动退出 |
此外,被引用方案的全码策略触发时会自动上屏并退出,见下文自动上屏策略。
直达热键
除引导键外,每个特殊模式还可配置一个专用直达热键(hotkey,形如 "ctrl+shift+u"),与引导键共存:按热键直接进入该模式,且组合区不写入引导符(引导键进入时首位是引导符,热键进入则从空编码开始)。仅中文模式下生效。
自动上屏策略
特殊模式输入时是否自动上屏,由被引用方案的 [engine.codetable] 全码策略决定,与该方案作为普通方案使用时一致:
- 全码唯一自动上屏:候选唯一且无更长前缀时自动上屏,适合符号、常用词
- 固定码长自动上屏:达到指定码长且候选唯一时自动上屏,适合定长码表
- 手动选择:始终按数字 / 空格选择,适合需要精确控制时
被引用的方案不会出现在正常的方案切换列表中,只在按下引导键时懒加载触发。方案文件与码表词库的写法见输入方案管理。
精确匹配与空码补全
特殊模式的候选检索是否走精确匹配、以及空码时是否补全后续编码,同样由被引用方案的 [engine.codetable] 决定,规则与该方案作普通方案时完全一致(见码表引擎配置):
single_code_input:精确匹配模式,关闭前缀枚举,只显示编码完全匹配的候选single_code_complete:精确匹配下当前编码无精确候选、但更长前缀有候选时,补一条「首位后续码」。任意未满码长都会补(不限某个具体码长),只有打满全码仍无候选时才不补
这些项在设置工具里也能配
不必手写:在方案页勾选「显示特殊方案」,选中该方案 → 设置 → 码表配置,打开「自定义码表配置」即可逐项调整(顶码上屏、精确匹配、调频等)。见方案级码表配置。
写进的是用户覆盖层 schema_overrides/<方案id>.toml,与本页说的 [engine.codetable] 是同一组字段、同样的语义。
特殊方案不继承全局码表配置
特殊方案(方案文件标了 hidden = true 的那些)折叠 [engine.codetable] 时以内置默认值为基线,不叠加全局 schema.codetable。它们是几十条的小符号表,而全局基线是按五笔那种数万条全码表调的——共用一份的后果是「改五笔的精准匹配,快符跟着变」,而改的人根本意识不到自己动了另一个表。
所以设置工具里对五笔开启的「精准匹配」不会流到特殊模式,特殊模式也不会拿到全局的 punct_commit、z_key_repeat 等出厂值。要什么就在它引用的方案上显式写:方案文件 <方案id>.schema.toml 的 [engine.codetable] 段,或用户覆盖层 schema_overrides/<方案id>.toml 的 [codetable] 段。
特殊方案没写时用的基线,与全局出厂值只有一处不同:
| 字段 | 特殊方案基线 | 全局出厂值 |
|---|---|---|
top_code_commit | true | true |
punct_commit | true | true |
single_code_complete | true | true |
single_code_input | false | false |
show_code_hint | true | true |
z_key_repeat | false | true |
z_key_repeat(z 键重复上一次上屏)对小符号表没有意义——z 在那里多半是个正经编码,故基线关掉它。
其余项与出厂值一致:「不继承全局」的意义是你改了全局之后特殊方案不跟着变,而不是让它的出厂表现与普通方案不同。需要与基线不同的就显式写:
[engine.codetable]
single_code_input = true进入即展示候选
默认情况下,进入特殊模式后候选窗为空,敲入编码才出候选。把该模式的 show_all_on_enter 设为 true,则一进入就展示被引用方案码表的候选,可直接翻页浏览——适合快符、生僻字分类符号这类小码表。
展示数量遵循该方案的 single_code_input:
- 非精确匹配模式:展示码表首页候选,按每页候选数分页浏览
- 精确匹配模式:最多展示 1 条(与
single_code_complete「取首位后续码」同语义)
仅宜小码表
show_all_on_enter 面向小符号表。若引用的是大码表(成千上万条),进入时会遍历整表取首页,有一定开销,不建议开启。
候选窗布局
candidate_layout 决定进入本模式期间候选窗的排列方向,退出后自动恢复:
| 取值 | 含义 |
|---|---|
follow(默认) | 跟随全局 ui.candidate.layout——你改全局,本模式跟着改 |
vertical | 本模式期间强制竖排 |
horizontal | 本模式期间强制横排 |
每个特殊模式各设各的:快符表可以竖排、生僻字表可以横排,互不影响。
follow 与 vertical 的区别只在全局本身是竖排时才显现——前者跟着全局变,后者恒定竖排。搭配 show_all_on_enter = true 时通常设 vertical:一进入就铺开的符号表,竖排一屏能看到更多条目。
这是所有模式共用的机制
临时拼音、临时英文、快捷输入也各有同名的 candidate_layout,取值与语义完全一致,只是那三个在设置工具里有下拉可选。特殊模式因为是用户自建的列表,这一项只能在配置文件里写(引导键除外,见页首)。
候选行为
特殊模式的候选与主方案完全隔离:
- 调频与候选调整归属特殊方案自身 —— 见下方调频
- 不做简繁变体展开 —— 即使开启了简繁转换,特殊模式的候选也不会展开繁体变体(临时拼音与快捷输入模式则会)
调频
特殊模式的词频记账、候选调整(置顶/删除)、用户词库都记在被引用方案自己名下,与主方案互不干扰——它与五笔是同一层级的东西,只是用特殊按键进入。
所以设置工具的词库管理里能直接选中特殊方案,管它自己的用户词库、词频与候选调整。
默认不开。小符号表的顺序往往是作者精心排过的,调频会打乱它。
要开,在设置工具里是 选中方案 → 设置 → 码表配置 → 自定义码表配置 → 设置 → 词频调整;手写则是被引用方案的 [engine.codetable.frequency] 段:
[engine.codetable.frequency]
enabled = true
strategy = "position" # 建议:每用一次前移一半,久不用回落该段逐字段稀疏:写出来的覆盖基线,没写的跟随。取值语义与码表调频完全一致。
这是所有码表方案都有的能力
[engine.codetable.frequency] 不是特殊方案专属——任何码表方案都能用它给自己单独设一套调频。普通方案的基线是全局 schema.codetable.frequency,特殊方案的基线是内置默认。
想调整的是初始顺序而非使用频率,用该方案自己的 base_sort / base_order / default_weight。
引导符只作显示,不参与检索:按 \ 后输入 bd,查询的是 bd 而不是 \bd。
词库条目里的 $CC / $AA / $SS 语法在特殊模式下同样有效,见命令直通车。