vscode原生不支持新建文件即填模板,必须通过用户代码片段(json配置)实现;需用cmd+shift+p/ctrl+shift+p打开configure user snippets,选择对应语言文件(如vue.json),确保scope正确、语言模式识别无误,再配置body数组格式的模板内容。

VSCode 原生不支持“新建文件即填模板”,所有稳定可用的代码模板都必须走 user snippets 路线——不是插件、不是设置开关,就是编辑 JSON 文件。
怎么打开对应语言的 snippets 配置文件
快捷键 Cmd + Shift + P(macOS)或 Ctrl + Shift + P(Windows/Linux),输入 Configure User Snippets 回车;然后从列表里选目标语言(如 javascript.json、python.json、vue.json),或者选 New Global Snippets file 创建跨语言通用片段。
关键点:
- 选错语言文件 = 模板根本不会触发——比如在
.vue文件里写log却配在javascript.json里,VS Code 不认 -
vue.json必须存在且内容合法,否则 Volar 插件无法匹配 scope - 全局片段(global)对所有语言生效,但容易污染提示列表,建议优先按语言隔离
写 snippet 时 body 为什么总换行失败或缩进错乱
body 是字符串数组,每行一个元素,不能用 \n 拼接,也不能靠空格模拟缩进。错误写法:"body": ["const a = 1;\nconsole.log(a);"];正确写法是显式拆成多行:
{
"Log with name": {
"prefix": "cln",
"body": [
"console.log('${TM_FILENAME_BASE}', $1);",
"$2"
],
"description": "Log filename and value"
}
}
常见坑:
- 缩进不统一:项目用 2 空格,你写 4 空格 → 保存时被 Prettier 自动改掉,导致格式崩坏
- 末尾漏空字符串:Vue SFC 模板中
<template></template>和<script setup></script>之间必须用""表示空行,写成" "或直接跳过会连成一行 -
$1写成${1}或$1$→ 占位符失效,Tab 键跳不过去
Vue 单文件组件模板为什么输 vue 没反应
不是配置写错了,而是 VS Code 根本没把当前文件识别为 Vue 语言环境。检查三件事:
- 右下角状态栏是否显示
Vue?如果不是,点击它手动切换语言模式 - 确认已安装并启用
Volar(非 Vetur),且files.associations设置含"*.vue": "vue" -
vue.json里 snippet 的scope字段必须是"vue",不能留空、不能写"html",否则不匹配
一个能直接粘贴进 vue.json 的最小可用模板:
{
"Vue SFC (setup)": {
"scope": "vue",
"prefix": "vue",
"body": [
"<template>",
" <div>$1</div>",
"</template>",
"",
"<script setup>",
"$2",
"</script>",
"",
"<style scoped>",
"$3",
"</style>"
]
}
}
如何让模板带动态内容(如文件名、年份)
VS Code 内置变量直接写进 body 字符串里即可,不需要额外函数调用。常用变量有:
-
${TM_FILENAME_BASE}:当前文件名(不含后缀),适合生成组件名、类名 -
${CURRENT_YEAR}:四位年份,用于版权注释 -
${CURRENT_DATE}:格式为YYYY-MM-DD -
${SELECTION}:自动包裹选中文本,适合快速加console.log或注释
注意:${TM_FILENAME_BASE} 在未保存的临时文件里为空,首次保存后才生效;${CURRENT_* 类变量每次插入都是实时值,无需刷新。
真正难的是 scope 匹配和语言模式识别——这两点卡住,再漂亮的模板也出不来。别在 body 里反复调格式,先确保 VS Code 认得你是谁。











