进阶专题配置文件

输入行为配置

input 域全部配置项——标点、智能符号、自动配对、联想、临时英文/拼音、emoji、Unicode、网址、邮箱、简繁、命令栏

v0.122.0

[input] 域涵盖输入行为的方方面面:全局按键语义(回车 / 空格 / 小键盘 / 候选过滤)、启动默认状态、标点与智能符号、自动配对、临时英文 / 临时拼音、网址输入、简入繁出、命令栏与短语前缀。这里的配置与具体方案无关,对所有方案统一生效。

默认值来源

本页默认值以系统预置 data/config.toml[input] 段为准。未写进预置文件的字段(如 top_commit_modetemp_pinyin.hotkey),默认值取自程序内置代码默认,已在对应行说明。

全局输入行为

顶层四个按键语义键 + 顶码上屏策略。

[input]
filter_mode = "smart"               # 候选过滤模式
rare_phrase = "keep"                # 含生僻字的词组要不要跟着一起过滤
enter_behavior = "commit"           # 有编码时回车的行为
space_on_empty_behavior = "commit"  # 有编码但无候选时空格的行为
punct_on_empty_behavior = "clear"   # 有编码但无候选时标点键的行为(出厂即丢弃废码)
numpad_behavior = "direct"          # 小键盘按键语义
numpad_half_width = false           # 全角态下小键盘仍出半角
english_case_cycle_key = ""         # 打英文时切换候选大小写档位的键(留空 = 关)
commit_newline = "keep"             # 上屏文本里的换行用什么字符表达
# top_commit_mode = "direct_commit" # 内部/实验项,见下方 Callout
类型可选值默认说明
filter_mode枚举gb18030 / general / smart"smart"候选过滤模式:gb18030 = 不过滤(全集);general = 只保留常用字;smart = 智能过滤(同一编码下存在常用候选时过滤掉非常用的)。⚠️ 自 0.122 起这三档只裁单字——含生僻字的词组另由下一行的 rare_phrase 决定
rare_phrase 0.122 新增枚举keep / filter"keep"含生僻字的词组要不要吃 filter_mode 那一刀:keep = 整词放行,词库收录的词照样打得出来,过滤只作用在单字上;filter = 与单字同判,整串每个字都在通用规范汉字表里才留(0.121 及以前的行为)。filter_mode 正交,不是它的第四个档:那个决定「什么算该滤」,本项决定「词要不要吃这一刀」,两者可任意组合。⚠️ keep 下,词里含你在候选右键里手动标成生僻的字也照样放行;单字被标成生僻仍照滤,两者不相干
enter_behavior枚举commit / clear"commit"有编码时按回车:commit = 上屏「已转换前缀 + 剩余原码」;clear = 清空编码、不上屏
space_on_empty_behavior枚举commit / clear"commit"有编码但当前无候选时按空格:commit = 上屏「已转换前缀 + 剩余拼音原码」;clear = 清空编码
punct_on_empty_behavior 0.118 新增枚举commit / clear / clear_no_input"clear"有编码但当前无候选时按标点/符号键:commit = 上屏「已转换前缀 + 剩余原码」再接标点;clear = 丢弃编码,只上屏标点;clear_no_input(0.119 起)= 丢弃编码,标点本身也不上屏,整个按键当没按过。移动端出厂为 commitschema.codetable.punct_commit 不同——后者关掉是吞键但编码留着继续打,clear_no_input 是吞键且丢弃编码
numpad_behavior枚举direct / follow_main"direct"小键盘按键语义:direct = 小键盘数字键直接输出数字(不当选词 / 翻页键);follow_main = 小键盘键重写为主键盘等价键,跟随主键盘语义
numpad_half_width 0.120 新增布尔false开启后,小键盘的 09. + - * /全角状态下仍输出半角原形,且整条标点流水线一并跳过(自定义标点映射、中文标点、全半角转换三步都不走)。与 numpad_behavior 正交,见小键盘恒半角
english_case_cycle_key 0.121 新增字符串(隐性枚举)"" / capslock / tab / enter / space / escape""打英文时(英文方案或临时英文)临时夺取哪个键,在「跟随输入 → 全大写 → 全小写」三档之间循环,一次组合结束即复位。留空 = 关闭。键即开关,没有另一个启用项。Windows 建议 capslock,macOS 上 CapsLock 到不了输入法(系统只传锁定态、不传按键),建议 tab。⚠️ 被夺取的键在打英文期间用不出原本的语义(capslock 的大写锁定、tab 的辅助码 / 配对跳出 / 会话动作),其余时候一律照旧;撞车时启动会告警。详见临时模式 · 切换候选大小写的键
commit_newline 0.122 新增枚举keep / cr / lf / crlf"keep"上屏文本里的换行用什么字符表达keep = 原样透传,词条里写什么就上屏什么;cr / lf / crlf = 一律折成该形态。0.121 及以前是无条件折成 cr,见上屏换行的字符样式。⚠️ 仅 Windows 生效——macOS 的输入法框架用 LF,不参与本项
top_commit_mode枚举pre_confirm / direct_commit"direct_commit"顶码上屏时「已确认文字」如何落到宿主。内部 / 实验项,见下方 Callout

