用 insert_snippet 只能插入启动时的时间快照,${year}等变量仅初始化解析一次;需实时时间必须用 insert_date 命令或自写 TextCommand 插件。

用 insert_snippet 绑定快捷键最稳,但只能插「启动时的时间快照」
很多人配了 insert_snippet + ${year}-${month}-${day}T${hour}:${minute}:${second} 后发现:反复按快捷键,插入的全是同一个时间。这不是配置错了,是 Sublime 的设计行为——${year} 等变量只在编辑器启动那一刻解析一次,之后再触发都是复用这个快照。
适合场景:写固定模板(如文件头、标准注释),不需要每次都是“此刻”。
- Windows/macOS/Linux 行为完全一致,
${month}永远输出06(不是6),自动补零 - 别用
${CURRENT_MONTH},它不补零,且 ST4 已逐步弃用 - 快捷键配置里
keys必须是数组:["ctrl+alt+t"]✅,"ctrl+alt+t"❌ - 内容里不能有换行或全角空格,否则插入结果带不可见字符
要插「每次都是当前时刻」,必须用 insert_date 命令
insert_date 是 Sublime 内置命令,每次执行都调系统实时时间,支持 strftime 格式,才是真动态。
常见错误是复制了中文引号或全角冒号,导致按键无反应或原样输出字符串。
- 正确写法:
{"keys": ["ctrl+shift+t"], "command": "insert_date", "args": {"format": "%Y-%m-%d %H:%M:%S"}} - 不支持
%f(毫秒)、%z(时区)、%c(locale 依赖格式),跨平台易乱码 - Windows 用户慎用
ctrl+alt+d类热键——容易被输入法或显卡驱动拦截 - 它只在第一个光标位置插入,不处理多光标;想每个光标都插,得写插件
需要毫秒、时区或 ISO 8601 带 T 分隔符?手写 TextCommand 插件最可控
内置 insert_date 不支持 %Y-%m-%dT%H:%M:%S 这种格式(T 会被当普通字符),也不支持 +08:00 时区。这时候必须自己写 Python 插件。
关键不是“能不能写”,而是缩进错一格就静默失效,且必须用 datetime.now(),别绕路用 time.time()。
- 文件路径:
Packages/User/insert_datetime.py - 类名必须以
Command结尾,继承sublime_plugin.TextCommand - 多光标天然支持:遍历
self.view.sel()即可,每个选区独立插入当前时间 - 示例格式:
"%Y-%m-%dT%H:%M:%S.%f"[:23] + "+08:00"→2026-06-15T14:30:22.123+08:00
别碰「自动插入时间戳」类插件,比如 AutoInsertDate
这类插件监听 on_pre_save,一保存就往文件里塞时间,没有白名单、无法跳过已有时间行、撤回困难。
你改了个 README.md,它可能在第 1 行、第 5 行、甚至空行都插一遍,调试时根本分不清是谁干的。
- 推荐替代方案:用
DateTime或InsertDate插件,它们只响应手动触发,行为可预测 -
DateTime默认插 ISO 时间,改用户配置里的"format"就能定制,比如"%Y-%m-%d_%H-%M" - 所有插件配置里引号必须英文半角,JSON 多一个逗号,Sublime 就静默忽略整段
${year} 实现动态效果,那只会浪费半小时排查“为什么时间不动”。


















