设置说明外观设置

候选注释

用模板配置候选词右侧小字显示的内容——编码提示、带声调注音、拆字字根,横排与竖排可分别设置

v0.131.0

候选注释是候选词右侧的那行小字。默认显示编码提示(如五笔前缀候选的剩余编码),你可以把它 改成注音、拆字字根,或几种信息的组合。

这是进阶定制

默认配置已适合大多数人。本页面向的是想在候选窗里看到注音或字根的用户——尤其是形码方案 (打得出但不确定怎么读)与正在学习编码的用户。

设置位置:设置工具 →「外观」→「候选标注」。

完全用不到注释时,关掉「候选注释」那一行的开关(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} 不要求你正在用双拼。用哪份布局按这个顺序找:

  1. 当前方案本身是双拼 → 用它的布局
  2. 否则看「主拼音方案」(schema.primary_pinyin)是不是双拼 → 用它的
  3. 否则用方案列表里第一个双拼方案
  4. 一个双拼方案都没装 → 这一项为空

所以全拼用户只要装了双拼方案,候选旁边就能挂着对应的双拼码——想从全拼转双拼时, 这就是一份跟着你打字走的对照表。

出厂模板用 ${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,全部内容都在右侧,与关闭时一致。

两条写法约束:

  1. \n 要写在可选段 { … } 之外。写在段内时,该段为空则 \n 一并消失,内容会落到右侧而不是上方:

    ${pinyin}{\n${chaizi}}     ← 错:拆字为空时 \n 消失,拼音掉到右侧
    ${pinyin}\n${chaizi}       ← 对
  2. 上段的装饰文字也要包进 { … },否则上段变量为空时会孤零零留下装饰:

    拼:${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 时,用户的覆盖内置的。

出厂分配

下表没列的格都是「跟随」,落到下一层。

作用范围默认·横详细·横
全局codepinyin_en
码表方案跟随chaizi_pinyin
拼音 / 双拼方案不显示跟随
混输方案code_revchaizi_pinyin
英文方案不显示en_zh
临时英文不显示en_zh
临时拼音codechaizi_code
快捷输入(默认)(mix)nonenone

码表默认态不覆盖:码表主路上没有拼音来源候选,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,写明问题时附上本页链接即可。

去提 issue →

本页目录