智能档不再「打得越全反而越不出」 (0.114)

smart 档按「同一来源 + 同一编码」分组,组内有常用词就滤掉非常用词。0.113 及以前,同一个字在不同长度的输入下会落进不同的分组——五笔的「桜」(sivg)打 siv 能出、打全 sivg 反而消失,因为打 siv 时同码位的常用字「档」被上游的去重整条丢掉了,「桜」成了孤儿码而被放行。

0.114 让候选记住自己被去重时占用过的全部码位,合并到幸存者身上,过滤时一并遮蔽。同一个字打得越全,出的候选只会更少或不变,不会反而多出来。

跨来源的码位不合并:码表码与拼音码不同域,混输下 wang 两边都合法,合并会给码表凭空造出「该码位有常用字」的假事实、误滤同码的码表生僻字。

小键盘恒半角 0.120 新增

开着全角时,小键盘打出来的还是 123,不是 123

这一项的语义是设备级而不是字符级:小键盘的用途就是录数字——金额、编号、日期——全角数字在表格和编号栏里几乎总是错的;而开全角通常只是为了排正文。所以它单独拎出来,不跟主键盘走。

numpad_behavior 是两根互不干涉的轴:即使设成 follow_main(小键盘当主键盘用),小键盘照样能选词、翻页,只有真正落到出字那一步才改成半角。

只管「按一下直接上屏」的那条路

临时英文、网址输入、快捷输入这些先攒进缓冲、整串再上屏的模式不受这个开关影响——缓冲里只存字符不存来源,abc12 里的 12 是不是小键盘打的已经无从分辨。这是能力边界,不是漏接。

上屏换行的字符样式 0.122 新增

词条、短语、命令直通的产物里可以带换行,而「换行」在不同程序的文本模型里不是同一个东西:

文本模型换行是什么代表程序
富文本段落边界就是 CRLF 落进去不构成换行(Word 里渲染成一段类似 Tab 的空白)Word、WPS 文字、各类 RichEdit 控件
纯字节写进去什么就存什么,任何转换都是在改写你的数据VS Code、终端、浏览器输入框

0.121 及以前一律折成 CR,于是在第二类程序里,带换行的短语上屏后行尾被静默改写。0.122 起出厂改为 keep(原样透传),富文本程序由按应用的名单单独指定:

# compat.toml
[[commit_newline]]
process = "WINWORD.EXE"
style = "cr"

出厂名单只有 WINWORD.EXE——同一次实测里记事本与 WPS 文字都能正常分段,所以 WPS 刻意不在名单上。写法与 compat.toml 其余段一致,见应用兼容配置

为什么出厂不是继续转 CR

两个方向的漏配代价不对称:名单里漏一个富文本程序,你立刻看得见换行显示不对,加一行即可;反过来默认转换而漏掉一个按字节存储的程序,行尾被改写却看不出来,可能很久之后才发现。可见的失败优于静默的失败。

内部项:top_commit_mode

input.top_commit_mode 不在系统预置 config.toml 中,也不在设置工具开放,属内部 / 实验字段,仅可手改。direct_commit(默认)在顶码时真提交、靠隔一拍消息泵躲开 diff 合并,无下划线歧义、WPS 不清空;pre_confirm 留在 TSF 组合态延迟提交,但部分宿主会整段画下划线、WPS 智能标点顶屏会清空。除非排查特定宿主兼容问题,否则无需改动。

检索范围临时放宽(input.scope_relax) 0.114 新增

filter_mode = "smart" 的增强。智能档会滤掉「同码位已有常用字」的生僻字,代价是唯一编码被占的字彻底打不出(如五笔「桜」sivg 与常用「档」同码)。放宽完全由用户主动触发:候选窗内翻页翻到底,再按一次向后翻页键,即把被滤掉的字追加到列表末尾;本次组合结束(上屏 / 取消)后自动恢复。刻意不做任何自动行为。

[input.scope_relax]
page_end_key = true   # 末页再按向后翻页键 → 临时放宽
prefix = "·"          # 放宽候选的前缀标注,空串 = 不标注
类型可选值默认说明
page_end_key布尔true末页再按向后翻页键即临时放宽。候选不足一页时同样适用(那时只有一页,一样翻不动)
prefix字符串"·"放宽放出来的候选的前缀标注,用于与正常候选区分;空串 = 不标注

联想(input.association) 0.117 新增

上屏之后,按刚上屏的内容再给一批候选。分两档:词语联想把上文当前缀,从词库里找以它开头的更长的词(打「中」提示「中国」「中间」);智能联想把上文当上下文,预测接下来该出什么词或标点。

