vscode 的 .code-snippets 文件必须手动复制到指定目录(用户级:~/.vscode/snippets/ 或 %appdata%\code\user\snippets\;工作区级:项目根目录 .vscode/snippets/),命名须为 xxx.code-snippets,json 合法且顶层为对象,重载窗口后才生效。

code-snippets 文件必须手动复制,不能拖拽或用 CLI 安装
VSCode 的用户代码片段(.code-snippets 文件)本质是纯 JSON 配置文件,不参与插件生命周期管理。你拖一个 .code-snippets 文件进编辑器窗口,或者执行 code --install-extension xxx.code-snippets,VSCode 都会静默忽略——它根本不识别这种格式的“安装”请求。
真正生效的唯一路径:把文件放进正确目录,并确保命名和结构合规。
- 目标路径必须是
~/.vscode/snippets/(Linux/macOS)或%APPDATA%\Code\User\snippets\(Windows) - 文件名必须以
.code-snippets结尾,例如react.code-snippets;若命名为react.json或react.snippets,VSCode 不加载 - 内容需为合法 JSON,顶层必须是对象(不能是数组),且每个片段 key 必须是字符串(如
"log": { ... }),不能是数字或空字符串
跨项目转移时,别混淆「用户级」和「工作区级」片段
用户级片段(存于上面的 snippets/ 目录)全局生效,适合通用逻辑(如 console.log、try-catch);工作区级片段(存于项目根目录 .vscode/snippets/)只在该文件夹打开为工作区时可用。
如果你从旧项目拷贝了 .vscode/snippets/http.code-snippets,直接扔进新项目的 .vscode/snippets/ 是能用的——但前提是新项目是以「文件夹打开」方式加载为工作区(不是单个文件),且 VSCode 没禁用工作区设置(检查状态栏右下角是否显示 Workspace Settings Disabled)。
- 工作区级片段优先级高于用户级,同名 key 会被覆盖
- 若想让某片段在所有项目都可用,必须放用户级目录,不能只靠复制进项目
- 多根工作区中,只有最外层工作区的
.vscode/snippets/生效,子文件夹里的会被忽略
重载窗口不是可选操作,而是强制生效前提
哪怕你把文件放对了位置、改对了名字、JSON 也完全合法,VSCode 也不会自动扫描新增的 .code-snippets 文件。它只在启动时或显式重载时读取一次。
常见误操作:复制完就立刻按 Ctrl+Space 试补全,没反应 → 以为失败。其实只是没触发重读。
- 必须执行
Developer: Reload Window(快捷键Ctrl+Shift+P→ 输入该命令) - 不能只关掉再开窗口,必须是「重载」,否则缓存未清,旧状态残留
- 如果重载后仍不生效,打开开发者工具(
Help → Toggle Developer Tools),在 Console 里搜snippet,看是否有解析错误提示
命名冲突和语言绑定容易被忽略
片段能否触发,不仅取决于是否存在,还严格依赖 "scope" 和 "language" 字段。比如你从 Python 项目导出的片段含 "scope": "python",挪到 JS 项目里,即使文件放对了、重载了,也不会在 .js 文件中出现。
- 检查片段文件里是否有
"language"字段;若要跨语言使用,删掉该字段或改成数组如"language": ["javascript", "typescript"] - 多个片段用相同 prefix(如都设
"prefix": "log")会互相覆盖,后加载的胜出——顺序由文件名 ASCII 码决定,不是复制先后 - 片段 key(如
"log")不能含空格或特殊符号,否则补全面板不显示该条目
最易漏的一点:片段 JSON 中的 "body" 值如果是多行字符串,必须用数组形式写("body": ["console.log($1);", "$2"]),写成字符串加 \n 会解析失败且无报错提示。











