vscode原生snippets不支持动态日期或用户名,但可通过tm_year变量和$1/$2占位符实现一键插入可编辑版权头;复杂需求(如git作者识别、年份区间、自动更新last modified)需用file header插件。

如何用 VSCode 代码片段(snippets)自动插入版权头注释
直接说结论:VSCode 原生 snippets 本身不支持动态生成当前日期或用户名,但配合 File Header 插件或自定义 snippet + 变量占位,能实现“一键插入可编辑的版权头”,无需每次手动改年份/作者。纯 snippet 方案适合固定模板,插件方案更适合真实项目维护。
纯 snippet 方案:用 $1、$2 和 TM_YEAR 实现半自动填充
VSCode 内置变量 TM_YEAR、TM_FILENAME、USER 可用于 snippet,但注意:USER 在 Windows 上常为空,TM_YEAR 是静态值(触发时计算一次),不能自动更新年份。实际效果是“插入时填入当前年”,不是“保存时刷新”。
- 在用户 snippet 文件(
code --open-user-snippets→ 选语言如javascript.json)中添加:
"Copyright Header": {
"prefix": "copyhead",
"body": [
"/**",
" * @copyright Copyright (c) ${TM_YEAR} ${1:Your Name}",
" * @author ${2:your.email@example.com}",
" * @version ${3:1.0.0}",
" * @since ${4:1.0}",
" */"
],
"description": "Insert copyright header"
}
-
$1、$2是 tab 停留点,插入后可快速修改 -
${TM_YEAR}在 snippet 触发瞬间展开为当年数字,比如 2024 - 不要用
DATE或CURRENT_YEAR—— 这些不是 VSCode 原生变量,会原样输出 - 对 TypeScript/Python 等不同语言,需分别配置对应语言的 snippet 文件,否则不生效
为什么不用插件?你可能低估了文件头的复杂性
纯 snippet 在新建文件时好用,但遇到这些情况就卡住:
- 已有文件首次插入头注释,要自动识别已有内容、避免重复添加
- 需要按 Git 用户配置作者名(
git config user.name),而不是写死 - 要求“年份区间”如
2022–2024,而非单年 —— snippet 无法判断文件创建/修改时间 - 某些团队规定头注释必须紧贴文件顶部、前面不能有空行 —— snippet 插入位置不可控
这时候推荐 File Header 插件(作者:yanfei-chen),它通过 fileheader.configObj 配置支持 createFileTime、updateFileTime、author 自动读取 Git 配置,并允许正则匹配跳过已有头注释。
插件配置关键项:别漏掉 autoAddLastModified
很多人配完发现“修改文件不更新 Last Modified”,是因为默认关闭该功能。在 settings.json 中确认含以下项:
"fileheader.configObj": {
"autoAddLastModified": true,
"createFileTime": true,
"author": "your-name",
"email": "your@email.com"
},
"fileheader.cursorMode": {
"description": "描述",
"param": "参数",
"return": "返回"
}
-
autoAddLastModified开启后,保存时自动更新@lastmodified行(需模板里存在该字段) -
createFileTime仅在新建文件时写入创建时间,不会覆盖已有时间 - 模板中用
${date}、${time}、${year}—— 这些是插件变量,不是 VSCode 原生的 - 如果项目用多 Git 账号(如 work/personal),插件默认读全局
git config,需确保当前 repo 的user.name正确
真正麻烦的是跨语言一致性 —— Python 用 """,JS 用 /** */,Go 用 //,每种都要单独配 fileheader.customMade 模板。一个没配全,新文件就裸奔。