[input.association]
kind = "off"            # 联想类型(兼任总开关)
mode = "one_shot"       # 一次性 / 持续联想
max_count = 9           # 候选条数上限
space_commits = true    # 空格上屏当前高亮的联想候选
enter_cancels_only = false      # 回车:false = 收窗并照常换行/发送
backspace_cancels_only = true   # 退格:true = 只收窗,不删字
hide_after_ms = 5000    # 显示多久后自动收起;0 = 不自动收起
hint = "联想输入"        # 联想时编码栏显示的标识;空串 = 不显示
prefix = true           # 来源:词库里以上文为前缀的更长的词
punct = false           # 来源:标点与符号(桌面默认关,移动端开)
类型可选值默认说明
kind枚举off / word / smart"off"联想类型,兼任总开关off 即关)
mode枚举one_shot / continuous"one_shot"one_shot = 只出一次,任何非选词动作即退出;continuous = 选中后拿它当新上文接着给(「中」→「中国」→ 以「中国」开头的词)
max_count整数9候选条数上限。各来源按下方书写顺序依次取配额,取不满的名额顺延给后一个来源
space_commits布尔true空格是否上屏当前高亮的联想候选。关掉则空格照常出空格,联想窗同时收起
enter_cancels_only布尔false联想窗弹出时按回车false = 收窗,同时回车照常换行 / 发送;true = 只收窗、把回车吃掉,要按第二次才生效
backspace_cancels_only布尔true联想窗弹出时按退格true = 只收窗、不删字;false = 收窗并删掉刚上屏的那个字
hide_after_ms整数5000联想窗显示多少毫秒后自动收起;0 = 不自动收起
hint字符串"联想输入"联想时在编码栏显示的标识;空串 = 不显示
prefix布尔true来源:词库里以上文为前缀的更长的词——词语联想就是它
punct布尔false来源:标点与符号(静态规则表)。桌面默认关,移动端在 [mobile.association] 里开

回车与退格的默认值为什么相反

两项的取值语义完全对称,出厂默认却一个透传(回车)一个吃键(退格),这是刻意的。

回车是终结性动作——按它是要发送或换行,而联想窗是输入法自己弹出来的、用户并没有在选词,让它吞掉一次回车等于让一个「建议」挡住了正事。退格的透传则是删掉刚上屏的字,不可逆;联想窗弹出时手正停在刚打完的字上,误触若直接删字,代价比多按一次键大得多。

两项都可以按自己的习惯改。

为什么没有单独的「启用」开关

kind 同时表示开与关:拆成「启用 + 类型」两个字段,会立刻产生「开着但类型没配」这个没有正确答案的状态。要关闭就写 kind = "off"

两个来源开关只在智能联想档生效

词语联想按定义只用 prefix 一个来源,在那一档下开着 punct 也不会出标点。这两项都不在设置界面开放,需要时手改配置文件。

当前的实际效果punct 在桌面默认关 ⇒ 桌面上智能联想给出的东西与词语联想相同。要在桌面看到标点联想,得手动把 punct 改成 true

桌面端默认关闭

候选窗是浮层,联想常驻会挡住正文;而且它会占用数字键——上屏后再按数字,开着时是选联想词、关着时是打数字,对既有用户是突发的行为变化。移动端没有这两个顾虑,故默认智能联想。

移动端取值(mobile.association)

[input.association]桌面基线。移动端只有 kindmode 两项取值不同,写在文件末尾的独立段里;其余七项两端一致,不重复声明。

[mobile.association]
kind = "smart"        # 移动端:智能联想
mode = "continuous"   # 移动端:持续联想
punct = true          # 移动端:出标点(桌面为 false)

桌面端完全不读 [mobile],改它对桌面没有任何影响;反之移动端读到这三个键就用它们的值,其余键仍取 [input.association]

punct 分平台的理由是两种键盘的成本不同:实体键盘上标点一键可达,打完一个字就弹一串标点干扰远大于收益;软键盘上打标点要切键盘层,从候选里点走反而省事。

启动默认状态(input.default)

程序启动 / 输入法激活时的初始中英、全半角、标点状态。

[input.default]
remember_last_state = false  # 记忆前次状态
chinese_mode = true          # 默认中文输入
full_width = false           # 默认全角
chinese_punct = true         # 默认中文标点
state_scope = "global"       # 中英状态作用域
类型可选值默认说明
remember_last_state布尔falsetrue = 启动 / 激活时恢复上次的中英 / 全半角 / 标点;false = 每次激活重置为下方默认值
chinese_mode布尔true默认进入中文输入模式
full_width布尔false默认全角
chinese_punct布尔true默认中文标点
state_scope枚举global / app"global"中英状态作用域:global = 所有应用共享(默认);app = 每个应用各自记忆中英文(会话级)

标点(input.punct)

标点随中英切换、数字后智能英文标点、四态自定义映射。

[input.punct]
follow_mode = false       # 标点随中英模式切换
smart_after_digit = true  # 数字后标点智能直出英文
smart_list = ".,:"        # 参与「数字后智能英文标点」的标点集合
custom_enabled = false    # 自定义标点映射总开关
# custom_mappings 为映射表,设置页表格编辑,此处不内联
类型可选值默认说明
follow_mode布尔false标点随中英模式切换(中文模式出中文标点,英文模式出英文标点)
smart_after_digit布尔true数字后的标点智能直出英文
smart_list字符串".,:"参与「数字后智能英文标点」的标点集合
custom_enabled布尔false自定义标点映射总开关;关闭时全部走内置默认转换
custom_mappings映射表{}(空表)四态标点自定义映射:key = 源字符(引号用 "1/"2/'1/'2 区分左右),value = [中文半角, 英文全角, 中文全角, 英文半角]。默认空表,在设置页表格编辑

