开发
- 安装脚手架
npm install -g yo generator-code
- 然后执行命令
yo code
- 选择
New Code Snippet
,然后输入基础信息,回车
创建片段
- code snippet snippet-generator.app/
发布
- 安装
vsce
工具npm install -g vsce
- 第二步创建账号 https://login.live.com/
- azure devops
- 第三步进入组织创建令牌(Personal access tokens) https://aex.dev.azure.com/
- 这里的
organizations
必须要选择all accessible organizations
,Scopes
要选择full access
,否则后面发布会失败 - 第四步发布
vsce publish -p 你的令牌
代码片段语法
- tabStops(按 tab 时焦点停留位置) $1, $2 ... 为 tab 键依次停留位置 $0 为最后停留位置并退出代码片段
# example 基础for循环
"basic for": {
"prefix": "bfor",
"body" : "for (const ${1} of ${2:array}) {\n $0 \n}"
}
- placeholders(占位符):在 tab 位置填入默认值
# example 带占位符的for循环
"placeholder for": {
"prefix": "pfor",
"body" : "for (const ${1:ele} of ${2:array}) {\n $0 \n}"
}
choice(下拉选择):在 tab 位置展示下拉菜单
# example 带下拉菜单的for循环 "test for": { "prefix": "tfor", "body" : "for (const ${1|ele,key,item|} of ${2:array}) {\n $0 \n}" }
内置变量: 格式为$name 或 ${name:默认值}常见 vscode 内置变量:VSCode variables
快速生成基本 React 页面:
"React Function Comp": {
"prefix": "trfc",
"body": [
"import React, { useEffect } from 'react'",
"",
"type IProps = {}",
"",
"const ${TM_FILENAME/(.*).js/$1/i} = (props: IProps) => {",
" return (",
" null
",
" )",
"}",
"",
"export default ${TM_FILENAME/(.*).js/$1/i}",
""
],
"description": "react 函数式组件快速命令"
}
- 在注释中使用日期变量
"作者和时间注释": {
"prefix": "zs-Author & Time",
"body": [
"/**",
" * Created by laiye on $CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE",
" */",
"$0"
],
"description": "添加作者和时间注释"
}
变量转换 : 变量转化能够让你在变量的值被插入之前,得到一个修改插入值的机会语法:
${var_name/regular_expression/format_string/options}
- var_name: 变量名
- regular_expression: 正则表达式
- format_string: 格式化字符串
- options: 选项
例如:生成 react 文件时,将文件名变量首字母大写:
"React Function Comp": {
"prefix": "trfc",
"body": [
"import React, { useEffect } from 'react'",
"",
"type IProps = {}",
"",
"const ${TM_FILENAME/(.*).js/${1:/capitalize}/i} = (props: IProps) => {",
" return (",
" null
",
" )",
"}",
"",
"export default ${TM_FILENAME/(.*).js/${1:/capitalize}/i}",
""
],
"description": "react 函数式组件快速命令"
}
- 获取变量结果时,可以用条件判断最终显示内容:
"format_string if":{
"prefix": "tstr",
"body": "${TM_FILENAME/verify.js(x)?/${1:?jsx:tsx}/}",
}
假设我们有一个「verify.js」文件,我们有这么一条 snippet: "body": "${TM_FILENAME/verify\\.j(s)?/${1:?jsx:tsx}/}"
。整个模式串匹配成功,括号中的 s 也成功,则写入 jsx,否则写入 tsx
- 占位符转换(tab 切换光标时,对占位符进行格式化)
- 举例:react 中使用 useState
const [ ${1}, set${1/(.*)/${1:/capitalize}/} ] = useState($2)