候选注释
用模板配置候选词右侧小字显示的内容——编码提示、带声调注音、拆字字根,横排与竖排可分别设置
候选注释是候选词右侧的那行小字。默认显示编码提示(如五笔前缀候选的剩余编码),你可以把它 改成注音、拆字字根,或几种信息的组合。
这是进阶定制
默认配置已适合大多数人。本页面向的是想在候选窗里看到注音或字根的用户——尤其是形码方案 (打得出但不确定怎么读)与正在学习编码的用户。
设置位置:设置工具 →「外观」→「候选标注」。
完全用不到注释时,关掉「候选注释」那一行的开关(ui.comment.enabled)即可:
- 它在下文所有模板之上,各层分配的模板也一并不生效。0.125 新增
- 关掉后不再计算注释,也不再预载它所需的反查编码、拆字等数据,省内存。0.125 新增
快速上手
注释显示什么,由模板决定;用哪个模板,在「分配」里选(见模板、两态与分配)。入门只需要: 在「注释模板」里新建一个模板、填上下表的模板串,再点「候选注释」那一行的「设置」打开分配框,把「全局 · 默认·横」选成它。
| 想要的效果 | 模板串 |
|---|---|
| 只显示编码提示(默认) | ${code_hint|code} |
| 显示带声调注音 | ${pinyin} |
| 注音加括号 | {(${pinyin})} |
| 单字显示字根,词组显示注音 | {〔${chaizi}〕}{${pinyin}} |
| 编码 + 注音 | ${code_hint|code}{ (${pinyin})} |
| 悬停提示同款(字根 + 编码 + 读音) | {${chaizi}}{ [${chaizi_code}]}{ ${pinyin}} |
| 拼音在候选上方、拆字在右侧 0.124 新增 | {${pinyin}}\n${chaizi},并打开「注释首行显示在候选上方」 |
横排候选窗的宽度由所有候选共享,放注音或字根很容易把窗口撑得很宽;横排那一格建议只放 ${code_hint|code_rev|shuangpin} 或选「不显示」。出厂排布以横排为主,所以先配横排格。
变量
| 变量 | 内容 | 示例 |
|---|---|---|
${code_hint} | 引擎给出的编码提示:形码前缀候选的剩余编码、混输的来源标记 | kao、拼 |
${code_rev} 0.122 新增 | 整词在主码表里的实际编码,只取最长的全码(仅拼音来源候选) | wqvb |
${code_rev_all} | 同上,但给出全部码位(含简码,短的在前) | q/trn/trnt |
${shuangpin} 0.122 新增 | 这个候选的双拼编码。全拼方案下也能显示(见下) | nihc |
${pinyin} | 带声调注音 | nǐ hǎo |
${chaizi} | 拆字字根,仅单字候选 | 亻尔 |
${chaizi_code} | 该字在拆字库里的编码,仅单字候选 | wq |
${chaizi_all} | 拆字字根,不限字数(逐字拼接) | 亻尔 女子 |
${chaizi_code_all} 0.123 新增 | 该字在拆字库里的编码,不限字数(逐字拼接) | wq w |
${correct_pinyin} 0.128 新增 | 带正确拼音提示的候选,其整词的正确拼音,音节以空格分隔;其余候选为空(见正确拼音) | zhong guo |
${dict} | 挂载的注释词库里该词的注释 | apple、🍎 红苹果 |
${dict:库id} 0.126 新增 | 只查指定 id 的那个注释词库(见多个词库并排显示) | good well |
${dict_all} 0.126 新增 | 所有查到这个词的注释词库各取一条,默认用 ; 连接;${dict_all:分隔符} 换连接符(见多个词库并排显示) | v.配置;[IT]配置 |
${chaizi} 限单字是有意的:拆字回答的是「这个字由哪些字根构成」,词组的字根串既难读、
又会把候选行推得很宽。确实需要词组字根时用 ${chaizi_all}。
${correct_pinyin}:正确拼音 0.128 新增
只有候选带着正确拼音提示(模糊音、误读或纠错命中)时它才有值,别的候选一律为空。所以写成可选段最合适,没命中的候选不会多出多余的字:
${code_hint|code_rev}{ ${correct_pinyin}}例如开着 zh ↔ z 不分,输入 zongguo 时「中国」的注释是 zhong guo;普通候选仍只显示编码。
- 值是整词的正确拼音,不是只有读错的那个音节;字数与音节数对不上时为空。
- 跟随「纠错与提示」里的提示来源勾选:只勾了「模糊音提示」时,误读或纠错得来的候选这里为空。
- 开着提示带声调时带声调(
zhōng guó)。 - 不受「提示范围」限制,每个带提示的候选都有值;放在哪由模板决定。
- 它和「显示正确拼音」是两条独立的路:只想在注释里看、不想正文内嵌时,可以关掉「显示正确拼音」,只写模板,注释照样有值。
- 颜色用主题
[comment.roles]的correct_pinyin角色,出厂主题配的是橙色,与正文提示同色。
${code_rev} 和 ${shuangpin} 的分别
两者回答的是不同的问题:
${code_rev}—— 这个词在主码表里怎么打。它去码表词库里查反向索引,所以能查到 什么完全取决于你配了哪个主码表。${shuangpin}—— 这个词的双拼怎么敲。它是算出来的:拿候选自带的拼音和音节划分, 逐个音节过一遍双拼布局。
双拼编码不存在于任何词库里(双拼词库就是全拼词库,双拼只是「全拼 + 一张键盘布局」),
所以它只能算不能查——这也是为什么它得单列一个变量,而不是让 ${code_rev} 换个码源了事。
三个变量都只对拼音来源的候选有值——形码方案下候选的编码就是你自己打的,再显示一遍是冗余。
全拼方案下也能看双拼编码
${shuangpin} 不要求你正在用双拼。用哪份布局按这个顺序找:
- 当前方案本身是双拼 → 用它的布局
- 否则看「主拼音方案」(
schema.primary_pinyin)是不是双拼 → 用它的 - 否则用方案列表里第一个双拼方案
- 一个双拼方案都没装 → 这一项为空
所以全拼用户只要装了双拼方案,候选旁边就能挂着对应的双拼码——想从全拼转双拼时, 这就是一份跟着你打字走的对照表。
出厂模板用 ${code_rev}(只给全码)而不是 ${code_rev_all}:一个字往往有三四个码位,
全列出来会把候选行推得很宽,横排尤其明显。想一眼看全简码、又用竖排的话再换 ${code_rev_all}。
编码类变量由分配决定
${code_rev} / ${code_rev_all} / ${shuangpin} 只看候选是不是拼音来源:拼音来源的候选才有值,码表候选恒为空。它们没有别的开关,显不显示、显示哪种编码,只看你给当前方案或模式分配了哪个模板:
四个编码模板都先显示码表候选还差的编码(剩余编码),区别只在拼音候选上显示什么:
| 模板 | 码表候选 | 拼音候选 |
|---|---|---|
剩余编码(code_hint) | 剩余编码 | 不显示 |
码表编码(code_rev) | 剩余编码 | 它在码表里的编码(如五笔码) |
双拼编码(shuangpin) | 剩余编码 | 双拼键位 |
编码(自动)(code) | 剩余编码 | 有码表给码表编码,没有再给双拼 |
不显示(none) | — | — |
分配框的下拉里,每个编码模板下面都有一句同样的说明。
0.129 前这件事由拼音、临时拼音、混输三处各一个独立开关管,现已并入分配;旧开关的值不迁移,改过的要重新设,对照见升级说明。上述三处设置页只显示「当前:模板名」,要改点旁边的「去设置」跳过来。
旧名 `${code}` / `${code_all}` 仍然有效
它们是 ${code_rev} / ${code_rev_all} 的别名,会一直保留,老模板不用改。
新写模板建议用新名字:code_rev 的 rev 是 reverse(反查),与「算出来」的 shuangpin
一眼分得开。
变量参数
${chaizi_all}、${chaizi_code_all} 与 ${code_rev_all} 支持用冒号指定分隔符:
| 写法 | 结果 |
|---|---|
${chaizi_all} | 亻尔 女子 |
${chaizi_all:/} | 亻尔/女子 |
${chaizi_all: · } | 亻尔 · 女子 |
${chaizi_all:} | 亻尔女子 |
${chaizi_code_all} | wq w |
${chaizi_code_all:/} | wq/w |
${code_rev_all} | q/trn/trnt |
${code_rev_all: } | q trn trnt |
冒号后的内容原样使用,空格不会被忽略。
语法
${a|b} 取首个非空
按顺序取第一个有内容的变量。默认模板 ${code_hint|code_rev|shuangpin} 的意思是:优先用
引擎给的编码提示,没有就退回主码表反查码,再没有(比如你没配主码表)就显示双拼编码。
{ … } 可选段
段内的变量全部为空时,整段(包括里面的括号、标签文字)一起消失。
这是配装饰字符的关键。对比:
| 模板 | 拼音有值 | 拼音为空 |
|---|---|---|
${code_rev} (${pinyin}) | wqvb (nǐ hǎo) | wqvb () ← 空括号 |
${code_rev}{ (${pinyin})} | wqvb (nǐ hǎo) | wqvb |
段内有多个变量时,只要有一个非空就保留整段,空的那个连同紧邻的一个空格一起省去:
{(拼: ${pinyin} ${chaizi})}
都有值 → (拼: nǐ hǎo 亻尔)
字根为空 → (拼: nǐ hǎo)
都为空 → (不显示)可选段嵌套 0.123 新增
可选段里可以再套可选段,内层只管自己的变量,外层在它里面任一变量有值时保留:
{${chaizi}{ [${chaizi_code}]}}
字根、编码都有 → 女子 [vbg]
只有字根 → 人
都没有 → (不显示)随之而来的一条要求:模板里的字面花括号必须成对出现。可选段按层数配对,段内落单的 {
会去和后面的 } 配对。此前段内第一个 } 就结束本段,落单的 { 原样输出——像 {(${a}{)}
这种写法,升级后显示会不同。
候选悬停提示的段名与段内容用的也是这套模板语法, 「拆字 / 拼音」合并段正是靠嵌套可选段写出来的。
两条自动规则
- 空变量吞掉紧邻的一个空格或制表符,所以你可以放心用空格分隔变量,不必担心某个变量为空时留下 多余间距。
- 整个模板的变量全为空时不显示任何内容。所以
拼:${pinyin}在查不到读音时不会剩下一个 孤零零的拼:。
注释显示在候选上方 0.124 新增
注释很长时(拼音 + 拆字 + 其它),全挤在候选右侧容易放不下。打开这个开关后,可以把注释的 首行挪到候选上方单独占一行,其余内容仍在右侧:
nǐ hǎo ← 上方注释条
1. 你好 亻尔 女子 ← 序号 + 候选文字 + 右侧注释设置位置:设置工具 →「外观」→ 候选标注 → 注释切换与显示 → 设置… → 开关「注释首行显示在候选上方」。
对应配置键 ui.candidate.comment_above,默认关闭;关闭时与以前完全一样。
怎么拆:开启后,模板里字面写的第一个换行 \n 把渲染结果拆成两段——上段显示在候选上方,
下段仍在候选右侧。
- 变量值自带的换行(如注释库词条里的换行)不算分隔符,不会误拆;上方条恒为单行, 上段里出现的变量换行会折成一个空格。
- 第一个
\n之后的其它\n留在下段,撑高右侧注释,与以前一样。 - 模板里没有
\n,全部内容都在右侧,与关闭时一致。
两条写法约束:
-
\n要写在可选段{ … }之外。写在段内时,该段为空则\n一并消失,内容会落到右侧而不是上方:${pinyin}{\n${chaizi}} ← 错:拆字为空时 \n 消失,拼音掉到右侧 ${pinyin}\n${chaizi} ← 对 -
上段的装饰文字也要包进
{ … },否则上段变量为空时会孤零零留下装饰:拼:${pinyin}\n${chaizi} ← 错:拼音为空、拆字有值时,上方条显示「拼:」 {拼:${pinyin}}\n${chaizi} ← 对:拼音为空时装饰一起消失
版面:
- 上方条左边对齐候选文字的起点(序号右边)。
- 一页里只要有任一候选带上段,整页所有候选都预留这一行的高度,避免高低不一。因此翻到 没有上段的页时,候选窗高度可能变化。
- 蒙古文竖排(直立)不支持,上段会并回右侧。
- 上方条的字体、颜色、间距由主题的
[comment_above]节点控制,见 上方注释条。
常用组合:上方拼音 + 翻译,右侧编码与字根
下面五套是用户反馈里常见的搭配,都是「上方一行拼音(可带词典翻译),右侧一行编码 / 字根」。
都要先打开「注释首行显示在候选上方」,否则模板里的 \n 只会让右侧注释变成两行。
♬ ♩ 𝄞 只是分隔用的装饰符,随便换。
| 场景 | 竖排注释模板 |
|---|---|
| 拼音 + 翻译 + 短句四码 | ${pinyin}{ ♬ ${dict}}\n${code_rev} |
| 拼音 + 翻译 + 短句四码 + 字根 | ${pinyin}{ ♬ ${dict}}\n${code_rev}{【${chaizi_all:𝄞}】} |
| 拼音 + 单字编码 | {${pinyin}}\n${code_rev},或 {${pinyin}}\n${chaizi_code_all} |
| 拼音 + 翻译 + 单字编码 | ${pinyin}{ ♬ ${dict}}\n${code_hint|code_all}{【${chaizi_code_all:𝄞}】} |
| 拼音 + 翻译 + 单字编码 + 字根 | ${pinyin}{ ♬ ${dict}}\n${chaizi_code_all:♩}{【${chaizi_all:𝄞}】} |
几处写法的用意:
- 翻译指
${dict},需要先挂载注释词库(或词库自带comment列)。没挂时{ ♬ ${dict}}整段消失,上方只剩拼音,不会留下孤零零的♬。 - 短句四码用
${code_rev}(取最长的全码);这里不必写成${code_rev|code}——code只是code_rev的旧别名,两个取的是同一个值,|兜不到底。 - 单字编码想连简码一起看,用
${code_all}(即${code_rev_all},全部码位,短的在前)。 第 4 套里${code_hint|code_all}表示:引擎给了编码提示(如形码前缀候选的剩余编码)就用提示, 没有再退回全部码位。 ${chaizi_code_all}是拆字库里的编码,与${code_rev}(主码表编码)来源不同:前者跟着 拆字库走,后者跟着你配的主码表走。两者按需选,不必同时放。- 分隔符只在词组里可见(逐字拼接时插在字与字之间);单字候选只有一项,不会出现
♩𝄞。 - 第 2、4、5 套末尾的
{【…】}是可选段:查不到字根时【】一并消失。 𝄞在音乐符号区(U+1D11E),个别字体没有这个字形,候选窗会退到系统的符号字体; 显示成方框时换成♪♩·之类常见字符即可。\n均在{ … }之外,符合写法约束;上方拼音有装饰文字时(如拼:) 记得同样包进{ … }。
内联颜色 $[颜色]{内容} 0.123 新增
给模板里的一段文字指定颜色:方括号里写颜色,花括号里写要上色的内容,内容可以是变量、文字, 也可以再套可选段。
$[accent_text]{${code_hint|code_rev}}{ $[text_dim]{(${pinyin})}}
编码显示为强调色,注音显示为次要文字色颜色的写法:
| 写法 | 含义 | 例 |
|---|---|---|
#RGB / #RRGGBB / #RRGGBBAA | 固定颜色,必须带 #;3 位是简写,#F80 即 #FF8800 | $[#C00000]{${code_rev}} |
| 颜色名 | 当前主题里的颜色,跟随主题与明暗切换。标准色保证任何主题都有 | $[error]{${dict}} |
亮/暗 | 亮色、暗色模式各用一个,两侧各自可以是固定色或颜色名 | $[#C00000/#FF8080]{${pinyin}} |
,selected=颜色 | 候选被选中(高亮)时改用这个颜色,同样可以写成 亮/暗。只在候选注释里有效,悬停提示里忽略 | $[text_dim,selected=on_accent]{${chaizi}} |
- 颜色名只由小写字母、数字、下划线组成,写成
$[Accent]不认。 - 方括号里逗号、等号两侧的空格可有可无。
selected=以外的键=值暂不认,直接忽略——留给以后 的版本扩展,写了也不会让整段失效。 - 不想改模板、只想让某类信息换个颜色的话,主题可以按变量名统一配色,见 文字角色色。模板里写的颜色优先于主题配的。
- 出厂主题不给注释配色,默认注释保持原来的颜色。想让编码显示为蓝色,把模板改成
$[info]{${code_hint|code_rev|shuangpin}}。
只管上色,不是可选段
$[…]{…} 里的变量全为空时,它自己不会消失:
| 模板 | 拼音有值 | 拼音为空 |
|---|---|---|
$[accent]{(${pinyin})} | (nǐ hǎo) | () ← 空括号 |
{$[accent]{(${pinyin})}} | (nǐ hǎo) | (不显示) |
$[accent]{{(${pinyin})}} | (nǐ hǎo) | (不显示) |
要「空则消失」,像后两行那样再套一层可选段,套在里外都一样。
反过来,上色也不改变可选段的判断:$[…]{…} 里的变量照常算进外层可选段与整个模板的「有没有值」,
两条自动规则照旧——空变量吞掉紧邻的空格时,那个空格在颜色范围之外也照样吞。
所以给现成模板加颜色是纯加法:挑一段花括号成对的片段、在外面包上 $[颜色]{ 和 },显示的文字
一个字都不变,只是多了颜色。只包住半个可选段(如包住 {(${pinyin} 不包 )})会改变花括号的配对,
那就不只是加颜色了。
复制、上屏拿到的文字里不带 $[…],颜色只影响显示。
写错颜色会怎样
- 颜色写错——
$[红]{…}、$[#GG0000]{…}、$[]{…}、当前主题里没有的颜色名、transparent或 完全透明的颜色(如#FF000000):内容照常显示,用注释原本的颜色,不会冒出一串$[…]。 颜色只是装饰,写错时丢的只是颜色,内容本身完整。 - 写法不完整才当普通文字:
]后面没紧跟{、花括号没有闭合、方括号里出现花括号或换行、方括号里 超过 64 个字节。这时$[原样显示出来。 - 写在
$[…]{}里的变量名拼错时,原样显示的${pinyn}也是这个颜色。
0.122 及更早的版本不认这个写法
退回旧版本时,模板里的 $[颜色]{ 与 } 会作为普通文字显示出来。
选中与悬停时的颜色
- 写了
selected=:候选被选中时用它。 - 没写:看主题有没有给选中(或鼠标悬停)的候选换一个注释颜色。
- 换了(多见于选中底色是深色实心块的主题,注释要换成浅色才看得清):这段改用主题给的那个颜色。 否则为浅色底调的颜色压在深色底上,多半看不清。
- 没换:照常显示你写的颜色。出厂主题都没换,所以选中时颜色不变。
判断的是最终显示的颜色:主题写了选中态的注释颜色、但与平时相同,也算没换。亮色、暗色模式各自判断。 悬停没有单独的写法,只按上面这条跟随主题。
写错了会怎样
变量名拼错时会原样显示出来(如 ${pinyn}),这样你一眼就能看到是哪里写错了。
未闭合的 ${ 或 { 按普通文字处理,不会报错也不会崩溃。
${emoji}取不到值时(功能没开、这个词没有 emoji 等)按空值处理 0.123 新增:所在可选段 整段消失。此前的版本会把字面的${emoji}原样显示在候选旁边,像是变量名写错了。
关于注音的准确性
多音字的读音由词典决定,不是逐字取最常用读音:
- 拼音方案下,候选自带词条编码,
行长的编码是hang zhang,注音即háng zhǎng。 - 形码方案下,候选没有拼音编码,输入法会枚举各字读音、找出能在拼音词典里查回该词的
那个组合。
行长同样得到háng zhǎng而不是xíng cháng。
有一种情况无法自动判断:同音异调。「好」的 hǎo 和 hào 去掉声调都是 hao,而编码里
不含声调信息,此时显示最常用的那个读音。
注释词库
上面那些变量的内容都由输入法自己算出来。${dict} 变量显示的则是词库里写好的注释——
英汉解释、emoji 名称、字义、专业术语说明。它有两个来源:
- 词库自带的
comment列:自动识别,无需配置 - 单独挂载的注释词库:由你放置文件并添加
输入法自带两个中英释义词库(见内置的中英释义);其余的(Emoji 名称、专业词典等) 需要你自己准备文件。
词库自带的注释 0.121 新增
方案使用的词库如果在 columns 里声明了 comment 列,输入法会自动把这一列当作注释源,
不需要另行挂载。外观 → 候选标注 → 自动使用词库自带的注释控制此行为,出厂开启。
朗月拼音随附的错音错字表就是这种形态。拼音方案下输入 zhujiao,候选「主角」右侧显示
zhǔ jué:
name: corrections
columns:
- text
- code
- weight
- comment
...
主角 zhu jiao 0 zhǔ jué识别规则:
- 判据是
columns中显式声明了comment。未声明columns的词库不计入——码表通常是text/code/weight三列,若按注释词库的默认列序读取,会把编码当成注释。 - Rime 主表用
import_tables引入的子表同样逐一检测,各自独立成条。上面那份错音错字表 即由rime_frost.dict.yaml引入。 - 识别出的词库出现在注释词库列表中,标有「自动」。可以启停与排序,但路径和适用方案 由检测得出、不可编辑;适用方案即声明该词库的方案。
- 默认排在手工添加的词库之后。同一词条两处都有注释时取列表靠前者,拖动手柄可调整。
关掉某个自动条目或改变其位置后,配置文件里会写入一条只含 id / auto / enabled 的记录;
路径与适用方案不写入,每次启动重新检测。
词库格式
纯文本,与 Rime 词库同形态:可选的 YAML 头 + ... 分隔行 + 每行一条的制表符分隔正文。
name: en_cn
columns:
- text
- comment
...
apple n. 苹果
banana n. 香蕉columns声明各列含义,必须包含text与comment;省略columns时按[text, comment]处理。- 可选的第三列
code用于同词多义的消歧(见下)。声明了code列但某行没有编码时, 那一行写两列即可。 - 以
#开头的行是注释,空行忽略。 - 没有
...分隔行时,整个文件都当作正文(裸 TSV 也能直接用)。 - 也能直接放 OpenCC 文本词典 0.126 新增,即 Rime 生态里常见的
.txt表(如白霜拼音的chinese_english.txt),每行是词<Tab>值1 值2…。没有...分隔行的文件按它的约定读:值的第一项与词本身相同时自动去掉(好 好 good well显示为good well),以---开头的行视为注释
挂载
把词库文件放进 schemas/comments/(用户数据目录下,没有则新建),再到
外观 → 候选标注 → 注释词库 → 添加词库…:该目录下的 .dict.yaml 与 OpenCC 的 .txt 会自动列出,
选中后标识、显示名、路径自动填入,只需确认适用方案。缺 comment 列的文件也会列出并
标注,便于排查。
词库放在 comments/ 以外的位置时,用同一弹层中的手动填写路径…。
可挂多个,列表顺序即优先级,拖动左侧手柄可调整。也可以直接写配置(两种方式等价):
[[ui.comment_dicts]]
id = "en_cn"
label = "英汉词典"
path = "comments/en_cn.dict.yaml"
enabled = true
schemas = ["english"]
[[ui.comment_dicts]]
id = "emoji"
label = "Emoji 名称"
path = "comments/emoji.dict.yaml"| 字段 | 含义 |
|---|---|
id | 稳定标识,日志与设置页用来定位,不参与查询 |
label | 显示名 |
path | 相对 schemas/ 目录的路径;你自己目录下的同名文件优先于安装目录 |
enabled | 是否启用,省略视为启用 |
schemas | 限定生效的方案 id,留空 = 全部方案 |
auto | 标记本条是词库自带注释的记录 0.121 新增。为 true 时不写 path 与 schemas,由 id 匹配检测结果 |
schemas 用来避免无谓开销。一份十万条的英汉词典挂在五笔方案上,每次输入都要多查一次
注定查不到的表;写上 schemas = ["english"] 后,中文方案下就不会去查它。
词库本身仍然是启动时一次性加载好的(走内存映射,占用与词库大小基本无关),schemas
过滤发生在每次查询那一步——所以切换方案不会重新加载词库,临时英文这类"方案套方案"
的场景也能正确按 english 分流。
为什么放在 schemas 目录下
整机备份打包的是整个 schemas 目录,注释词库放在它下面就会
自动随备份走。换机器还原后不用再单独复制一遍词库文件。
配好后把 ${dict} 放进模板即可:
${dict}
${dict|pinyin} ← 优先显示词库释义,没有则退回注音多个词库并排显示 0.126 新增
${dict} 只显示一条:按列表顺序,第一个查到这个词的词库胜出。比如同时挂了英文释义和汉字拆分,
单字「好」只会显示排在前面的那一个。
要两个都显示,有两种写法。
全都要:用 ${dict_all},所有查到这个词的词库各出一条,按列表顺序排,默认用 ; 连接。
冒号后面可以换连接符,如 ${dict_all:/}、${dict_all: · }(两侧空格照样保留);连接符里不能有
| 和 },它们在模板里另有含义:
${dict_all}- 每个词库最多出一条,内容相同的只留一条。
${dict}显示的那一条一定在其中 - 先按原样精确查;只有所有词库都查不到时,才按大小写变形再查一遍
- 不标来源词库;想区分来源,可以在词库内容里自带前缀(如
[IT]…) - 适用方案(
schemas)照样生效;查不到时为空,所在的{…}整段消失 - 可能很长,横排慎用;可配合候选注释对话框里的最大字数(
comment_max_chars_*)截断,或放进悬停提示
指定哪几个、怎么排:用 ${dict:库id} 分别指定,库id 即词库条目的 id:
${dict:en}{ 〔${dict:chaifen}〕}- 只在那一个词库里查,查不到就为空,不会退到别的词库
- 适用方案(
schemas)照样生效 - id 写错时同样为空,不报错——显示不出来时先核对 id
大小写
查询先按原样精确匹配,没有再依次试全小写、首字母大写、全大写。所以词库里写 apple
一条,输入 Apple / APPLE 时同样能查到;反过来词库里的大写缩写 ABC,输入 abc
也能查到。
精确匹配始终优先:词库里同时有 US(美国)和 us(我们)时,两者各显示各的,不会互相顶替。
这条回退只对含拉丁字母的词生效,中文词条不受影响。
例外:按输入大小写显示的英文词 0.126 新增
英文词库里的词按你输入的大小写显示时(输入 ASP,词库的 asp 显示成
ASP),按词库里的原样 asp 查,且只往小写方向试,不会贴上注释词库里大写缩写 ASP 的释义。
注释词库里也收了 asp 时显示它的释义;词库里本来就是大写的 ASP 照常显示缩写的释义。
同词多义的消歧
同一个词在不同方案下想显示不同注释时,用第三列 code 标注该条属于哪个编码:
columns:
- text
- comment
- code
...
行 háng 行列、行业 tfhh
行 xíng 行走、可以 tfhx查询时优先取编码精确匹配的那条;当前候选的编码对不上(比如拿拼音方案的编码去比对五笔码) 则回退到该词的第一条——跨方案共用一份词库是常态,不该因为编码对不上就什么都不显示。
性能与占用
词库首次加载时会被转成二进制缓存(.wcmt,与词库的 .wdat 放在同一个缓存目录下),之后
每次启动都是内存映射打开,常驻内存与词库大小基本无关,几十万条的大词典也不会让内存变大。
缓存按文件独立,加挂一个新词库不会让其他词库重建;同一个词库被多个方案引用时也只加载一份。
源文件改动后下次加载该词库时会自动重建(重启输入法,或在设置里改动挂载列表), 你不需要手动清理缓存文件。已经卸载的词库,其缓存也会被自动清掉。
模板、两态与分配 0.129 新增
注释分三件事,各管一处:
- 模板:一个
id、一个显示名、一条模板串(语法见上文)。集中放在「模板库」,其它地方只引用模板 id,不再现场写模板串。 - 两态:「默认」和「详细」,全局只有一份。平时看默认(最简),偶尔想多看一眼就切到详细。
- 分配:每个作用范围有四格——默认·横排、默认·竖排、详细·横排、详细·竖排,每格填一个模板。
设置位置:设置工具 →「外观」→「候选标注」,这一区有五行(另一行是「自动使用词库自带的注释」,见下文),与本页相关的四行:
| 行 | 内容 |
|---|---|
| 候选注释 | 总开关(ui.comment.enabled)加「设置」按钮(打开分配框),分配框的用法见下文 |
| 注释模板 | 「设置」打开模板库:左栏是模板列表(内置 / 自定义),右栏编辑名称、说明、标识与模板串,并实时预览(横排、竖排可切换,打开时跟随当前候选窗排列)。说明是一句话,分配框选模板时显示在模板名下面,内置模板都带。模板串框里回车即换行;右侧「插入变量」列出全部变量与语法(可搜索,↑↓ 选、回车插入),「插入颜色」插主题色。自定义模板的标识(id)可改,分配里的引用随之更新。内置模板只读,可「复制为自定义」;改过同 id 的内置模板会标「已修改」,可「恢复内置」 |
| 注释切换与显示 | 「设置…」里放当前状态、切换键、切换方式、「注释首行显示在候选上方」、横 / 竖排最大字数 |
| 注释词库 | 独立一行,挂载与管理注释词库,内置的两个也在这里;列表条目右键可「打开文件所在位置」 |
内置模板
随包提供、不可直接改,需要时复制为自定义模板再改。
| id | 显示名 | 模板串 | 说明 |
|---|---|---|---|
code | 编码(自动) | ${code_hint|code_rev|shuangpin} | 码表候选显示剩余编码,拼音候选显示码表编码,没有码表时显示双拼 |
code_hint | 剩余编码 | ${code_hint} | 只有码表候选显示还差的编码,拼音候选不显示 |
code_rev | 码表编码 | ${code_hint|code_rev} | 码表候选显示剩余编码,拼音候选显示它在码表里的编码 |
shuangpin | 双拼编码 | ${code_hint|shuangpin} | 码表候选显示剩余编码,拼音候选显示双拼编码 |
pinyin | 拼音 | ${pinyin} | 带调拼音,如「你好」显示 nǐ hǎo |
chaizi | 拆字 | ${chaizi} | 单字的拆分字根,词组不显示 |
chaizi_code | 拆字 · 编码 | ${chaizi}{ · ${code_rev|chaizi_code}} | 单字字根,后面接码表编码(码表里没有时用拆字表的编码) |
chaizi_pinyin | 拆字 · 拼音 | ${chaizi}{ · ${pinyin}} | 单字字根,后面接带调拼音 |
zh_en | 英文释义 | ${dict:zh_en} | 中文候选的英文释义(汉英释义库) |
en_zh | 中文释义 | ${dict:en_zh} | 英文候选的中文释义(英汉释义库) |
pinyin_en | 拼音 · 英文 | ${pinyin}{ · ${dict:zh_en}} | 带调拼音,后面接英文释义 |
full | 拆字 · 拼音 · 英文 | ${chaizi}{ · ${pinyin}}{ · ${dict:zh_en}} | 拆字、拼音、英文释义,取得到的依次显示 |
注意模板名与变量名:模板 code_hint(剩余编码)只是 ${code_hint} 这一个变量,通用的完整回退链是模板 code。
自定义模板的 id 只能用小写字母、数字和下划线([a-z0-9_]+),设置工具新建时自动生成;改名改的是显示名,不是 id。用户模板与内置模板同 id 时,用户的覆盖内置的。
出厂分配
下表没列的格都是「跟随」,落到下一层。
| 作用范围 | 默认·横 | 详细·横 |
|---|---|---|
| 全局 | code | pinyin_en |
| 码表方案 | 跟随 | chaizi_pinyin |
| 拼音 / 双拼方案 | 不显示 | 跟随 |
| 混输方案 | code_rev | chaizi_pinyin |
| 英文方案 | 不显示 | en_zh |
| 临时英文 | 不显示 | en_zh |
| 临时拼音 | code | chaizi_code |
快捷输入(默认)(mix) | none | none |
码表默认态不覆盖:码表主路上没有拼音来源候选,code 与 code_hint 效果相同,改全局时码表方案跟着变。临时拼音的上级是当前方案,拼音方案下会落到「不显示」,所以默认态显式写 code。快捷输入的日期、计算这类候选带注释只是干扰,「快捷输入(默认)」即 mix 两态都不显示,自己新建的快捷输入也一样。拆字只给码表用户:码表、混输、临时拼音的详细态带拆字,全局(拼音方案落到这里)不带,拼音用户任何状态都看不到拆字。
竖排四格出厂都不写,同本行的横排格。所以只配全局两格就能用;日常看到的和升级前一样:码表补全剩余码,拼音候选按所在方案给编码或不显示。
解析链
按「当前态 × 当前排布(横 / 竖)」取一格,从具体到一般逐层找,第一个有值的胜出。优先级为模式 > 方案 > 方案类型 > 全局,全局是默认值:
模式 → 方案 → 方案类型 → 全局- 方案类型共五类:
codetable(码表)/pinyin(全拼)/shuangpin(双拼)/mixed(混输)/english(英文)。 - 方案层按当前方案算;方案文件不参与,见升级说明。
- 模式层的键:
temp_pinyin、temp_english、url、email、unicode、mix:<融合模式id>(如快捷输入是mix:quick_mix)、mix(界面叫「快捷输入(默认)」:某个融合模式自己没写的格先落到这里)、special:<方案id>(引导键特殊模式)。生僻字、反查、辅助码没有模式层。
格的取值:
| 写法 | 含义 |
|---|---|
| 模板 id | 用这个模板 |
none | 不显示注释,压过下层。与「不写」是两回事:不写是跟随 |
inherit(界面里的「跟随」) | 跳过本层,看下一层的同排布那一格 |
| 不写 | 横排格不写 = 跟随下一层;竖排格不写时,本行横排有值就同横排,横排也没有才跟随下一层 |
全局四格必有值:删掉某格时按内置的 code / full 补。
分配框
上方是「全局」:「默认」「详细」两态各一行,横排选模板或「不显示」,竖排第一项是「同横排」。下方只列有单独设置的方案类型、方案、模式,每项一张卡片,折叠时写明两态(如「默认 跟随上级」「详细 拼音 · 英文」),点开编辑:
- 每一态只有「跟随上级」「自定义」两种。跟随时写明跟到了谁、值是什么,如「与全局相同:编码」;模式的上级随当前方案变,写「当前方案怎么显示,这里就怎么显示」。
- 自定义时选横排模板;竖排选「同横排」或单独指定。
- 「删除」后这一项按上级显示。删掉的出厂设置会在列表下方提示,重新添加或「恢复默认」可找回;改过的出厂项展开后可「恢复此项出厂设置」。
底栏:「添加覆盖」(选作用范围与对象,已有设置的不列)、「恢复默认」(确认后清空全部分配,模板库不动)、(i) 优先级说明。
界面不提供「只改竖排、横排跟随上级」:在 config.toml 里手写这样的格照常生效,分配框照实显示「跟随上级」。
引用了不存在的模板 id 时,启动日志警告一次,该格按「不写」处理,不会报错。
默认 / 详细怎么切
- 持久状态
ui.comment.state:default/detail,写回配置,重启保持,所有作用范围共用。「注释切换与显示」里的「当前状态」改的就是它。 - 临时状态:只对当前这个候选窗,把持久状态取反;候选窗关闭(上屏、取消、清空)即丢弃,下一次输入回到持久状态。输入途中切进临时拼音这类模式,临时状态保留。
切换键与切换方式(「注释切换与显示 → 设置…」里的「切换键」「切换方式」,对应 ui.comment.switch_key 与 ui.comment.switch_mode):
switch_key | 含义 |
|---|---|
none | 不用切换键,只靠按键绑定、命令栏切换(与按键总览里的绑定撞键时可选它) |
f1(出厂)… f12 | 功能键,候选窗出现时按下即切换;没有候选时照常交给应用 |
ctrl | 左右 Ctrl 任一 |
lctrl / rctrl | 只认左 / 右 Ctrl |
alt / lalt / ralt | 左右 Alt 任一 / 只认左 / 只认右 |
switch_mode | 设置里的名称 | 行为 |
|---|---|---|
session(出厂) | 临时切换(本次候选窗) | 单击切换键,切本次候选窗的临时状态 |
persist | 切换当前状态 | 单击切换键,切持久状态并写回 ui.comment.state |
hold | 按住时显示另一态 | 按住期间显示另一态,松开恢复;Ctrl、Alt、功能键都可配。用 Ctrl 时,按住期间按 Ctrl 组合键(如 Ctrl+C),注释会短暂闪一下 |
- 只在候选窗出现时生效。Ctrl、Alt 要「单击」:按下到松开不超过 500ms,且中间没按别的键(Ctrl+C、Alt+Tab 之类组合不算)。
- 切换键与中英切换键、选词键组(
lrctrl)、会话按键绑定(如自己给 F1 绑了别的功能)撞键时,那些功能优先,切换键在这时不生效,设置页会给出提示。 - 有些键盘或程序会占用功能键:联想等笔记本的 F1 默认是静音(不按 Fn 发不出 F1),截图工具也常占 F1。按了没反应就换一个功能键,或改用 Ctrl / Alt。
- macOS 上 F1 默认是调亮度,要按 fn+F1,或在系统设置里打开「将 F1、F2 等键用作标准功能键」;macOS 暂时只认 F1 作切换键。
- Windows 上选 Alt 时,输入法会安装一个全局键盘钩子,只在候选窗出现时接管 Alt(并压住应用的菜单栏);选 Ctrl 不装这个钩子。
hold下按住 Alt 再按 Alt+数字,上屏的是眼前这份注释(配合alt_commit = "comment")。- 总开关关掉、或切换键选「无」时,切换键一概不拦。切换只重绘当前页,不重新查询,也不改变候选顺序和高亮。
按键与命令:
| 方式 | 写法 |
|---|---|
按键动词(keys.key_actions 与 keys.session_actions 都认) | comment_state 切持久状态;comment_state:default / comment_state:detail 直达 |
按键动词(只在 session_actions,即正在输入时) | comment_state:session 切本次候选窗的临时状态 |
| 命令栏 | ime.toggle("comment") 切持久状态;ime.set("comment", "default") / ime.set("comment", "detail") 直达 |
| 系统短语 | 打 cozs,选「切注释」,等价于 ime.toggle("comment") |
按键在「按键」页绑定,动词在列表里显示为「注释:…」。动词细节见按键配置,命令栏用法见命令直通车。
配置文件写法
对话框读写的就是用户配置的 [ui.comment]:
[ui.comment]
enabled = true # 总开关
state = "default" # 持久状态:default / detail
switch_key = "f1" # none / f1(出厂)…f12 / ctrl / lctrl / rctrl / alt / lalt / ralt
switch_mode = "session" # session(出厂)/ persist / hold
# 用户模板;与内置同 id 时覆盖内置
[[ui.comment.templates]]
id = "wubi_learn"
name = "五笔学习"
text = "${chaizi} ${code_rev}{ · ${pinyin}}"
# 作用范围 → 四格:default_horizontal / default_vertical / detail_horizontal / detail_vertical
# 竖排格不写 = 同本行横排格
[ui.comment.assign.global]
default_horizontal = "code"
detail_horizontal = "full"
[ui.comment.assign.type.codetable]
detail_horizontal = "wubi_learn"
[ui.comment.assign.schema.wubi86]
default_horizontal = "code_hint"
[ui.comment.assign.mode.temp_english]
default_horizontal = "none"
detail_horizontal = "en_zh"
detail_vertical = "inherit" # 竖排跳过本层,看下一层的竖排格
[ui.comment.assign.mode."mix:quick_mix"] # 表名里带冒号要加引号
default_horizontal = "pinyin"内置模板与出厂分配在安装目录的 data/system.comments.toml,不要改它;想让某条出厂分配失效,在用户分配里写 inherit。
内置的中英释义 0.129 新增
输入法自带两个注释词库,只能在模板里按库名取(${dict:en_zh}、${dict:zh_en})。不带库名的 ${dict}、${dict_all}
不查它们,所以以前写了 ${dict} 的模板升级后显示不变:
| id | 名称 | 内容 |
|---|---|---|
en_zh | 英汉释义 | 英文词 → 词性与基础中文义项 |
zh_en | 汉英释义 | 中文词 → 词性与基础英文义项 |
它们在「注释词库」页里标「内置」,只能启停,不能改路径;关掉后对应的模板(如 en_zh、full 里的英文部分)就查不到内容,所在可选段消失。词条的收录范围以随包数据为准,没有释义的词不显示。
分模式设置
反查类的信息(注音、拆字、词典释义)在大多数时候是干扰,只在特定场景才想看到。每个模式都可以在「分配」里有自己的一行, 进入该模式期间覆盖更一般的层,退出自动恢复。
可以配置的模式:
| 模式 | 分配里的键 |
|---|---|
| 临时拼音 | temp_pinyin |
| 临时英文 | temp_english |
| 网址输入 | url |
| 邮箱输入 | email |
| Unicode 输入 | unicode |
| 快捷输入(默认) | mix |
| 快捷输入等融合模式(每个实例独立,没写的格同「快捷输入(默认)」) | mix:<融合模式id> |
| 引导键特殊模式(每个方案独立) | special:<方案id> |
在分配框里用「添加模式覆盖」添加;某格留「跟随」就是不管这一格,沿用方案、方案类型、全局的设置。要明确不显示,选「不显示」(none)。
推荐用法:把词典释义只留给英文
如果你挂了英汉注释库,最好不要把 ${dict} 放进全局的模板,而是只给临时英文(和英文方案)用:
[ui.comment.assign.global]
default_horizontal = "code" # 中文输入时只显示编码
[ui.comment.assign.mode.temp_english]
detail_horizontal = "en_zh" # 打英文时,详细态才查词典
default_horizontal = "none" # 默认态不显示这样中文输入时输入法根本不会去查注释词库——不是"查得快",而是压根不查。出厂的临时英文与英文方案就是这样分配的: 默认态不显示注释,详细态显示英文释义。
升级说明
破坏性变更:旧的注释设置不迁移
0.129 重做了候选注释。下列旧设置升级后不再读取,也不会自动迁移,需要在新界面里重新设置;
旧键会在下次写回配置时从 config.toml 里清掉。没改过这些设置的,升级后效果与原来一样,不用动。
| 旧设置(配置键) | 现在去哪设 |
|---|---|
候选注释开关(ui.candidate.comment_enabled) | 外观 › 候选标注 › 候选注释 的开关(ui.comment.enabled) |
全局注释模板(ui.candidate.comment_template_vertical / _horizontal) | 「注释模板」里新建模板,再到「候选注释 › 设置」把全局格选成它 |
各模式的注释模板(input.temp_english / temp_pinyin / url / email / unicode 与 schema.mix_modes[] 里的 comment_template_*) | 分配框里「添加覆盖 › 模式」 |
拼音「编码提示来源」(schema.pinyin.code_hint_source,更早的 show_code_hint) | 拼音方案页「编码提示」旁的「去设置」,即拼音、双拼方案类型的默认态 |
临时拼音「编码提示」(input.temp_pinyin.code_hint_source) | 临时拼音页「编码提示」旁的「去设置」,即「临时拼音」与「快捷输入(默认)」的默认态 |
混输「拼音候选显示码表编码」(schema.mix.pinyin_code_hint) | 混输方案页同名项旁的「去设置」,即混输方案类型的默认态 |
方案文件 / schema_overrides\<方案ID>.toml 里 [candidate]、[overlay] 的 comment_template_* | 分配框里「添加覆盖 › 方案」,或「模式」里的引导键特殊模式(special:<方案id>);启动时日志会警告一次 |
另一处行为变化:注释的默认 / 详细切换键出厂是 F1(候选窗出现时按一下),见默认 / 详细怎么切。
长度控制
「注释最大字数」在「外观 → 候选标注 → 注释切换与显示 → 设置…」里,横排、竖排各一份;超出后截断并加省略号,0 表示不限。
它与「候选文本最大字数」(只管候选词本身)、候选项提示的「单行最大字数」(只管悬停提示)是三个不同的设置,
调那两个对注释不起作用。
候选窗不支持文字折行,注释过长时会被窗口右边缘裁掉,所以:
- 竖排每行独占一行,空间较宽裕,放注音或字根都合适;
- 横排所有候选共享一行宽度,注释稍长就会明显撑宽窗口。
这也是横排与竖排分开配置的原因。
- 开启注释显示在候选上方后,字数上限按每段计算 0.124 新增:上方条与右侧 注释各自数各自的,互不挤占;关闭时含义不变。
- 竖排下即使不限字数,一行放不下时也是注释让步 0.125 新增:候选词优先完整显示, 注释截断加省略号,不会再把候选词挤成「…」。
完整示例
下表每行是一个模板串,在「模板库」新建后分配到相应的格。
| 场景 | 模板串 | 分到 |
|---|---|---|
| 五笔用户:看注音和字根 | {〔${chaizi}〕}{ ${pinyin}} | 详细·竖 |
| 五笔用户:横排只留编码提示 | ${code_hint} | 默认·横 |
| 拼音用户学五笔:显示五笔编码 | {[${code_rev}]} | 默认·竖 |
| 拼音用户学五笔:横排 | ${code_hint|code_rev} | 默认·横 |
| 忘了某个字的双拼怎么敲(全拼方案下同样有效) | ${shuangpin} | 默认·竖 |
| 双拼 + 五笔两种码一起看(拼音方案下把默认态分配给这条模板即可) | ${code_hint|code_rev}{ [${shuangpin}]} | 默认·竖 |
| 悬停提示同款信息(字根 + 编码 + 读音),只对单字有完整效果 | {${chaizi}}{ [${chaizi_code}]}{ ${pinyin}} | 详细·竖 |
| 拼音悬在候选上方,拆字和词库释义留在右侧(需打开「注释首行显示在候选上方」) | {拼:${pinyin}}\n{〔${chaizi}〕}${dict} | 详细·竖 |
| 完全不显示 | —— | 选「不显示」,或关掉总开关 |
配置项参考
对应的配置键、取值范围与默认值见外观配置。
对这篇文档有疑问,或发现内容有误?
欢迎到文档仓库提 issue,写明问题时附上本页链接即可。