这两项可以被方案整份换掉

从 0.119 起,方案文件可写 [punct.custom_mappings] 声明自己的一份表。切到那个方案时,本节的 custom_mappings custom_enabled 一起不参与——是整份替换,不是逐行合并。

follow_mode / smart_after_digit / smart_list 没有方案级,恒取本节的值。

智能符号(input.symbol)

同一标点在时限内连按两次,将前一个删改 / 替换为另一种形态。三个总开关互相独立,各管一种上下文,都默认关。

[input.symbol]
smart_mode = false                       # 中文标点状态:连按 → 换英文
smart_timeout_ms = 500                   # 连按判定时限(毫秒)
smart_chars = "。,?!:;、~¥·……——"  # 参与转换的中文标点集合
smart_method = "delete_replace"          # 替换方案
english_punct_mode = false               # 中文输入 + 标点切英文:连按 → 换中文
english_mode = false                     # 英文输入模式:连按 → 换中文
english_chars = ".,?!:;"                 # 上面两个英文场景共用的源字符集合
类型可选值默认说明
smart_mode布尔false中文标点状态下的智能符号总开关(连按 → 换英文;数字后智能标点场景方向相反)
smart_timeout_ms整数500连按两次的判定时限(毫秒)
smart_chars字符串"。,?!:;、~¥·……——"参与智能符号转换的中文标点集合(子串包含匹配,含成对 / 多字符标点)
smart_method枚举delete_replace / hold_composition"delete_replace"替换方案:delete_replace = press1 直接提交中文符号、press2 删改,所见即所得、体感更好,但依赖对宿主做删改(部分 Chromium 应用光标偏移);hold_composition = press1 开启 TSF 组合态展示中文符号、press2 替换提交英文、超时后自动提交中文,全程不删改,兼容性更好
english_punct_mode布尔false中文输入模式 + 标点切到英文时的智能符号(连按 → 换中文)。用于「用英文标点写中文、偶尔要个中文句号」
english_mode布尔false英文输入模式下的智能符号(连按 → 换中文)
english_chars字符串".,?!:;"上面两个英文场景共用的源字符集合。存按键本身的 ASCII 标点. 而非 ),与存中文产物的 smart_chars 不同

英文态智能符号 0.113 新增

english_punct_modeenglish_mode 是 0.113 新增的两个开关,方向与 smart_mode 相反——连按英文标点换成中文的。拆成两个而不是一个,是因为场景不同:前者是「正文是中文、标点用英文,偶尔要个中文句号」,后者是「正在打英文」。多数人只需要前者,英文态保持纯净。

english_mode 的影响面更大

开启 english_mode 后,输入法会把 english_chars 里的键接管(原本英文半角下这些键直接透传给应用),不接管就到不了引擎。因此它默认关闭。

