可用insert_snippet命令配合${current_year}等动态变量录制宏实现:先录宏→插入snippet→保存为.sublime-macro→绑定快捷键;因宏不支持实时求值,必须用snippet变量而非固定文本。

怎么用 Sublime 的 .sublime-macro 文件插入当前时间戳
Sublime 本身不带时间戳插入功能,但能通过录制宏 + 绑定快捷键实现——关键是宏里不能写死时间,得靠 insert_snippet 命令动态生成。直接录“输入 2024-05-20”这种操作没用,下次运行还是旧时间。
- 打开命令面板(
Ctrl+Shift+P或Cmd+Shift+P),输入Record Macro并回车 - 立刻按
Ctrl+Shift+P→ 输入Insert Snippet→ 回车 → 粘贴下面这段 JSON 到弹出的临时文件里并保存为timestamp.sublime-snippet:
<snippet>
<content><![CDATA[<!-- ${1:note} --> ${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE} ${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}</content>
<tabTrigger>ts</tabTrigger>
</snippet>- 回到命令面板,选
Stop Recording Macro,再选Save Macro...,存为insert_timestamp.sublime-macro - 最后在
Preferences → Key Bindings里加一条绑定:
[{"keys": ["ctrl+alt+t"], "command": "run_macro_file", "args": {"file": "Packages/User/insert_timestamp.sublime-macro"}}]为什么必须用 insert_snippet 而不是普通文本插入
因为 CURRENT_YEAR 这类变量只在 snippet 上下文里被 Sublime 实时解析;如果用宏录下“打字输入 2024”,它就真变成固定字符串了。你看到的时间永远是录制那一刻的,不是每次触发时的实时时间。
-
insert_snippet是唯一支持${CURRENT_XXX}动态字段的内置命令 - 宏本质是命令序列回放,它不执行逻辑判断,也不重新求值
- 哪怕你在宏里插入了
run_command,也调不到 Python API(比如time.strftime),除非写插件
timestamp.sublime-snippet 里那些变量怎么选
Sublime 提供的日期变量不多,但够用。注意大小写和拼写,错一个字母就不会替换,原样输出。
-
${CURRENT_YEAR}:4 位年份(如2024),别用${YEAR}(不存在) -
${CURRENT_MONTH}:补零两位(05),不是${MONTH} -
${CURRENT_DATE}:当月几号(20),不是${DAY} -
${CURRENT_HOUR}:24 小时制(14),${CURRENT_HOUR_12}才是 12 小时制 - 没有秒的毫秒级精度,
${CURRENT_SECOND}是整秒
绑定快捷键后没反应?常见卡点
最常发生的不是配置错,而是路径或作用域问题。
- 确保
insert_timestamp.sublime-macro存在Packages/User/目录下,不是子文件夹 - 快捷键冲突:检查是否被其他插件占用(比如 Git 插件常用
ctrl+alt+t),换一个试试 - Snippet 文件名必须以
.sublime-snippet结尾,且内容是合法 XML(标签闭合、无中文引号) - 如果只在某些语法高亮模式下失效,说明 snippet 的
<scope></scope>限制了适用范围,删掉那一行即可通用
真正麻烦的是想加毫秒、星期、ISO 格式这些——那已经超出 snippet 变量能力,得写 Python 插件。宏这条路,到此为止。










