最可靠方法是用insert_snippet命令配合自定义snippet,支持php风格时间格式符(如y-m-d h:i:s),轻量无兼容风险;macro方案用$current_*变量实现快捷键插入;毫秒需用timestamp插件。

用 insert_snippet 命令 + 时间格式化片段最可靠
Sublime Text 本身不内置“插入当前时间”快捷键,但通过自定义 snippet 配合 insert_snippet 命令,能稳定输出格式可控的时间戳。比插件更轻量、无兼容风险,也避免 Python 版本升级后插件失效的问题。
常见错误是直接搜“sublime time plugin”,结果装了过时的 InsertDate(已多年未维护,Sublime 4 下常报 AttributeError: 'NoneType' object has no attribute 'view')。
- 新建文件,保存为
Packages/User/insert_timestamp.sublime-snippet - 内容写成:
<snippet> <content><![CDATA[<${1:Y-m-d H:i:s}> ${2:log}]]></content> <tabTrigger>ts</tabTrigger> <scope>text.plain,source.log,source.shell</scope> </snippet> - 关键在
${1:Y-m-d H:i:s}—— Sublime 的 snippet 支持 PHP 风格时间格式符,Y是 4 位年份,i是两位分钟,s是两位秒(不是SSS或fff) - 触发方式:输入
ts+Tab,光标会停在时间格式占位符上,可直接编辑成Y-m-d H:i或删掉只留Y-m-d
想按快捷键一键插入?绑定 run_macro_file 最省心
如果每次都要打 ts 太慢,用 macro + 快捷键更贴近日志场景。注意别误用 insert_snippet 直接绑定快捷键——它不支持动态生成时间,只能插固定字符串。
- 新建 macro 文件
Packages/User/insert_now_time.sublime-macro,内容为:[{"command": "insert_snippet", "args": {"contents": "${1:$CURRENT_YEAR}-${2:$CURRENT_MONTH}-${3:$CURRENT_DAY} ${4:$CURRENT_HOUR}:${5:$CURRENT_MINUTE}:${6:$CURRENT_SECOND}"}}] - 在
Preferences → Key Bindings中加一条:{"keys": ["ctrl+alt+t"], "command": "run_macro_file", "args": {"file": "res://Packages/User/insert_now_time.sublime-macro"}} -
$CURRENT_*是 Sublime 内置变量,只在 macro 中生效;$DATE已废弃,$TIME不支持自定义格式 - 该方案在 Windows/macOS/Linux 上行为一致,但注意
ctrl+alt+t在某些输入法下可能被拦截,可改用alt+shift+t
日志文件里要带毫秒?得用插件,但必须选对
原生 snippet 和 macro 都不支持毫秒($CURRENT_MILLISECOND 不存在),硬凑 ${1:$CURRENT_SECOND}.${2:000} 没意义。这时候只能靠插件,但得避开坑:
- 推荐
TimeStamp(作者:wbond),不是同名老插件TimeStamping(已停止更新) - 安装后默认快捷键是
ctrl+shift+t,输出形如2024-05-22 14:38:21.482,毫秒由 Pythondatetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:23]生成 - 如果发现插入后光标跳到行首,说明插件没适配 Sublime 4 的 API 变更,删掉重装最新版(v2.1.0+)
- 别用
InsertDate改源码加毫秒——它的time.time()调用没做时区处理,跨时区机器上容易错 8 小时
时间格式总对不上?检查文件语法和作用域
明明写了 Y-m-d 却输出成 2024/05/22,大概率是 snippet 的 <scope></scope> 没匹配当前文件类型,导致 fallback 到全局 snippet 或其他插件逻辑。
- 打开日志文件,按
Ctrl+Shift+P→ 输入View Package File→ 查看右下角显示的语法名(如Plain text、Log File) - 把 snippet 的
<scope></scope>改成对应值,比如日志文件常用source.log或text.plain,Shell 脚本日志则加source.shell - 测试方法:在目标文件里输
ts+Tab,没反应就说明 scope 不匹配;临时改成<scope>* </scope>看是否生效(生效再逐步收紧) - Mac 上部分终端日志文件被识别为
text.log(带点),不是source.log,注意点号要转义或换通配
时间戳这事看着小,但格式错一位、毫秒少三位、时区偏八小时,在查线上问题时就是卡住一小时的起点。别信“一键解决”的插件宣传,先看清楚你贴进去的到底是 $CURRENT_SECOND 还是 ${1:Y-m-d}。










