引导键特殊模式
用引导键临时进入自建小码表(快符、生僻字等)的配置方法、退出条件与候选行为,含 0.115.0 配置格式变更的迁移对照
在码表方案下,按一个「引导键」临时进入另一套独立的小型码表,完成后自动退出回到原方案。常见用途:快速符号(俗称「快符」)、生僻字、专业术语缩写等。
配置分两处:方案文件的 [overlay] 段声明「本方案可被临时叠加进入」并描述进入期间的表现;引导键与直达热键写在 config.toml 的 [keys].key_actions。方案文件与词库要自己准备。
- 只想打冷僻汉字、emoji 或各类符号的,不必自建——用生僻字模式 0.120 新增,它直接拿当前方案的编码来打,绑个键就能用。
快速开始:装一个现成的快符表 0.118 新增
这是一个可直接使用的符号表示例:按反斜杠键呼出,候选窗列出整张表,再按一个键选中符号上屏,随即自动回到原方案。三种装法任选,效果相同——都会先弹确认框列出要装的文件和要改的配置,看清楚再决定。
方式一:一键链接
点击这个链接,浏览器会唤起设置程序并进入导入确认:
链接点了没反应,通常是 windinput:// 协议未注册——到设置 → 高级 → 系统集成看协议状态。便携版不注册协议,请改用下面两种方式。
方式二:下载文件
下载 quick_symbols-1.0.wpkg 后双击(需先注册 .wpkg 文件关联),或在**设置 → 高级 → 导入 → 导入文件…**里选它。
方式三:复制文本
整个方案(方案文件 + 符号表 + 引导键配置)也可以是一段纯文本。全选复制下面这段,到设置 → 高级 → 从剪贴板导入配置,点「校验预览」即可——不必读懂内容,它就是上面那个包的文本形态。
[package]
format_version = 2
kind = "schema_text"
title = "快符示例 · 引导键符号表"
description = '''
按引导键呼出的符号表:常用标点、书名号与各类括号,按一个键选中即上屏。
配对符号(如「」『』)上屏后光标自动落到中间。
导入后会把反斜杠键设为引导键,你已有的其他按键绑定不受影响。
'''
[schema]
id = "quick_symbols"
version = "1.0"
[[files]]
path = "quick_symbols.schema.toml"
content = '''
[schema]
id = "quick_symbols"
name = "快符示例"
icon_label = "符"
version = "1.0"
author = "内置"
description = "快符特殊模式"
# 隐藏方案:不在设置页「方案管理」列出。
hidden = true
# ── overlay 激活面 ──
[overlay]
kind = "special"
show_all_on_enter = true
candidate_layout = "follow"
[engine]
type = "codetable"
[engine.codetable]
# 最大码长,影响自动上屏,配置为1仍然支持更长码长
max_code_length = 1
# 符号无权重,按码表出现序。
base_sort = "natural"
# 自动上屏
auto_commit_at_full = true
# 自动上屏长度为1,如果 max_code_length > 1,配置这个可以保证唯一时上屏
auto_commit_min_len = 1
# 精确匹配模式,按需配置
single_code_input = true
# 精确匹配模式候选为空时,补全下一个
single_code_complete = true
# z 键不做重复。
z_key_repeat = false
[[dictionaries]]
id = "symbols_main"
label = "快符表"
path = "special/symbols.dict.yaml"
type = "rime_codetable"
default = true
base_order = 0
'''
[[files]]
path = "special/symbols.dict.yaml"
content = '''
---
name: special_symbols
columns:
- code
- text
...
i $CC("‘’", ime.pair("‘", "’"))
m :
q :“
w ?
e (
r )
t @
y 《
u 》
o $CC("「」", ime.pair("「", "」"))
p $CC("『』", ime.pair("『", "』"))
a !
s ……
d 、
f $CC(last(), type(last()))
g ·
h $CC("《》",ime.pair("《", "》"))
j $CC("“”",ime.pair("“", "”"))
k $CC("()", ime.pair("(", ")"))
l $CC("〔〕", ime.pair("〔", "〕"))
z “
x 1
x 2
x 3
x 4
x 5
x 6
x 7
x 8
x 9
x 0
c ”
v ——
b $CC("⎵", type(" "))
n $CC("[End]", key.seq("End"))
'''
[[files]]
path = "config_patch.toml"
content = '''
[package]
title = "接上引导键"
description = "把反斜杠键设为快符表的引导键。按键功能表是逐条并入的,你已有的其他绑定都会保留。"
[keys.key_actions]
backslash = "special:quick_symbols"
'''装完之后
按一下反斜杠键,候选窗出现「符」徽标并列出整张表,按对应键即可上屏。除了插入符号,这张表还演示了特殊模式能做的几类事:
| 按键 | 效果 | 用到的能力 |
|---|---|---|
m w a d | : ? ! 、 | 直接插入符号 |
o p j k | 「」『』“” () | ime.pair() 插入配对符号并把光标放中间 |
x | 1 2 3 … 0 | 一个编码对应多个候选,按数字键选 |
f | 重复上次上屏的内容 | last() + type() |
n | 光标跳到行尾 | key.seq("End") 发送按键 |
这三个文件都能照着改:
| 装了什么 | 落到哪里 | 改它做什么 |
|---|---|---|
quick_symbols.schema.toml | %APPDATA%\WindInput\schemas\ | 改模式徽标、候选排列、上屏行为(见下文配置) |
special/symbols.dict.yaml | 同上 | 改符号表内容:一行一个「编码 + Tab + 内容」 |
引导键 backslash = "special:quick_symbols" | config.toml 的 [keys.key_actions] | 换成别的键;也可在设置 → 按键设置 → 引导键里改 |
它不会动你已有的配置
按键功能表是逐条并入的:这个包只写 backslash 一条,你原有的其他按键绑定原样保留。导入确认框里会逐项列出「当前值 → 新值」,看清楚再点。
想从零自建、或想知道每个字段的含义,继续往下读。
除了 [overlay] 段本身,其余都能在设置工具里配
方案文件写好 [overlay] 段之后,在方案页勾选「显示特殊方案」让它出现在列表里,选中后:
- 引导键 / 直达热键:设置 → 按键设置 → 引导键
- 进入即展示候选、候选排列:同一个对话框的 特殊模式 一节
「特殊模式」这一节只在方案已声明 [overlay] 时出现——「是不是特殊方案」是方案的固有属性,由方案文件决定,不是随手勾选的开关。所以第一次必须手写方案文件,之后才有图形界面可用。
注释模板两项没有图形界面,始终需要手写。
工作原理:
- 按下配置的引导键(如
\)进入对应特殊模式:编码为空时直接进入;已有候选时先上屏当前高亮候选,再进入模式 - 候选窗口显示模式徽标(如「快符」),此时输入的字符在该模式的码表中检索
- 上屏一个候选后自动退出,回到原方案;也可按
Esc手动退出
若引导键指向的方案不存在、未声明 [overlay] 或加载失败,该键不会被拦截,会按普通标点处理——这是判断配置是否生效的快捷方法:按下引导键却打出了标点,说明方案没接上。
和快捷输入的区别
快捷输入(; 触发)内置了数字转换、计算器、日期等功能,使用内置逻辑处理;特殊模式则是完全自定义的码表,适合放置任意词条,更灵活。
配置
一、方案文件声明 [overlay] 0.115 新增
在 <方案id>.schema.toml 里加一段 [overlay]。段存在即声明「本方案可被临时叠加进入」——它同时是特殊模式列表的枚举依据:没有这一段的方案,配了引导键也进不去。
# quick_symbols.schema.toml
[schema]
id = "quick_symbols"
name = "快符" # 候选窗口显示的模式名
icon_label = "符" # 模式指示短称(留空取 name 首字)
hidden = true # 不出现在方案切换列表里(见下文)
[overlay]
show_all_on_enter = false # 进入模式即展示候选(可选,默认 false,见下文)
candidate_layout = "follow" # 候选窗布局(可选,默认 follow,见下文)模式的名字与短称直接取该方案自己的 [schema] 元信息,不再另写一份。真正的码表与全码上屏策略仍在同一个方案文件的 [engine.codetable] 里,与该方案作普通方案使用时完全一致。
字段清单见方案文件 · overlay 段。这一段也可以写进用户覆盖层 schema_overrides/<方案id>.toml——设置工具改的就是那里,方案文件本身不动。
二、config.toml 绑引导键
[keys.key_actions]
backslash = "special:quick_symbols" # 引导键:\ 进入快符
"ctrl+shift+u" = "special:quick_symbols" # 直达热键(可选)key_actions 是「键 → 干什么」的通用表,特殊模式只是它的动词之一,完整值域见按键功能表。动词写作 special:<方案id>,冒号后面就是上一步那个方案的 id。
表以键为主键,一个键只能有一个动作——所以不存在「两个模式抢同一个引导键」的情况,配置文件层面就消解了。
引导键取键名,支持这些常用符号键:
| 键名 | 按键 |
|---|---|
backslash | \ |
backtick / grave | ` |
semicolon | ; |
quote | ' |
comma | , |
period | . |
slash | / |
lbracket | [ |
rbracket | ] |
minus | - |
equal | = |
别用字母键进特殊模式
字母键要写进方案级 [key_actions](字母能不能借用取决于码表),且只有在该码表里是死码时才进得去——是活码就让位给正常输入。
z 尤其不行:出厂自带 37 条 zz 开头的标点短语,它在任何方案里都是活码;而 special: 是唯一没有夺取回路的动词,让位一次就等于永久进不去。详见字母键的让位规则。
特殊模式请用 \、` 这类在码表里不产出编码的符号键。
按键冲突
若引导键已被次选键、翻页键、临时拼音等功能占用,设置工具会提示冲突。同一个键只能分配给一项功能。
退出方式
特殊模式的退出条件比"选中候选"要多,完整清单:
| 操作 | 行为 |
|---|---|
| 选中候选(空格 / 数字键 / 次选键) | 上屏并退出 |
Esc | 丢弃输入,退出 |
| 退格 / 删除把编码删空 | 退出(编码已空时按退格也退出) |
| 空格且当前无候选 | 退出 |
Enter 且编码非空 | 上屏编码原文 |
Enter 且编码为空 | 上屏引导符本身并退出(回车行为设为「清空」时则只退出) |
| 再按一次引导键(编码为空时) | 输出该标点并退出 |
| 输入其他标点 | 上屏当前高亮候选 + 转换后的标点,退出 |
| 切换焦点 / 切换模式 | 自动退出 |
此外,该方案的全码策略触发时会自动上屏并退出,见下文自动上屏策略。
直达热键
除引导键外,还可给特殊模式配一个专用直达热键——在同一张 key_actions 表里把键名写成组合键即可,与引导键共存:
[keys.key_actions]
backslash = "special:quick_symbols"
"ctrl+shift+u" = "special:quick_symbols"按热键直接进入该模式,且组合区不写入引导符(引导键进入时首位是引导符,热键进入则从空编码开始)。仅中文模式下生效,并走系统级全局拦截,以穿透 QQNT / Tabby 等宿主的同名加速键。
同一张表里的条目按键的形态自动分流:带 Ctrl / Alt / Shift 的走热键通路,单个符号键走引导键链,不需要你指定。
自动上屏策略
特殊模式输入时是否自动上屏,由该方案的 [engine.codetable] 全码策略决定,与它作为普通方案使用时一致:
- 全码唯一自动上屏:候选唯一且无更长前缀时自动上屏,适合符号、常用词
- 固定码长自动上屏:达到指定码长且候选唯一时自动上屏,适合定长码表
- 手动选择:始终按数字 / 空格选择,适合需要精确控制时
标了 hidden = true 的方案不会出现在正常的方案切换列表中,只在按下引导键时懒加载触发。hidden 与 [overlay] 是两个正交的属性:前者管「列不列在方案列表里」,后者管「能不能被引导键叠加进入」。特殊模式通常两个都要。方案文件与码表词库的写法见输入方案管理。
精确匹配与空码补全
特殊模式的候选检索是否走精确匹配、以及空码时是否补全后续编码,同样由该方案的 [engine.codetable] 决定,规则与它作普通方案时完全一致(见码表引擎配置):
single_code_input:精确匹配模式,关闭前缀枚举,只显示编码完全匹配的候选single_code_complete:精确匹配下当前编码无精确候选、但更长前缀有候选时,补一条「首位后续码」。任意未满码长都会补(不限某个具体码长),只有打满全码仍无候选时才不补
这些项在设置工具里也能配
不必手写:在方案页勾选「显示特殊方案」,选中该方案 → 设置 → 方案自定义,勾上要改的那几项即可(顶码上屏、精确匹配、调频等)。见方案级码表配置。
写进的是用户覆盖层 schema_overrides/<方案id>.toml,与本页说的 [engine.codetable] 是同一组字段、同样的语义。
特殊方案不继承全局码表配置
声明了 [overlay] 的方案折叠 [engine.codetable] 时以内置默认值为基线,不叠加全局 schema.codetable。它们是几十条的小符号表,而全局基线是按五笔那种数万条全码表调的——共用一份的后果是「改五笔的精准匹配,快符跟着变」,而改的人根本意识不到自己动了另一个表。
判据是 [overlay] 段,与写没写 hidden 无关:hidden 只决定列不列进方案切换列表。隐藏但没有 [overlay] 的码表方案(比如只作快捷输入成员用的小表)照常跟随全局。
所以设置工具里对五笔开启的「精准匹配」不会流到特殊模式,特殊模式也不会拿到全局的 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进入即展示候选
默认情况下,进入特殊模式后候选窗为空,敲入编码才出候选。把方案 [overlay] 段的 show_all_on_enter 设为 true(或在设置工具的 特殊模式 → 进入即展示候选 里勾上),则一进入就展示该方案码表的候选,可直接翻页浏览——适合快符、生僻字分类符号这类小码表。
展示数量遵循该方案的 single_code_input:
- 非精确匹配模式:展示码表首页候选,按每页候选数分页浏览
- 精确匹配模式:最多展示 1 条(与
single_code_complete「取首位后续码」同语义)
仅宜小码表
show_all_on_enter 面向小符号表。若引用的是大码表(成千上万条),进入时会遍历整表取首页,有一定开销,不建议开启。
候选窗布局
[overlay] 段的 candidate_layout 决定进入本模式期间候选窗的排列方向,退出后自动恢复。设置工具里对应 特殊模式 → 候选排列 下拉:
| 取值 | 含义 |
|---|---|
follow(默认) | 跟随全局 ui.candidate.layout——你改全局,本模式跟着改 |
vertical | 本模式期间强制竖排 |
horizontal | 本模式期间强制横排 |
每个特殊模式各设各的:快符表可以竖排、生僻字表可以横排,互不影响。
follow 与 vertical 的区别只在全局本身是竖排时才显现——前者跟着全局变,后者恒定竖排。搭配 show_all_on_enter = true 时通常设 vertical:一进入就铺开的符号表,竖排一屏能看到更多条目。
这是所有模式共用的机制
临时拼音、临时英文、快捷输入也各有同名的 candidate_layout,取值与语义完全一致,只是各住各的配置段——见候选布局总表。
注释模板
[overlay] 段还可以覆盖本模式期间的候选注释模板,横竖各配一份,退出自动恢复。无图形界面,只能手写:
[overlay]
comment_template_vertical = "${code_hint|code_rev}"
comment_template_horizontal = ""三态语义(不写=跟随全局 / 写模板=本模式改用它 / 写空串=本模式不显示注释)与其它模式完全一致,见模式级注释模板。
候选行为
特殊模式的候选与主方案完全隔离:
- 调频与候选调整归属特殊方案自身 —— 见下方调频
- 不做简繁变体展开 —— 即使开启了简繁转换,特殊模式的候选也不会展开繁体变体(临时拼音与快捷输入模式则会)
调频
特殊模式的词频记账、候选调整(置顶/删除)、用户词库都记在该方案自己名下,与主方案互不干扰——它与五笔是同一层级的东西,只是用特殊按键进入。
所以设置工具的词库管理里能直接选中特殊方案,管它自己的用户词库、词频与候选调整。
默认不开。小符号表的顺序往往是作者精心排过的,调频会打乱它。
要开,在设置工具里是 选中方案 → 设置 → 方案自定义 → 词频调整,勾上「启用词频调整」那一行;手写则是该方案的 [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 语法在特殊模式下同样有效,见命令直通车。
对这篇文档有疑问,或发现内容有误?
欢迎到文档仓库提 issue,写明问题时附上本页链接即可。