跳到主要内容

08-用VSCode Snippets快速创建调试配置

使用Snippets

VSCode Debugger 调试的时候需要创建调试配置,默认生成的配置往往不是符合需求的,需要做一些修改。

比如调试 Vue 项目时,默认生成的调试配置是这样的:

而我们最终用的是这样:

那能不能像生成默认配置一样,快速生成我们需要的调试配置呢?

可以的,这需要用到 VSCode 的 Snippets 功能。

Snippets 是代码片段的意思,输入前缀就可以快速填入代码片段。

我们如何自己写一个 Snipppets 呢?

按住 cmd + shift + p 调出 VSCode 命令面板,输入 snippets,选择 Configure User Snippets:

创建一个项目级别的 Snippets:

在 .vscode 下就会多出一个 xx.code-snippets 的文件:

注释的部分就是 demo 配置,我们把它打开:

  • prefix 就是这个 snippets 生效的前缀

  • body 是插入的内容

  • description 是描述

  • scope 是指定 snippets 生效的语言

这个 snippets 的作用就是在这个项目目录下的 js、ts 文件里,输入 log 的时候会提示,选中之后就会插入 body 部分的内容。

body 部分是待插入的代码,支持很多语法,也是一种 DSL(领域特定语言)。

支持通过 \$1、\$2 指定光标位置:

"$1  xxxx",
"yyyy $2"

可以多光标同时编辑:

"$1  xxxx $1"

可以加上 placeholader,也可以做默认值:

"${1:aaa}  xxxx",
"yyyy ${2:bbb}"

可以提供多个值来选择:

"你好${1|光光,东东|}"

还提供了一些变量可以取:

"当前文件: $TM_FILENAME",
"当前日期: $CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE"

所有可用变量可以在 VSCode 文档里看到。

而且还能对变量做正则替换:

"${TM_FILENAME/(.*)\\.[a-z]+/${1:/upcase}/i}"

一共就这些语法:

  • 指定光标位置:\$x
  • 多光标编辑:\$x \$x
  • 指定 placeholder 文本:\${x:placeholder}
  • 指定多选值:\${x|aaa,bbb|}
  • 取变量:$VariableName
  • 对变量做转换:${VariableName/正则/替换的文本/}

综合运用这些语法,就可以实现很多方便的 Snippets。

比如 React、Vue 的调试配置就可以封装成 Snippets:

React 项目的调试配置可能是这样的:

{
"type": "pwa-chrome",
"request": "launch",
"name": "调试 React 项目",
"runtimeExecutable": "canary",
"runtimeArgs": [
"--auto-open-devtools-for-tabs",
],
"userDataDir": false,
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}

我们把它做成 snippets 需要把这段内容变为字符串拼接的方式放在 body 里,这个还是挺麻烦的。

不过有工具网站 snippet-generator.app 来做这件事情,只需要把内容贴在左边,那么在右边就会展示变为 snippets 之后的配置。

把它复制出来然后再做一些修改:

注意 ${workspaceFolder} 这部分和 snippets 的语法有冲突,所以需要加上个 \ 来转义。

scope 指定为 json 和 jsonc,这是因为 json 文件对应两种语言:

jsonc 是 json with comments,带注释的 json,因为 json 语法是不支持注释的,而我们又想在 json 文件里加一些注释,所以平时都是用 jsonc 的类型。

点击右下角的语言部分:

可以切换文件的语言:

会发现 json 文件对应两种语言,所以这里 scope 都要填上。

这样创建 React 调试配置的时候就方便了。

上面的 snippets 还可以进一步优化,比如端口的部分可以指定光标输入,默认是 8080:

这样在创建调试配置的时候能顺便把端口也改了:

当然,前面提到的 snippets 的语法都可以用起来,封装适合自己的创建调试配置的 snippets。

现在还有一个问题,我们创建的 snippets 是保存在 .vscode 目录下的,只有当前项目生效,怎么能让别的项目也能用呢?

其实 snippets 一共三种范围:

全局级别是全局生效的,项目级别只在当前项目生效,语言级别是某种语言的文件里生效。

把这段创建调试配置的 snippets 放到全局 snippets,那样就每个项目都能用了。

总结

为了快速创建符合需求的调试配置,我们可以把它们封装成 snippets。

snippets 是根据前缀快速填入一段代码片段的。

有这些语法:

  • 指定光标位置:\$x
  • 多光标编辑:\$x \$x
  • 指定 placeholder 文本:\${x:placeholder}
  • 指定多选值:\${x|aaa,bbb|}
  • 取变量:$VariableName
  • 对变量做转换:${VariableName/正则/替换的文本/}

snippets 有项目、语言、全局三种生效范围,调试配置一般是要做成全局的 snippets。

我们可以把符合需求的调试配置封装成 snippets,这样之后再创建调试配置就方便多了。