english_chars不建议放配对符([{"' 等):英文模式下这些键被接管后配对改由引擎处理,而输入法 DLL 的跳出栈是空的,Tab 跳出会失效。

临时英文(input.temp_english)

Shift + 字母或触发键进入临时英文缓冲,输完自动上屏。

[input.temp_english]
enabled = true                # 临时英文总开关
show_candidates = true        # 显示英文候选
raw_candidate = true          # 首候选恒是所打原文
case_variants = true          # 生成大小写变形候选
case_follow_input = true      # 候选跟随输入的大小写
commit_space = false          # 上屏后自动加空格(临英自己那份)
shift_behavior = "temp_english" # Shift 键行为
trigger_keys = []             # 额外触发键(符号键进入临英)
allow_symbols = false         # 临英缓冲内允许符号与数字(总开关)
symbol_chars = "0123456789+-_.@#/"  # 放行哪些字符(白名单,逐字符)
space_as_input = false        # 空格作为输入字符而非上屏
candidate_layout = "follow"   # 候选窗布局(见本页「模式级候选布局」)
类型可选值默认说明
enabled布尔true临时英文总开关
show_candidates布尔true显示英文候选
raw_candidate枚举 0.122 新增always / in_dict / off"always" 0.119 新增所打原文作首候选。出厂 always = 保持一直以来的行为;三档语义见 schema.english 那份,两侧各自独立。⚠️ 本项为 off(或 in_dict 未命中)且下面的 case_variants 也关、词库又无命中时候选会是空的,此时空格上屏缓冲原文
case_variants布尔true是否在候选里补出全小写/首字母大写/全大写三种形态。它们各占一个候选位,只需要词库补全时可关闭
case_follow_input布尔true 0.121 新增词库候选跟随你打的大小写,语义同 schema.english 那份。⚠️ 临英由 Shift + 字母 进入、缓冲首字母恒大写,开着它临英候选就恒为首字母大写形态;不想要这个观感把它关掉即可
commit_space布尔false 0.122 新增临英选词上屏后补一个空格。与 schema.english 那份各自独立:长时打英文连着打词、补空格顺手;中文里插一个英文词,插完往往接中文或标点,补上的还得退格删掉。回车上屏不补
phrase_seg 0.122 新增布尔false词组分词输入:用 ' 切开各段,每段只打前缀(ip'max → iPhone 15 Pro Max)。语义与 schema.english 那份完全一致,开关各一份。⚠️ 开启后 ' 在临英下不再是第三候选键,用数字键 3 代替
shift_behavior枚举temp_english / direct_commit"temp_english"Shift + 字母的行为:temp_english = 进入临时英文缓冲;direct_commit = 直接上屏该英文
trigger_keys字符串数组[]额外触发键(符号键进入临时英文模式,类似临时拼音触发键);默认空,仅 Shift + 字母触发
allow_symbols布尔false总开关:符号与数字是否直接进入临英缓冲,而非上屏退出或选词。放行哪些字符由 symbol_chars 决定
symbol_chars字符串"0123456789+-_.@#/"允许进入缓冲的字符白名单0.115 新增逐字符字面匹配,不支持 a-z 这类范围写法。未列入的字符保持原有职责(详见临时英文的字符白名单)。留空则一个都不放行
space_as_input布尔false空格是否作为输入字符(而非触发上屏)
candidate_layout枚举follow / vertical / horizontal"follow"临英期间的候选窗排列方向,见模式级候选布局。英文候选一行放得下,全局竖排时常设 horizontal

大写锁定(input.capslock)

[input.capslock]
cancel_on_mode_switch = false  # 中英模式切换时取消大写锁定
类型可选值默认说明
cancel_on_mode_switch布尔false中英模式切换时是否同时取消 CapsLock 大写锁定状态

临时拼音(input.temp_pinyin)

码表方案下临时切到拼音反查。全局唯一。

[input.temp_pinyin]
enabled = true              # 临时拼音总开关
trigger_keys = ["backtick"] # 引导键(默认反引号)
candidate_layout = "follow" # 候选窗布局(见本页「模式级候选布局」)
# hotkey = ""               # 专用直达热键,预置文件未写,默认空(不注册)
类型可选值默认说明
enabled布尔true临时拼音总开关
trigger_keys字符串数组["backtick"]引导键(如 backtick / z / semicolon),默认反引号
hotkey字符串""专用直达热键(如 "ctrl+shift+p",空串 = 不注册);与 trigger_keys 引导键共存,热键进入时组合区不写引导符。预置文件未写,默认空
candidate_layout枚举follow / vertical / horizontal"follow"临拼期间的候选窗排列方向,见模式级候选布局

模式级候选布局

临时拼音、临时英文、网址输入、邮箱输入、快捷输入、引导键特殊模式、快捷加词,各有一个同名的 candidate_layout,语义完全一致:

取值含义
follow跟随全局 ui.candidate.layout——你改全局,本模式跟着改
vertical进入本模式期间强制竖排,退出自动恢复
horizontal进入本模式期间强制横排,退出自动恢复

它不是布尔开关:followvertical 的区别只在全局本身是竖排时才显现——前者跟着全局变,后者恒定竖排。也正因如此,才能表达「全局竖排、但临时英文横排」这种组合(英文候选一行放得下,竖排反而占屏)。

各模式的键位置不同(末行的方案级不是模式,见表下说明):

模式配置键出厂默认设置工具
临时拼音input.temp_pinyin.candidate_layoutfollow✅ 下拉
临时英文input.temp_english.candidate_layoutfollow✅ 下拉
快捷输入schema.mix_modesquick_mixcandidate_layoutvertical✅ 下拉
网址输入input.url.candidate_layoutfollow✅ 下拉 0.122 新增(开了历史补全才会出候选)
邮箱输入 0.122 新增input.email.candidate_layoutfollow✅ 下拉
特殊模式方案文件 [overlay]candidate_layoutfollow✅ 下拉(方案设置 → 特殊模式),见引导键特殊模式
快捷加词input.add_word.candidate_layoutvertical仅配置文件
方案级 0.119 新增方案文件 [candidate]layoutfollow✅ 下拉(方案设置 → 本方案行为),见方案级行为

快捷输入与特殊模式是每实例的——你配了多个融合模式或多个特殊模式时,每个各设各的,互不影响。

方案级与模式级的关系 0.119 新增

表格末行的方案级与其余各行有两点不同:

  • 键名是 [candidate] 段下的 layout,不叫 candidate_layout——它住在方案文件里,段名已经含了 candidate
  • 生效范围是「整个方案期间」,不是「进入 / 退出一个临时模式」。它没有「退出自动恢复」这回事,换方案才换

两者同时存在时模式级赢:在英文方案(竖排)里进临时拼音(横排),临拼期间就是横排,退出回到竖排。模式比方案更内层、更短暂,它对候选面的要求本就该压过你对整个方案的偏好;且模式一退出,方案级自动重新生效。

完整优先级从高到低:

快捷加词  >  上表前五行的任一模式  >  你在本方案期间手动改的值  >  方案级  >  全局 ui.candidate.layout

「你手动改的值」指用菜单或快捷键切换横竖排——它在本次停留于该方案期间一直有效,切走再切回来重新按方案声明落地。

模式级注释模板

与上面的 candidate_layout 同一个思路:各模式可以覆盖候选注释的模板, 进入该模式期间生效,退出自动恢复。仅配置文件,无图形界面。

[input.temp_english]
comment_template_vertical   = "${dict}"   # 打英文时显示词典释义
comment_template_horizontal = "${dict}"

[input.temp_pinyin]
comment_template_vertical   = ""          # 临拼期间不显示注释
comment_template_horizontal = ""

键名与全局的 ui.candidate.comment_template_vertical / _horizontal 一致,横竖各配各的,各自三态:

状态含义
不写该键跟随全局同方向的模板(默认)
非空字符串本模式期间改用它
空串 ""本模式期间不显示注释

「不写」与「写空串」是两回事——前者跟随全局,后者明确要求不显示。也因此这两个键 不会出现在出厂 data/config.toml 里:写进去就等于给了它一个值,而任何值都不等于「跟随」。

可用位置:config.tomlinput.temp_englishinput.temp_pinyininput.urlschema.mix_modes[](每实例独立),以及方案文件[overlay] 段(每方案独立, 见引导键特殊模式)。 快捷加词面板不支持——它走独立绘制路径,本就不渲染注释。

典型用法见候选注释 · 分模式设置

快捷加词(input.add_word)

按加词热键(默认 Ctrl+=)弹出的加词面板,目前只有布局一项可配。

[input.add_word]
candidate_layout = "vertical"   # 加词面板的候选窗布局
类型可选值默认说明
candidate_layout枚举follow / vertical / horizontal"vertical"加词面板期间的候选窗排列方向。默认竖排——面板是「标题行 + 词行」两行提示,竖排更易读

自动配对(input.auto_pair)

输入左括号自动补右括号,输右括号智能跳过。

[input.auto_pair]
chinese = false                                   # 中文标点配对开关
english = false                                   # 英文标点配对开关
chinese_pairs = ["()", "【】", "{}", "《》", "〈〉"]  # 中文配对表
english_pairs = ["()", "[]", "{}", "<>"]           # 英文配对表
jump_out_keys = ["right_symbol"]                   # 跳出配对的按键
state_ttl_secs = 120                               # 配对状态存活期(秒)
类型可选值默认说明
chinese布尔false中文标点配对开关
english布尔false英文标点配对开关
chinese_pairs字符串数组["()", "【】", "{}", "《》", "〈〉"]中文配对表,每项 2 字符
english_pairs字符串数组["()", "[]", "{}", "<>"]英文配对表,每项 2 字符
jump_out_keys字符串数组right_symbol / tab / enter / space / escape["right_symbol"]跳出配对的按键,可多选。right_symbol = 右符号键本身(打 跳出已插入的 ()),其余为键名。列表里没有就是没有,不做隐式补偿。对称配对(引号)永不参与右符号跳出,只能靠 tab / enter 跳出
state_ttl_secs整数120配对状态存活期(秒),从最后一次按键起算,持续输入不断刷新——把括号退格删掉很久之后,Tab 不该再被当成跳出键吃掉。失焦一律立即清空配对状态,不归本项管

Emoji 候选(input.emoji) 0.121 新增

打出词语后,把对应的 emoji 追加进候选列表(「开心」→ 😄)。按候选文字查表,与编码无关,所有方案通用——五笔、拼音、混输一视同仁,不必逐方案配置。词表随程序附带(data/emoji/,来自 rime-emoji),首次开启时在本机建立一次索引缓存。

关闭时连数据文件都不打开,未启用的用户为它付出的内存与启动开销为零。

[input.emoji]
enabled = false        # 总开关
scope = "exact"        # 适用范围:exact / all / off
show_as = "after"      # 显示位置:after / tail
max_per_word = 3       # 一个词最多追加几个
max_hosts = 1          # 只为列表前 N 个候选追加
min_word_chars = 2     # 候选少于此字数时不追加
categories = false     # 是否启用分类词表
类型可选值默认说明
enabled布尔false总开关
scope枚举exact / all / off"exact"适用范围。exact = 只为完整匹配的词追加;all = 前缀补全、子短语之类的候选也追加。出厂 exact:那些候选本身就是「猜」出来的,再挂一个 emoji 只会放大噪音
show_as枚举after / tail"after"显示位置。after = 紧随对应词之后,其后候选的序号顺延;tail = 追加到常用候选之后,原有序号不变
max_per_word整数3一个词最多产出几个 emoji。对普通词表几乎不触发(平均 1.09 个/词),真正拦的是分类词表
max_hosts整数1只为候选列表的前 N 个候选做扩展。出厂 1(只扩首选)——这是把「候选序号漂移」控制住的主要手段
min_word_chars整数2宿主候选至少要有几个字才触发。出厂 2:单字(「一」→ 1️⃣)噪音最大且最没用
categories布尔false是否加载分类词表(「动物」→ 整组动物 emoji)。出厂关:干扰几乎全集中在这 166 条上;但它也是「我想找个动物表情」时唯一好用的入口,故做成独立开关

emoji 不参与词频学习

emoji 候选按表追加、位置由上面几项决定,选它不会改变任何词的排序。想让某个 emoji 常驻靠前,请用快捷输入或短语,而不是指望调频。

网址输入(input.url)

正常输入下打出完整前缀(如 http / www.)即进入网址输入模式,模式内自由输入网址字符(不触发上屏),空格或回车上屏。

[input.url]
enabled = false                                # 网址模式总开关
prefixes = ["www.", "http", "https", "ftp."]    # 触发前缀
history_enabled = false                         # 记下上屏过的网址供下次补全
history_max = 200                               # 历史条数上限
candidate_layout = "follow"                     # 候选窗布局
类型可选值默认说明
enabled布尔false网址输入模式总开关
prefixes字符串数组["www.", "http", "https", "ftp."]触发前缀(恰好匹配即进入网址模式)
history_enabled 0.122 新增布尔false把上屏过的网址记下来,下次打到一半给出补全候选,见网址与邮箱的补全
history_max 0.122 新增整数200历史条数上限,超出时按「用得少、用得旧」裁掉。0 = 不限——但补全每按一键查一次库,条数无顶时逐键开销会随使用一直涨
candidate_layout枚举follow / vertical / horizontal"follow"模式级候选布局history_enabled 关着时网址模式不产出候选,这一项也就无从显现

历史是独立的一档开关

网址模式本身只改输入行为,不产生任何持久数据;开了历史才开始把你打过的网址原文落盘。两者的隐私量级不同,所以没有合成一个开关。已记下的内容在「词库管理 → 输入补全」里逐条查看与清空。

邮箱输入(input.email) 0.122 新增

正常输入下缓冲非空时按 @ 即进入:abc + @ → 用户名 abc,候选给出后缀拼成的完整邮箱,空格或回车上屏。

[input.email]
enabled = false                      # 邮箱模式总开关
suffixes = ["qq.com", "163.com"]     # 预置后缀(出厂 24 条,此处节略)
candidate_layout = "follow"          # 候选窗布局
类型可选值默认说明
enabled布尔false邮箱输入模式总开关
suffixes字符串数组出厂 24 条常用后缀候选里预置的邮箱后缀。@ 之后的部分qq.com 而不是 @qq.com)。这是数组不是映射表,在设置里删干净就是真的空表,不会被出厂值合回来
candidate_layout枚举follow / vertical / horizontal"follow"模式级候选布局

与网址模式的差别在触发判据:那边是「已打的字恰好等于某个前缀」,这边是「本键是 @ 且前面已经打了字」。空缓冲按 @ 不会进入@ 照常作标点上屏——否则每次想单独打一个 @ 都会掉进模式里;这个条件同时也是「用户名从哪来」的答案。

模式内可自由输入表外的后缀,上屏后会被学下来,下次自动出现在候选里,并按使用次数排到预置项前面。后缀学习跟随 enabled,没有网址历史那道单独的开关——它只记域名,不记用户名。

网址与邮箱的补全 0.122 新增

两个模式共用同一套候选逻辑:

规则
候选来源你用过的网址 / 邮箱后缀(学习数据)+ 邮箱的预置后缀
排序学过的一律排在预置后缀之前,其内部按「用得多 → 用得新」排;冷启动没有学习数据时,邮箱就是 suffixes 的书写顺序
条数最多 30 条
空格有候选就选候选,没候选才上屏原文
数字键在这两个模式里是字符不是选词序号——否则打不出 163.comabc123@qq.com
上屏后网址记原文(需 history_enabled),邮箱记 @ 之后的后缀

学到的东西落在一张全局表里,与方案无关,换方案照样补得出来;查看、搜索与清空在「词库管理 → 输入补全」,两类数据各有各的清空按钮。它们也已纳入整机备份,换机器不必重新攒。

Unicode 输入(input.unicode) 0.121 新增

正常输入下打出 u+,续打十六进制码点即得到该字符(u+4e00 → 一),空格或回车上屏。与上面的网址输入同属前缀夺取式模式:打出前缀那一刻就接管后续按键,不经过词库查询。

[input.unicode]
enabled = false               # 总开关
prefixes = ["u+", "U+"]       # 触发前缀
candidate_layout = "follow"   # 候选窗布局
类型可选值默认说明
enabled布尔false总开关
prefixes字符串数组["u+", "U+"]触发前缀(恰好匹配即进入)。按字面匹配,区分大小写——这是与 input.url 的刻意差异:U+ 是 Unicode 的标准写法,大小写在这里携带真实信息
candidate_layout枚举follow / vertical / horizontal"follow"模式级候选布局。与网址那项不同,本项有实际效果——码点输入会实实在在出一条候选

出厂两条前缀各走一个入口,两者共用这一张表:小写 u+ 由码表缓冲触发;大写 U+ 因 Shift+U 会先被临时英文接管,由临时英文转交进来。关掉临时英文不影响 U+——那时大写字母落普通输入、缓冲里是小写 u,仍由 u+ 那条命中。

无效码点不出候选,此时按空格上屏的是你打的原文。候选的注释里给出该码点所属的 Unicode 区块名,与候选右键菜单的「类型」列同源。

不要配单字符前缀

写成小写 "u" 会夺取一切 u 起手的输入,废掉码表的 u 码元与拼音的 u;写成大写 "U" 则在空缓冲时被临时英文先截走,根本够不着夺取点。前缀至少两个字符。

简入繁出(input.s2t)

上屏时把简体候选转成繁体(简繁变换在上屏出口进行,引擎内部始终按简体处理)。

[input.s2t]
enabled = false  # 简入繁出总开关
variant = "s2t"  # 繁体变体
类型可选值默认说明
enabled布尔false简入繁出总开关
variant枚举s2t / s2tw / s2twp / s2hk"s2t"繁体变体:s2t = 标准繁体;s2tw = 台湾正体;s2twp = 台湾正体 + 常用词转换;s2hk = 香港繁体。另接受别名 tw/taiwantwphk/hongkong;未识别值回退 s2t

繁入简出(input.t2s) 0.121 新增

反方向的那一档:词库和候选本身是繁体,上屏时转成简体。给「平时打繁体、词库也是繁体,但这一份文档要出简体」的用户。

[input.t2s]
enabled = false  # 繁入简出总开关
类型可选值默认说明
enabled布尔false繁入简出总开关。只有标准一档,没有 variant——台/港归一需要官方没有的反转表

与简入繁出互斥

input.s2tinput.t2s 只能开一个,开这个会自动把那个关掉(并落盘,不是只改内存)。内部候选域只有一个,两个方向同时开等于先转过去再转回来,产物是绕了一圈的近似原文——繁体简体都拿不到。设置页的两个开关也做了互斥。

开关键是 keys.toggle_t2s,出厂 "none"(不绑)。工具栏另有一格 t2s,出厂不显示(见 ui.langbar.items),常态显「简」、亮起表示正在转换。状态气泡显示的是「繁→简」而不是单字。

命令栏(input.cmdbar)

$CC / $SS / $AA 等命令候选(带副作用的命令直接从候选框执行)。

[input.cmdbar]
enabled = false          # 命令栏总开关
candidate_prefix = "⚡"   # 命令候选前缀标注
类型可选值默认说明
enabled布尔false命令栏总开关
candidate_prefix字符串"⚡"副作用命令候选在候选框渲染时的前缀标注

短语(input.phrase)

短语前缀列举(含命令栏 $CC/$SS/$AA)。

[input.phrase]
min_prefix = 2  # 触发前缀导航列举的最小输入长度
类型可选值默认说明
min_prefix整数2触发前缀导航列举的最小输入长度

取坐标用的占位组合区(input.caret) 0.122 新增

造词、临时拼音、引导键特殊模式、生僻字这四个模式由热键直接进入,进入那一瞬间还没有任何输入内容,却要立刻显示候选窗或预览窗。为了问出「候选窗该画在哪」,输入法会先发一个只含空格的占位组合区,把取坐标用的范围撑开。

代价是:你选中着文字再按这些热键时,选中的内容会被那个空格替换掉(造词 Ctrl+= 最常撞上)。这是 TSF 的标准语义,不是某个程序的怪癖。

[input.caret]
add_word_via_composition = false    # 造词:出厂就走了这个出口
temp_pinyin_via_composition = true  # 临时拼音
special_via_composition = true      # 引导键特殊模式
rare_char_via_composition = true    # 生僻字
类型默认说明
add_word_via_composition布尔false造词面板
temp_pinyin_via_composition布尔true临时拼音
special_via_composition布尔true引导键特殊模式
rare_char_via_composition布尔true生僻字模式
取值取坐标选中的文字
true用占位组合区,最准会被吃掉
false退到回退链(窗口线程信息 → 系统插入点 → 上次已知位置 → 窗口中心估计)原样保留

为什么不干脆四个都关

很多程序的 Win32 取坐标接口给不出正确坐标,只有基于组合区的那条准,占位空格正是为兼容它们而存在。一律关掉是拿「吃字」换「候选窗错位」——错位影响的是所有人的日常输入,吃字只在「选中着文字又去按热键」时才发生。所以做成逐模式开关,按你自己的程序实测逐个调。

出厂只关造词:它弹的是预览窗,对坐标精度的敏感度低于候选列表,实测关掉后位置仍然正确。另三个弹的是候选列表,错位的观感与代价更大。

只对直达热键那条进入方式生效。用引导键(`z 等)进入时组合区里有真实内容(引导符),那时的组合区是显示所必需的,与「为取坐标插一个占位」不是一回事,本段不参与。

相关阅读

对这篇文档有疑问,或发现内容有误?

欢迎到文档仓库提 issue,写明问题时附上本页链接即可。

去提 issue →

本页目录