VSCode原生支持$CURRENT_YEAR等6个静态时间变量,仅在片段插入时计算一次,不可实时更新;可通过拼接变量生成日期格式如“$CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE”,但不支持补零或毫秒,需插件或自定义命令实现。

VSCode代码片段里怎么用$CURRENT_YEAR这类变量
VSCode原生不支持$CURRENT_YEAR、$TODAY或$NOW这类动态时间变量。所有$开头的占位符(如$1、$TM_FILENAME)都是静态的——它们在片段触发时求值一次,之后不再更新。时间类变量属于“只读上下文变量”,而VSCode目前(v1.90)仅内置了$CURRENT_YEAR、$CURRENT_MONTH、$CURRENT_DATE、$CURRENT_HOUR、$CURRENT_MINUTE、$CURRENT_SECOND这6个,且**全部只在片段插入瞬间计算,无法实时刷新**。
常见误区是以为$CURRENT_DATE能像模板引擎一样持续更新,实际它只是插入那一刻的YYYY-MM-DD字符串,和系统时钟无关。
正确写法:组合内置变量拼出完整时间格式
VSCode允许用连字符、斜杠、冒号等符号直接拼接多个时间变量,不需要额外函数或转义。
-
"date": "$CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE"→2024-06-15 -
"datetime": "$CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND"→2024-06-15 14:23:07 -
"iso": "$CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATET$CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND"→2024-06-15T14:23:07
注意:$CURRENT_HOUR是24小时制,无前导零;$CURRENT_MONTH和$CURRENT_DATE也都不补零,所以2024-6-5是合法输出。如果需要补零(如06),VSCode原生不支持,得靠插件或外部脚本。
想自动补零或加毫秒?必须用插件或自定义命令
原生Snippets无法做字符串格式化(比如padStart(2, '0')),也没法调用JavaScript。要实现2024-06-15 14:02:07.123这种带毫秒、补零的格式,只有两个可行路径:
- 装插件:
Insert Date String(by jsynowiec)提供快捷键插入多种预设格式,支持毫秒和补零,但不能嵌入Snippet中自动触发 - 写自定义命令:在
package.json里注册一个command,用VSCode API调用new Date().toISOString(),再用editor.insert()写入;然后在Snippet里用"body": ["$1", "${2:run date command}"]并绑定快捷键——但这已超出Snippets能力边界,本质是用命令替代片段
别试${TM_SELECTED_TEXT/.../}正则替换时间变量:那些变量在正则执行前就已展开为固定字符串,无法二次处理。
实际配置示例:一个带注释头的TypeScript片段
把下面内容存为typescript.json,放在~/.vscode/snippets/(macOS/Linux)或%USERPROFILE%\AppData\Roaming\Code\User\snippets\(Windows):
{
"file header with datetime": {
"prefix": "hdr",
"body": [
"/**",
" * @file ${1:filename}",
" * @created $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE $CURRENT_HOUR:$CURRENT_MINUTE",
" * @author ${2:Your Name}",
" */",
"",
"${0:// code here}"
],
"description": "Insert file header with current date and time"
}
}
触发hdr后,会插入类似:
/** * @file filename * @created 2024-6-15 14:28 * @author Your Name */ <p>// code here</p>
记住:这个时间戳是“快照”,不是“时钟”。如果编辑器开着一整天,再次触发还是插入当时的日期时间,不会变。











