VSCode用户代码片段应放在本地配置目录的User/snippets/下:Windows为%APPDATA%\Code\User\snippets\,macOS为$HOME/Library/Application Support/Code/User/snippets/,Linux为$HOME/.config/Code/User/snippets/;必须严格遵循User/snippets/层级,不可置于项目.vscode/或User/setting.json同级。

VSCode 里 code-snippets 文件放哪?路径不对就永远不生效
VSCode 的用户代码片段不是写在项目里,而是存在你本地配置目录下的 snippets 文件夹中,路径不对,再标准的 JSON 也白写。
- Windows:
%APPDATA%\Code\User\snippets\ - macOS:
$HOME/Library/Application Support/Code/User/snippets/ - Linux:
$HOME/.config/Code/User/snippets/
别手动建错层级——必须是 User/snippets/,不是 User/setting.json 同级,也不是工作区里的 .vscode/ 下。常见错误是把 javascript.json 塞进项目 .vscode/,那只会对当前文件夹生效(且需额外配置 "editor.snippetSuggestions": "top" 才可能触发)。
写一个能用的 console.log 片段,为什么加 $1 和 $0?
片段不是复制粘贴模板,而是带光标跳转和占位逻辑的交互式结构。没加 $1、$2,回车后就得手动删占位符;没设 $0,光标会卡在最后出不来。
比如这个常用片段:
{
"log": {
"prefix": "log",
"body": ["console.log('$1', $2);", "$0"],
"description": "log with label"
}
}
-
$1是第一个可编辑位置(默认填变量名),Tab 可跳到$2(要打印的表达式) -
$0是最终光标落点,否则输完按回车,光标停在分号后面,还得手动移走 -
body是字符串数组,每项一行;单行写成字符串也行,但换行得用\n,易出错
全局片段 vs 语言专属片段:为什么 javascript.json 里写的 log 在 .ts 文件里不出现?
VSCode 按文件后缀匹配片段作用域。写在 javascript.json 的片段只对 .js、.jsx 生效;TypeScript 需单独配 typescript.json,Vue 还得加 vue.json。
- 想跨语言复用?只能写进
global.code-snippets(文件名任意,但必须放在snippets/目录下,且不含"scope"字段) - 但注意:
global片段没有语言上下文,不能用tmLanguage变量(如$TM_FILENAME_BASE在某些语言里不可用) - 如果片段依赖语法高亮(比如插入带颜色的注释),请优先按语言拆分,别硬塞进 global
片段不触发?检查这三件事:前缀、语言模式、键盘触发时机
写了半天不弹出来,大概率不是语法错,而是没满足触发条件。
- 确保当前文件的语言模式正确——右下角显示的是
JavaScript,不是Plain Text;按Ctrl+Shift+P→Change Language Mode确认 -
prefix必须全小写,且输入时得「完整敲完再按 Tab」,比如log不会响应lo+ Tab,必须是log+ Tab - 如果用了
"scope": "javascript,typescript",记得字段名是scope,不是scopes或language,拼错就静默失效
最常被忽略的是:片段只在编辑器焦点在代码行内时生效,光标在注释里、字符串中、或刚保存完文件时,都可能延迟或不触发。


















