Sublime如何快速插入时间戳?(自定义宏方法)

2次阅读

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

Sublime如何快速插入时间戳?(自定义宏方法)

怎么用 Sublime 的 .sublime-macro 文件插入当前时间戳

Sublime 本身不带时间戳插入功能,但能通过录制宏 + 绑定快捷键实现——关键是宏里不能写死时间,得靠 insert_snippet 命令动态生成。直接录“输入 2024-05-20”这种操作没用,下次运行还是旧时间。

  • 打开命令面板(Ctrl+Shift+PCmd+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 插件。宏这条路,到此为止。

text=ZqhQzanResources