跳转至

时间与动态数据插件 (Shijian)

市面上的时间插件大多只能提供固定的格式,而万象的 shijian 插件是唯一一个将“格式化与展示逻辑”完全交由用户定义的插件。

除了具备极高的兼容性与灵活度,它不仅支持通过特定编码调出候选,更开放了底层引擎——你可以直接在 custom_phrase.txt 或 super_replacer 的外挂 txt 中引入这些占位符,实现极其强大的动态候选词构建。


1. 唤醒前缀定制

你可以在方案的 key_binder/shijian_keys 中自由定制触发前缀。

key_binder/shijian_keys: ["/", "o"] 

对于这个前缀,后面的内容无法修改。肯定也有人希望使用更合适的自定义内容,但由于这套系统涉及的类型和样式较多,完全开放自定义反而容易带来配置混乱,同时还需要处理九键输入中数字与字母的对应关系。因此,这一环节暂不开放自由自定义,而是采用受控方式逐步提供支持。

那么,是不是我想用 op 输入时间就没办法了呢?其实万象还提供了另一种实现方式,详见该末尾: 万象候选动态格式化说明。

  • 效果:你可以使用 /sj 也可以使用 osj 调出时间。
  • 高阶用法:如果你的方案中字母 o 承担了其他作用,可以直接在列表中删掉 "o",完美规避按键冲突,灵活度极高。

2. 内置命令速查表

内置功能均固定了后两位编码(以形成肌肉记忆),前缀可随配置变化(下表以 / 和 o 为例)。

功能 触发编码 说明
时间 /sj 或 osj 输出当前时间
日期 /rq 或 orq 输出当前日期
农历 /nl 或 onl 输出农历日期
星期 /xq 或 oxq 输出今天是星期几
年中周 /ww 或 oww 输出今天是今年的第几周
节气 /jq 或 ojq 输出临近节气
日期+时间 /dt 或 odt 综合输出
时间戳 /tt 或 ott 输出当前时间戳
时区查询 /utc 或 outc 查询热门城市的 UTC 时间
英文日期 /ed 或 oed 输出英文日期
节日 /jr 或 ojr 输出近期节日
问候模板 /day 或 oday 输出早安/午安/晚安等问候语

3. 日期差计算 (魔法计算器)

触发编码:/rc 或 orc

为了保证 rq (日期) 能在输入后直接用数字键上屏候选,万象的日期差逻辑经过了精心设计:将加减符号后置。

这样设计的好处是:电脑主键盘无需刻意按 Shift 键,直接敲击 - 或 = 即可;手机上的 o 和 p 键也能完美兼容代偿,小键盘的 - + 同样可用。

  • 计算未来日期:/rc26+ 、 /rc26p 、 /rc26= (加上指定天数)
  • 计算过去日期:/rc26- 、 /rc26o (减去指定天数)

4. N模式:极速日期录入

在大写字母 N 后紧跟数字,即可触发安全占位逻辑的数字日期模式,输入完毕后可直接使用数字键上屏(兼容 QWERTY 代替 123456 上屏)。

  • 4位数模式 (月日):输入 N0101 或 N0312,自动输出当前年份的短位日期,并有类似:上周三,距今多少天特色候选。
  • 8位数模式 (年月日):输入 N20250315,输出完整指定的年月日格式。
  • 日期差模式 (年月日-年月日):输入 N20250315-20260125,输出日期差绝对值。

N模式同样继承了date_formats强大的自定义能力,它的输出类型、格式、顺序、候选数,每一项均可在 YAML 中由你一手掌控。


5. YAML 全局格式化引擎

对于 /rq、/sj、/dt、/ed 以及 N模式,你可以在 YAML 中自由定义它们的输出格式集合:

date_formats:
  - "Y年m月d日"
  - "Y-m-d"
  - "Y/m/d"
  - "Y.m.d"
  - "Ymd"
  - "Y年n月j日"
  - "y年n月j日"
  - "n月j日"
time_formats:
  - "H:M"
  - "H点M分"
  - "H:M:S"
  - "H时M分S秒"
  - "下午I:M"
  - "I:M P"
datetime_formats:
  - "Y-m-d H:M:S"
  - "Y-m-dTH:M:S O"
  - "YmdHMS"
  - "Y年m月d日 H点M分"
  - "y/m/d I:M p"
english_date_formats:
  - "B j, Y"
  - "j b Y"
  - "E, B j, Y"

要注意你写了几行就意味着候选有几个,顺序则代表了候选顺序,常用什么完全自由搭配,这样的时间插件你见过吗?

占位符字典 (YAML环境)

