快捷输入
分号触发的计算器、日期格式化、农历、拼音子模式与自由字面输入,候选来源与布局配置,以及候选格式的自定义
在中文模式下按 ;(分号)进入快捷输入模式,用于计算、日期格式化等即时输入。触发键可配置,也可以完全禁用。
| 输入 | 功能 | 示例 |
|---|---|---|
; + 数学表达式 | 计算器 | ;1+2*3 → 7 |
; + 日期数字 | 日期格式化(含农历) | ;2026.4.24 → 2026年4月24日、农历三月初八 等多种格式 |
; + 年月数字 | 年月格式化 | ;2026.4 → 2026年4月 等 |
; + 字母 | 进入拼音子模式 | 可在快捷输入内使用拼音输入 |
; + 越界字符 | 转入自由字面输入 0.114 新增 | ;GetTestData() → GetTestData() |
模式内操作:
- 缓冲区非空时,按
a–z选择候选 Space上屏首选,或重复上次输入Enter上屏原文Esc退出
快捷输入本质是一个「混输实例」
它在配置里是 schema.mix_modes 数组的一项(内置实例 id 为 quick_mix)。所以下面的每一项设置都是这个实例独有的——你可以再建别的实例,各配各的触发键与候选来源。手写配置的写法见方案与引擎配置。
设置项
设置工具「输入」页 →「快捷输入」卡片,共六项:
| 选项 | 说明 |
|---|---|
| 快捷输入触发键 | 按触发键进入快捷模式,可多选;全部取消勾选即禁用快捷输入 |
| 快捷候选来源 | 开哪些候选来源,见下 |
| 候选窗布局 | 快捷输入期间候选窗横排还是竖排,退出后自动恢复 |
| 自由输入 | 关闭 / 自动判断 / 始终字面输入,见下 |
; ' 作字面字符 | 自由输入时这两个键不再选第 2 / 3 候选;数字键不受影响 |
| 小数保留位数 | 计算结果最多保留的小数位数(0 表示取整) |
触发键
可选:`、;、'、,、.、/、\、[、]。只收符号键——字母键统一走码表方案配置的「z 键引导功能」。
出厂绑 ;。触发键不限于空闲时按——正在打字时按下,已输入的内容会先上屏,然后进入快捷输入。
对话框里的「恢复默认」勾回出厂的 ;(而不是清空——清空等于禁用快捷输入)。
触发键冲突会实时提示
触发键可能与次选键、临时拼音 / 临时英文触发键冲突。设置工具会实时检测,在页面顶部以琥珀警告条提示。同一个键只能分配给一项功能。
快捷候选来源
关掉的来源不再产出候选。列表顺序即候选优先级,调整顺序需直接编辑配置文件的 members。
| 来源 | 内容 |
|---|---|
| 计算 | 算式求值,如 1+2*3、5^2、(1+2)/4;出厂给结果、等式、百分比 0.118 新增 三条 |
| 日期 / 年月 | 如 12.25 → 今年 12 月 25 日;2026.3 → 2026 年 3 月 |
| 数字 / 金额 | 中文数字、财务大写、千分位;算式结果也会转换 |
| 重复上次上屏 | 仅在刚进入、尚未输入时出现,空格即再上屏一次 |
| 拼音 | 跟随主拼音方案(全拼 / 双拼) |
| 英文 | 英文词库候选 |
前四类候选具体长什么样(日期用哪几种写法、金额带不带「整」)也可以改,见自定义候选格式。
候选窗布局
三档,出厂为强制竖排——日期、算式结果这类候选是长文本,横排放不下。
| 选项 | 含义 |
|---|---|
| 跟随全局 | 用外观设置里的候选窗排列——你改全局,本模式跟着改 |
| 强制竖排 | 本模式期间恒定竖排,与全局无关 |
| 强制横排 | 本模式期间恒定横排 |
「跟随全局」和「强制竖排」的区别只在全局本身就是竖排时才看得出来——前者会跟着你以后对全局的改动走,后者不会。
自由字面输入 0.114 新增
要在 ; 里原样打出 GetTestData()、test_data、all-in-one、12.5GB 这类内容,靠的不是某个切换键——快捷输入里几乎每个可打印键都已双重占用(数字键选词、标点顶屏退出、字母选词),挑不出真正空闲的键。
判据落在输入内容本身:
一个字符若不在当前透镜的合法字符集内,它就不可能是编码,只能是字面内容。
此后一切可打印键都字面入缓冲,候选只有「你打的原文」一条。
透镜
透镜由缓冲内容推导,不是粘滞状态——退格删掉那个越界字符就自然回到原透镜,不需要退出键。
| 透镜 | 何时进入 | 合法字符 |
|---|---|---|
| 文本 | 首字符是字母 | 小写字母(数字键作选词,不入缓冲) |
| 数字 | 首字符是数字 | 数字与算式运算符(含 -) |
| 自由 | 出现越界字符,或候选为空时按下选词键 | 全部可打印字符,一律字面 |
合法字符集按透镜划分而非取并集,- 的归属因此自然分裂:
;1-5—— 首字符是数字走数字透镜,-在算式字符集内,仍是减法 →-4;all-in-one—— 首字符是字母走文本透镜,-越界 → 转自由透镜,得到字面all-in-one
自由透镜下不显示候选序号
该透镜下字母与数字都是字面输入,没有任何键能按序号选候选,画出序号等于骗你去按那个数字、结果把数字打进缓冲,故刻意不渲染。用 Space 或 Enter 上屏。
自由输入不展开短语占位
自由输入的候选不走短语展开:打 $AA 就上屏 $AA。那是你逐键敲进去的字面内容,不是词库候选。
候选为空时,选词键也让位字面输入 0.122 新增
还有一类内容躲得过上面那条判据:.txt。
. 是算式字符(小数点),所以缓冲 . 自身从不越界;可光一个点又换不来任何候选(金额要求首字符是数字,.5 同样为空;算式要求首字符是数字、括号或正负号)。字母在数字透镜里是选词键,于是 txt 三个键一个个被吃掉,缓冲区永远停在 .。
判据因此补了一条:一条候选都没有时,选词键不是功能键,只是死键——此时它归字面输入。;.txt、;.5gb 由此打得出来(;.5GB 走的是大写字母那条老路,一直就能打)。
只在「一条都没有」时让位:候选明明有 3 条却按了第 4 个选词键,那是瞄歪的选词,仍旧照旧吃掉——否则 ;nihao 误按一下 4 就会连人带缓冲掉进自由透镜,整段转换作废。把自由输入设为「关闭」则本条完全不生效。
三个取值
| 取值 | 行为 |
|---|---|
| 关闭 | 越界字符按原有规则处理(标点仍顶屏出中文标点、- 仍翻页) |
| 自动判断(默认) | 出现越界字符时自动转入自由透镜 |
| 始终字面输入 | 恒在自由透镜。适合新建一个专做字面输入的实例 |
行为变更:自动判断下逗号不再顶屏
「自动判断」下,;nihao, 的逗号会字面入缓冲,不再顶屏上屏「你好,」。; 本就是为特殊内容而进的模式,要标点可以先按空格上屏再打。不接受这个取舍的话,把这一项设为「关闭」即恢复旧行为。
; ' 作字面字符
' 和 ; 默认是第 2 / 3 候选键,所以 rock'n'roll、don't、for(;;) 这类内容原本打不出来——这两个键在选词分派那一步就被截走了,轮不到上面那条越界判据。越界判据只认得出「字符本身不可能是编码」的键(大写字母、多数符号),对功能键无能为力。
选词键与字面字符是同一批物理键的两种解释,无法两全,只能按「有没有等价替代」分配:
| 键 | 归属 | 理由 |
|---|---|---|
; ' | 字面(默认) | 选第 2 / 3 候选只是数字键 2 / 3 的别名,让位不损失能力 |
数字 1–9 | 始终选词 | 文本透镜唯一的选词通路,让位就一个选词键都不剩 |
关掉这一项即让 ; ' 恢复选词,此时 rock'n'roll 又打不出——这是取舍,不是缺陷。
已知限制:纯小写字母 + 数字打不出
数字键始终是选词键,故 utf8、mp3、x64 这类「纯小写字母 + 数字」的内容里,数字会去选候选。先打一个大写字母或符号切进自由透镜即可,例如 UTF8。
右键调整候选顺序 0.116 新增
不想改配置文件的话,在候选上点右键就能调:
| 菜单项 | 作用 |
|---|---|
| 置顶(同类型内) | 这一类的所有输入都把它排最前 |
| 上移 / 下移 | 微调位置 |
| 隐藏此格式 | 该写法不再出现在候选里 |
| 恢复默认 | 把这一类恢复成出厂状态 |
「同类型内」是说:置顶只在日期、数字、计算各自这一类里生效。类与类之间谁先谁后由快捷候选来源的 members 顺序决定。
调完立即生效,不用重启。
调的是「这种格式」,不是这一次的结果
把「农历五月初五」排到最前,意思是以后所有日期都把农历排最前,不是只对 2026.6.19 这一次。这与候选调整(对某个编码下的某个词置顶)不是一回事。
隐藏之后右键就点不到它了
被隐藏的格式不再出现在候选里,也就没法再右键点它。右键这一侧只能用「恢复默认」整类恢复,会把该类的顺序调整一并清掉;要单独把某一条开回来,去设置里管理。
右键调整存在用户数据里,与下面的格式表文件互不干扰:你手写的 system.quick.toml 不会被程序改写,右键调整叠加在它之上。
词库里的置顶与隐藏也生效了 0.121 新增
快捷输入的候选来自几个成员方案(拼音、英文词库等)。0.121 起,你在那些方案里做的候选调整与词频,在快捷输入里同样生效:在拼音方案里隐藏「你」,快捷输入打 ni 就不会再出它。
应用粒度是「成员段内」:你在拼音方案里把某个词调到第 3 位,说的是「拼音候选里的第 3」,而快捷输入的第 3 位可能是算式或日期。所以顺序调整只在该成员自己那一段里应用,不会打乱成员之间的次序(成员顺序即候选优先级,这是既有设计)。
隐藏不受这个限制——「这条别出现」与谁排第几无关,在任何粒度上都成立。
候选检索范围不影响这里:成员可以是第三方方案,也可以是自带准入规则的生僻字成员,用全局那把常用度的尺子去裁它们只会互相打架。
在设置里管理 0.117 新增
右键只能对当前看得见的候选动手,而被隐藏的格式恰恰点不到。设置工具的「词库」页新增了一个快捷输入类型(在「词库类型」下拉里,与「快捷短语」并列),把整张表列出来,隐藏的也在:
| 能做 | 说明 |
|---|---|
| 上移 / 下移 / 移到本类首位 | 与右键同一套规则,只在同类内生效 |
| 启用 / 停用 | 双向。停用的行留在列表里,随时开回来 |
| 恢复此条 | 只清这一条的调序与停用,不碰同类的其它条 |
| 恢复全部默认 | 清掉所有类别的调整,但保留你自己加的条目 |
| 添加 | 加一条自己的格式,见下面 |
| 编辑模板 / 删除 | 只对自己加的条目。出厂条目的模板不可改,只能停用 |
| 导入 / 导出 | 一份 TOML,见下方 Callout |
每行带一列示例,用今天的日期与 1234.5 现算出来,与你实际打出来的一字不差——不必对着 $YC年$MC月$DC日 猜它长什么样。农历超出 1900–2100、或表达式写错时示例为空,那也正是这条候选不会出现的原因。
停用的行原地灰掉、不挪位置,来回开关一行都不动。
导出的是「你的改动」,不是整张表
文件里只有调序、停用记录和你自己加的条目,所以换机导入后,新版本新增的出厂格式照样会出现。导出完整表反而没这个好处——那等于把当前版本的出厂内容固化下来,日后升级新增的写法就永远不出现了。
导入时无法识别或与已有条目重复的行会如实报数(「N 条无法识别或重复已跳过」),不会悄悄少掉。重复导入同一份文件不会多出一堆一样的条目。
加一条自己的格式
点「+ 添加」,选类别、填模板即可。模板写法与下节的格式表文件完全一样($ 变量或 {函数()} 表达式),对话框里列出了每一类可用的变量和示例值,照着抄就行。
对话框列的是变量,函数写法同样能填
对话框里那张清单只有 $ 变量。带参数的函数写法照样可以填进模板框,只是那张表在下一节。
最常用的一例是金额不要「整」:类别选「数字」,模板填 {amt(zheng='false')},打 ;100 就得到「壹佰元」而不是出厂的「壹佰元整」。想让它当首选,把出厂那条金额停用、再把自己这条挪到第一位。
存的是你的数据,不写进 system.quick.toml——那份文件始终由你自己(或出厂)掌管。
出厂条目的模板不可修改
想让某种出厂写法变个样子,做法是停用它、再加一条自己的,然后摆到想要的位置。
这不是偷懒:如果允许「改出厂那条」,日后出厂表升级改了同一条模板,程序就得替你选——保留你的旧值(那你永远看不到新写法,且不会有任何提示),还是采用新值(那你的改动就丢了)。而「停用 + 新增」两者互不干扰:出厂那条照常随版本更新、只是被你停用着,随时开回来就能看到新版长什么样。
同一类里模板逐字相同的条目只能有一条——两条一模一样的候选除了占位没有作用,还会让「候选里怎么有两个一样的」变成一个查不出原因的问题。保存时会告诉你撞的是哪一条。
改出厂条目的模板仍然只能改配置文件,见下节。
自定义候选格式 0.116 新增
出厂的日期、数字、金额、计算候选是固定的几种写法。要按自己的习惯改——比如日期只留 2026.4.24 一种、千分位用空格、金额单位写「圆」——可以放一份自己的格式表。
改出厂条目的模板是高级特性:没有设置界面,改的是配置文件。(调顺序、藏掉某几条、或者加自己的格式都不必动文件,见在设置里管理。)不动它的话行为与从前完全一样。
怎么改
把程序目录里的 data\system.quick.toml 拷到用户配置目录,改完重启输入法服务:
%APPDATA%\WindInput\system.quick.toml你那份会整份生效,程序自带的那份不再参与。所以请在完整副本上改,而不是只写想改的那几条——没写进去的格式就不会出现了。
整份生效意味着不会自动获得新格式
以后版本给出厂表新增的格式,不会出现在你的副本里。想要的话,对照新版自带文件手动补。
一条格式长什么样
[[formats]]
id = 'date.cn' # 标识,同 kind 内唯一
kind = 'date' # 类型:date / month_day / year_month / number / calc
text = '$Y年$M月$D日' # 模板
position = 1 # 同类内的顺序,升序kind 决定这条格式在什么输入下生效,只能是这五种之一——它对应程序里的五个解析器,不能自创。
各类之间的先后不在这里改
position 只排同一类内部的顺序。日期、计算、数字这几类之间谁先谁后,由快捷候选来源的 members 顺序决定。
变量
| 类型 | 输入示例 | 可用变量 |
|---|---|---|
date | 2025.12.25(三段) | $Y 2025、$YYYY 2025、$YY 25、$YC 二〇二五$M 3、$MM 03、$MC 三$D 5、$DD 05、$DC 五农历见下节 |
month_day 0.117 新增 | 12.25(两段) | 与 date 完全相同($Y 系列取当前年,农历可用) |
year_month | 2025.12 | 同 date,无 $D 系列,不支持农历 |
number | 123.45 | $N 123.45、$THOU 1,234,567、$DIG 一二三$CNL 一百二十三、$CNU 壹佰贰拾叁$AMT 壹佰贰拾叁元肆角伍分 |
calc | 1+2*3 | $EXPR 1+2*3、$RESULT 7$EXACT 0.118 新增 未按小数位截断的原始结果(1/3 → 0.3333333333333333),供 pct() 二次换算 |
date 与 month_day 是同一个解析器的两种输入形态,分成两类只为让出厂条目各自不同:打两段(12.25)时年份是程序替你补的,首选就不该带年(出厂给「12月25日」);打三段(2026.12.25)时年是你自己打的。变量集两者完全一样,顺序与显隐也各记一份——对「打两段」和「打三段」的偏好本来就不是一回事。
$$ 表示字面的 $;变量后面紧跟字母时用 ${Y} 显式定界。
渲染结果为空的条目不会出现在候选里。例如 $AMT 在小数超过两位时没有角分写法,那一条候选就自动消失,不需要也无法在文件里写条件判断。
农历 0.116 新增
输入日期时,候选里默认带两条农历写法,排在公历五条之后:
;2026.6.19
1. 2026年6月19日
2. 二〇二六年六月十九日
3. 2026-06-19
4. 20260619
5. 2026/06/19
6. 农历五月初五
7. 丙午年五月初五这两条由格式表里的 date.lunar 与 date.lunar_ganzhi 产生,可以照常改写、调序或删掉。可用变量(date 与 month_day 能用,year_month 不能——农历月与公历月不是一一对应,2026.12 推不出唯一的农历月):
| 变量 | 值(以 2026.6.19 为例) |
|---|---|
$LMD | 五月初五 |
$LM / $LD | 五月 / 初五 |
$LY | 丙午(干支年) |
$LZ | 马(生肖) |
$LYN | 2026(农历年数字) |
$LF | 端午节 |
闰月带「闰」字,如 农历闰四月初十。
干支和生肖按农历年算,元旦前后与公历年差一年
农历年从正月初一开始。2026 年 1 月 1 日打出来是「乙巳年冬月十三」——还是蛇年,要到 2 月 17 日春节才转丙午马年。$LYN 与 $Y 因此可能差 1。
支持 1900 年到 2100 年。超出这个范围,农历那两条候选自动消失,公历的照常。
$LF 只在传统节日当天有内容(春节、元宵、龙抬头、端午、七夕、中元、中秋、重阳、腊八、小年、除夕),平常日子展开成空——这条候选照常出,只是少了节日名那一段。所以一条格式就能两用:
[[formats]]
id = 'date.festival'
kind = 'date'
text = '$LY年$LMD$LF' # 平常「丙午年四月廿九」;端午当天「丙午年四月廿九端午节」
position = 8想要「只在节日才冒出来」的候选,把 $LF 单独配成一条——整条展开为空的候选不会出现。注意别在 $LF 前留字面空格('$LMD $LF' 平常日子会拖一个尾随空格上屏)。
农历变量在短语里同样可用,取的是当天的农历。例如给短语 nl 配 农历$LMD,打 nl 就得到今天的农历日期。
函数写法
变量表达不了的调整——换千分位分隔符、改货币单位、去掉「整」、补零到指定位数——用函数写法:
text = "{amt(unit='圆', zheng='false')}" # 壹佰贰拾叁圆
text = "{thou(sep=' ')}" # 1 234 567
text = "{thou(group=4)}" # 123,4567
text = "{year()}年{month(pad=2)}月{day(pad=2)}日" # 2025年06月05日不带参数时与对应的变量完全相同:{month()} 就是 $M,{month(pad=2)} 就是 $MM。只为想改的那一处写参数即可。
下表列的是函数名,填进模板时要包一层花括号——写 {amt(zheng='false')},不是 amt(zheng='false')。少了外层那对括号,整条模板就成了一段普通文字,候选里会原样出现你写的那串源码——保存时会拦下来并告诉你正确写法。
| 函数 | 参数 | 说明 |
|---|---|---|
year() month() day() | pad= 补零位数cn='true' 出中文数字 | 同 $Y $M $D 系列 |
raw() | — | 所输数字原样 |
cn() | upper='true' 出大写 | 中文数字 |
dig() | — | 逐位中文 |
thou() | sep= 分隔符group= 每组位数 | 千分位 |
amt() | unit= 货币单位zheng='false' 去掉「整」 | 大写金额。「整」按会计规范只在到元、到角时才有(100 → 壹佰元整、100.5 → 壹佰元伍角整),100.56 这种到分的本来就不带,zheng='false' 对它没有影响 |
lunar() | part= 取哪一段 | 农历,默认 md(五月初五)另有 month day ganzhi zodiac year festival full |
expr() result() | — | 算式与结果 |
pct() 0.118 新增 | scale= 倍数(默认 100)decimals= 小数位上限(默认 2,去尾零)suffix= 后缀(默认 %) | 结果按比例换算,1/3 → 33.33%。换 scale=1000, suffix='‰' 即千分比,scale=10000, suffix='bp' 即基点。基于 $EXACT 现算,不受小数位设置影响 |
开关类参数要加引号
写 cn='true' 而不是 cn=true——不加引号会被当成函数调用。参数值写错(如 zheng='nope')时这条候选不会出现,启动日志里有提示。
一条模板里不能混用两种写法,${Y}年{month()}月 不合法,要么全用变量、要么全用函数。函数写法里还可以套用命令栏的文本函数,例如 {concat('¥', thou())}。
写错了会怎样
程序不会因为这个文件出错而打不出字:
| 情况 | 结果 |
|---|---|
| 文件不存在 / 整份语法错误 | 回落出厂格式,行为与没改过一样 |
| 某一条写错(变量名、类型名不认识) | 只丢那一条,其余照常 |
| 函数名或参数写错 | 那一条候选不出现,启动日志里有提示 |
| 农历算不出(超出 1900–2100、日期不存在) | 农历那几条不出现,公历的照常 |
不用进快捷输入也能用的
日期、时间、UUID、时间戳、各类特殊符号有另一条更省事的路——直接在中文输入状态下打编码,不必先按 ;:
date → 2026年4月24日 / 2026-04-24 / …
time → 14:30:00 / 14:30 / …
uuid → 550e8400-e29b-41d4-a716-446655440000
zzbd → 、。·…""【】
zzys → ①②③④⑤这些是系统短语,完整清单(含 zz 系列符号总表与自定义短语可用的日期时间变量)见快捷短语。
Ctrl / Alt 组合键不会被吞 0.114 新增
在快捷输入、临时英文、临时拼音、网址输入、引导键特殊模式这五种模式里,带 Ctrl / Alt 的按键按主输入路径的语义处理:
- 缓冲区非空 —— 放弃整段待输入内容并隐藏候选窗,该按键交还宿主
- 缓冲区为空 —— 直接透传给宿主
0.113 及以前 Ctrl + E 这类组合键会被当成字面 e 插进缓冲区,宿主程序收不到。
想让某个组合键在候选窗显示期间生效
把它配成候选窗快捷键(置顶、删除候选等)即可——那一层在上述守卫之前分派,天然优先,且五种模式一次接通。见按键设置。
对这篇文档有疑问,或发现内容有误?
欢迎到文档仓库提 issue,写明问题时附上本页链接即可。