进阶专题

引导键特殊模式

用引导键临时进入自建小码表(快符、生僻字等)的配置方法、退出条件与候选行为,含 0.115.0 配置格式变更的迁移对照

v0.122.0

在码表方案下,按一个「引导键」临时进入另一套独立的小型码表,完成后自动退出回到原方案。常见用途:快速符号(俗称「快符」)、生僻字、专业术语缩写等。

配置分两处:方案文件[overlay] 段声明「本方案可被临时叠加进入」并描述进入期间的表现;引导键与直达热键写在 config.toml[keys].key_actions。方案文件与词库要自己准备。

  • 只想打冷僻汉字、emoji 或各类符号的,不必自建——用生僻字模式 0.120 新增,它直接拿当前方案的编码来打,绑个键就能用。

特殊模式默认为空

安装后没有任何可用的特殊模式——包括「快符」。它不是开箱即用的功能,而是一套让你自建小码表的机制:需要一个带 [overlay] 段的方案文件(连同码表词库),以及指向它的引导键。唯一预置的引导键模式是 ; 触发的「快捷」混输模式,见快捷输入

不想从零开始的话,下面有一个现成的快符表可以一键装上,装完再照着改。

快速开始:装一个现成的快符表 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() 插入配对符号并把光标放中间
x1 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] 时出现——「是不是特殊方案」是方案的固有属性,由方案文件决定,不是随手勾选的开关。所以第一次必须手写方案文件,之后才有图形界面可用。

注释模板两项没有图形界面,始终需要手写。

工作原理:

  1. 按下配置的引导键(如 \)进入对应特殊模式:编码为空时直接进入;已有候选时先上屏当前高亮候选,再进入模式
  2. 候选窗口显示模式徽标(如「快符」),此时输入的字符在该模式的码表中检索
  3. 上屏一个候选后自动退出,回到原方案;也可按 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_commitz_key_repeat 等出厂值。要什么就在该方案上显式写:方案文件 <方案id>.schema.toml[engine.codetable] 段,或用户覆盖层 schema_overrides/<方案id>.toml[codetable] 段。

特殊方案没写时用的基线,与全局出厂值只有一处不同:

字段特殊方案基线全局出厂值
top_code_committruetrue
punct_committruetrue
single_code_completetruetrue
single_code_inputfalsefalse
show_code_hinttruetrue
z_key_repeatfalsetrue

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本模式期间强制横排

每个特殊模式各设各的:快符表可以竖排、生僻字表可以横排,互不影响。

followvertical 的区别只在全局本身是竖排时才显现——前者跟着全局变,后者恒定竖排。搭配 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,写明问题时附上本页链接即可。

去提 issue →

本页目录