类型 占位符 说明 示例
年 Y / y 四位年份 / 两位年份 2025 / 25
月 m / n 补零月份 / 不带零月份 02 / 2
日 d / j 补零日期 / 不带零日期 09 / 9
时(24) H / G 补零24小时 / 不带零 08 / 8
时(12) I / l 补零12小时 / 不带零 08 / 8 (小写L)
分/秒 M / S 分钟 / 秒 (均带前导零) 05 / 09
上下午 p / P 小写 am/pm / 大写 AM/PM am / AM
时段 A 中文时段描述 凌晨 / 上午 / 中午 / 下午 / 晚上
中文星期 C / D 星期 / 周 星期一 / 周一
英文星期 E / F 英文全称 / 简称 Monday / Mon
周数 w ISO 8601 年中周数 36
英文月份 B / b 英文全称 / 简称 September / Sep
时区 O / o 带冒号时区 / 不带冒号 +08:00 / +0800
  • 转义规则:
  • \X:转义单个字符 X 按字面量输出(如 \Y 强制输出大写Y)。
  • [[...]]:区块整体按字面量输出,不受占位符解析影响。

6. 高阶玩法:自定义简码的动态格式化

这是万象时间插件独步天下的杀手锏功能。

除了上述由shijian.lua插件提供的功能以外,你完全可以在 custom_phrase.txt、super_replacer 等外部文件中写入另一种占位功能,直接使用转义符构建“自带时间感知”的动态候选词!此功能由super_filter.lua提供,因为其作用域是任意候选词所以他的占位面临诸多挑战,比如原候选输出,还是输出转译后的内容,所以我们必须设计另一套占位符来适应这个复杂的环境,如下:

两套格式化能力目前已经基本对齐:年、月、日、时分秒、上下午、时段、中文/英文星期、ISO 周数和时区都可以动态输出。需要注意的是两种环境的写法并不完全相同:YAML 环境使用 n 表示不补零月份,并额外支持 B / b 英文月份;候选动态格式化使用 \N 表示不补零月份,并额外提供 \T / \K 时辰与刻钟。

万象候选动态格式化说明

1. 时间动态占位 ( \ + 字母 )

代码 含义 示例输出 代码 含义 示例输出
\T 时辰 午时 \K 刻钟 三刻
\Y 年份(四位) 2025 \y 年份(两位) 25
\m 月份(补零) 01 \N 月份(不补零) 1
\d 日期(补零) 09 \j 日期(不补零) 9
\H 时(24h补零) 08 \G 时(24h无零) 8
\I 时(12h补零) 08 \l 时(12h无零) 8
\M 分钟(补零) 05 \S 秒钟(补零) 09
\C 中文星期 星期一 \D 中文周 周一
\E 英文星期全称 Monday \F 英文星期简称 Mon
\w ISO 8601 年中周数 36 \A 时段描述 下午
\p am/pm am \P AM/PM AM
\O 时区(带:) +08:00 \o 时区(无:) +0800

注意:当前 super_filter.lua 中中文星期使用 \C / \D,\w 表示 ISO 周数;旧说明中的 \W 不再是时间占位符。

2. 数量重复宏 ( 字符 + \ + 数字 )

用于快速生成重复文本或占位符:

  • a\3 ➡️ aaa
  • 哈\5 ➡️ hhhhh (结合下方自定义词库示例)
  • !\10 ➡️ !!!!!!!!!!

3. 基础排版转义

  • \n:换行符
  • \s:空格符
  • \t:制表符
  • [[...]]:区块内不解析。例如 [[\Y]] 将直接输出文本 \Y,而不会变成 2025。

终极应用示例 (txt 词库编写)

在你的 lua/data/others.txt 或 custom_phrase.dict.yaml 中写入以下内容,即可实现对应的魔法输入体验:

# 示例 1:古典报时,写在custom_phrase.dict.yaml里
\T\K    csck    5

# 解读:输入csck候选出现输出: -> 1.此时此刻 2.\T\K ,然后卵生候选又被格式化,最终输出: -> 1.此时此刻 2.午时三刻

lua/data/others.txt中格式稍有不同编码在前:

csck    \T\K

# 示例 2:动态重复
哈\5 hhhhh   5           # 输出 -> 哈哈哈哈哈

# 示例 3:一键古诗排版(结合换行与空格重复)
静夜思\n\s\3李白\n床前明月光\n疑是地上霜\n举头望明月\n低头思故乡 jys 5
# 输出 -> 
#   静夜思
#    李白
# 床前明月光
# 疑是地上霜...

# 示例 4:在日常短语中带入当天日期
修改时间\Y-\m-\d    xgsj    5   # 输出 -> 修改时间2025-04-20

自定义任何编码置顶的时间/日期输入,如下所示,你可以让ot、oi任意编码打出来这些候选,编码你随意,顺序按需求降序654321就行,类型参考txt文档所示的占位方式去写即可,不会的可以将最终日期的样式写出来,然后把上面占位发给AI,让其按你的实际格式进行占位修改。

\H:\M   ot  5
\H点\M分  ot  4
\H:\M:\S    ot  3
\H时\M分\S秒   ot  2
\A\H:\M ot  1

\I:\M   oi  5
\l点\M分  oi  4
\I:\M:\S    oi  3
\A\l:\M oi  2
\I:\M \P    oi  1
从示例中我们可以看出,txt写的更加偏向于混合候选,是 范式文本+动态时间 的用法,两个形态的时间铸就了无死角的体验。