VSCode代码片段必须通过命令面板执行“Preferences: Configure User Snippets”创建,不可手动放入snippets目录;body必须为字符串数组,变量须用${}语法,语言ID需完全匹配(如typescriptreact),否则静默失效。

VSCode代码片段必须用命令面板创建,不能手动扔进snippets目录
VSCode 不会自动加载你手动放进 ~/.vscode/snippets/ 或 %APPDATA%\Code\User\snippets\ 的 JSON 文件——哪怕文件名和格式都对,也大概率静默失效。唯一可靠路径是走内置命令。
按 Cmd + Shift + P(Mac)或 Ctrl + Shift + P(Win/Linux),输入并选中 Preferences: Configure User Snippets。之后的选择决定片段作用域:
- 选具体语言(如
javascript)→ 生成javascript.json,仅在 JS 文件中生效 - 选
New Global Snippets file→ 命名为common.json(后缀必须是.json,不是.code-snippets)→ 全局可用 - 想只在
.tsx且含 React 的上下文中触发?得选typescriptreact,不是tsx或typescript
body 必须是字符串数组,单个字符串直接被忽略
这是最常导致“输了前缀没反应”的静默错误。VSCode 要求 body 是字符串数组,每行一个元素,换行靠数组自然分隔,不写 \n。
✅ 正确写法:
"body": [
"console.log('${1:message}');",
"${2}"
]
❌ 错误写法:
"body": "console.log('${1:message}');${2}"
多行 JSX、Vue 模板同理:每一行单独成数组项,缩进手动加空格,别指望自动对齐。
变量必须用 ${} 包裹,$TM_FILENAME_BASE 这种写法已失效
新版 VSCode 只认带大括号的变量语法,漏掉 {}、大小写错、拼写错,变量就变成纯文本输出。
-
${TM_FILENAME_BASE}✅(当前文件名,不含后缀) -
$TM_FILENAME_BASE❌(旧语法,不解析) -
${CURRENT_YEAR}✅ -
${current_year}❌(大小写敏感) -
${CLIPBOARD}✅(注意不是$CLIPBOARD)
复杂变量如转 PascalCase:${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/},正则部分不能少斜杠,否则报错或原样输出。
团队共享片段要绕过“直接发 JSON 文件”这个坑
把 my-team.code-snippets 发给同事,对方放进自己 snippets 目录,90% 情况下不会生效——VSCode 不扫描任意路径,只认命令面板创建的文件位置。
真正可行的共享方式只有两种:
-
同步配置文件:把
common.json或typescriptreact.json放进项目.vscode/目录,配合"editor.snippetSuggestions": "top"设置,新成员开项目即生效 -
打包成扩展:用
vsce打包为 VSIX,发布到内部 Marketplace 或直接安装,适合强规范场景
别信“改个文件名就能用”的说法——.code-snippets 后缀只在全局 snippets 目录下被识别,且顶层必须是对象 {},不能是数组,也不能带 BOM(Windows 记事本保存极易引入,用 VSCode 自己保存最稳)。


















