Jacky's blog Jacky's blog
首页
  • 编码专题
  • 深入浅出 Vite
  • 深入浅出 babel
  • 快速上手API
  • 深入浅出 react
  • Node

    • code-notebook
  • 状态管理

    • redux
  • 前端工程化

    • Wepack
  • React源码

    • React源码
  • 组件库封装

    • 组件库
  • 开发工具

    • Vscode 插件
  • 项目展示
  • 案例中心 (opens new window)
  • First Project
  • 基础算法题
  • 链表题
  • 动态规划
  • 双指针
  • 递归
  • 数据结构
  • 前端学习计划 (opens new window)
  • 技术随笔
  • 转载文章
  • 包管理工具
  • 前端学习周报
  • VSCode插件
  • Promise 专题
  • 函数技巧
  • React 专题
  • 配置文件

    • TSCONFIG-配置 (opens new window)
    • NGINX-配置 (opens new window)
    • 正则规则查询手册 (opens new window)
    • Lint 配置 (opens new window)
  • 教程

    • GIT-教程
    • NPM SCRIPTS-工作流 (opens new window)
    • DOCKER-教程 (opens new window)
    • LERNA-教程 (opens new window)
    • GIT-常用操作整理 (opens new window)
  • VSCode

    • LAUNCH.JSON (opens new window)
  • 指令

    • NPM 指令 (opens new window)
    • NVM 指令 (opens new window)
    • Nginx 指令 (opens new window)
    • YARN 指令 (opens new window)
    • PNPM 指令 (opens new window)
  • 库

    • FS-EXTRA 库 (opens new window)
    • NODE 库-PATH (opens new window)
  • 永远的神

    • 魔法师卡颂-自顶向下学 React 源码 (opens new window)
    • 全栈潇晨 (opens new window)
    • 博客-程序员山月-Daily (opens new window)
    • 淘系前端:冴羽 (opens new window)
  • 系列文章

    • 《图解HTTP》 (opens new window)
    • 《ES6标准入门》 (opens new window)
    • 《现代JavaScript教程》 (opens new window)
    • 《深入浅出Webpack》 (opens new window)
    • VSCode 插件系列:小茗同学 (opens new window)
    • JEST 教程 (opens new window)
    • 前端精读周刊:各种精读系列 (opens new window)
    • 一文吃透系列 (opens new window)
    • 图解 REACT 原理 (opens new window)
  • 实用网站

    • MDN (opens new window)
    • CAN I USE (opens new window)
    • TYPESCRIPT-ESLint-RULES (opens new window)
    • ESLint-RULES (opens new window)
    • FRONT-END TREND (opens new window)
    • NPM TREND (opens new window)
    • 在线分析 Node 依赖 (opens new window)
    • FIND NPM (opens new window)
    • CODE PEN (opens new window)
    • 印记中文 (opens new window)
    • TOOL.LU (opens new window)
    • 阮一峰-网道 (opens new window)
    • DIGITAL OCEAN (opens new window)
    • DEVDOCS.IO (opens new window)
    • JOI (opens new window)
  • 算法

    • 小浩算法 (opens new window)
    • LABULADONG 的算法小抄 (opens new window)
    • 力扣 SOLUTION (opens new window)
    • HACKER RANK (opens new window)
    • 代码随想录 (opens new window)
  • 博客系列

    • 美团大佬 (opens new window)
    • 蜡笔小伟 (opens new window)
    • 优秀博客1 (opens new window)
    • 优秀博客2-umi (opens new window)
    • 优质博客 (opens new window)
  • CSS

    • CSS-EASING 库 (opens new window)
    • ROUGH.JS (opens new window)
    • CSS 网站收集
    • UNOCSS (opens new window)
  • 前端

    • PROMISE (opens new window)
    • UNDERSCORE.JS (opens new window)
    • study with BGM (opens new window)
    • nginx【B站视频】 (opens new window)
    • 机器学习
    • Js基础
  • 掘金已购课程

    • 前端自动化测试精讲 (opens new window)
    • 深入浅出 Vite (opens new window)
    • 现代 Web 布局 (opens new window)
    • 前端算法与数据结构 (opens new window)
    • 基于 Vite 的 SSG 框架开发实战 (opens new window)
    • SSR 实战:官网开发指南 (opens new window)
    • WebGL 入门与实践 (opens new window)
    • 玩转 CSS 的艺术之美 (opens new window)
    • 前端调试通关秘籍 (opens new window)
    • React 进阶实践指南 (opens new window)
    • TypeScript 全面进阶指南 (opens new window)
    • 前端缓存技术与方案解析 (opens new window)
    • npm scripts 前端工作流 (opens new window)
    • Webpack5 核心原理与应用实践 (opens new window)
  • 购物车

    • 张鑫旭-技术写作指南 (opens new window)
    • 深入剖析 Node.js 底层原理 (opens new window)
    • 前端开发者的现代 C++ 课 (opens new window)
    • 从前端到全栈 (opens new window)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Jacky Wang

行到水穷处,坐看云起时
首页
  • 编码专题
  • 深入浅出 Vite
  • 深入浅出 babel
  • 快速上手API
  • 深入浅出 react
  • Node

    • code-notebook
  • 状态管理

    • redux
  • 前端工程化

    • Wepack
  • React源码

    • React源码
  • 组件库封装

    • 组件库
  • 开发工具

    • Vscode 插件
  • 项目展示
  • 案例中心 (opens new window)
  • First Project
  • 基础算法题
  • 链表题
  • 动态规划
  • 双指针
  • 递归
  • 数据结构
  • 前端学习计划 (opens new window)
  • 技术随笔
  • 转载文章
  • 包管理工具
  • 前端学习周报
  • VSCode插件
  • Promise 专题
  • 函数技巧
  • React 专题
  • 配置文件

    • TSCONFIG-配置 (opens new window)
    • NGINX-配置 (opens new window)
    • 正则规则查询手册 (opens new window)
    • Lint 配置 (opens new window)
  • 教程

    • GIT-教程
    • NPM SCRIPTS-工作流 (opens new window)
    • DOCKER-教程 (opens new window)
    • LERNA-教程 (opens new window)
    • GIT-常用操作整理 (opens new window)
  • VSCode

    • LAUNCH.JSON (opens new window)
  • 指令

    • NPM 指令 (opens new window)
    • NVM 指令 (opens new window)
    • Nginx 指令 (opens new window)
    • YARN 指令 (opens new window)
    • PNPM 指令 (opens new window)
  • 库

    • FS-EXTRA 库 (opens new window)
    • NODE 库-PATH (opens new window)
  • 永远的神

    • 魔法师卡颂-自顶向下学 React 源码 (opens new window)
    • 全栈潇晨 (opens new window)
    • 博客-程序员山月-Daily (opens new window)
    • 淘系前端:冴羽 (opens new window)
  • 系列文章

    • 《图解HTTP》 (opens new window)
    • 《ES6标准入门》 (opens new window)
    • 《现代JavaScript教程》 (opens new window)
    • 《深入浅出Webpack》 (opens new window)
    • VSCode 插件系列:小茗同学 (opens new window)
    • JEST 教程 (opens new window)
    • 前端精读周刊:各种精读系列 (opens new window)
    • 一文吃透系列 (opens new window)
    • 图解 REACT 原理 (opens new window)
  • 实用网站

    • MDN (opens new window)
    • CAN I USE (opens new window)
    • TYPESCRIPT-ESLint-RULES (opens new window)
    • ESLint-RULES (opens new window)
    • FRONT-END TREND (opens new window)
    • NPM TREND (opens new window)
    • 在线分析 Node 依赖 (opens new window)
    • FIND NPM (opens new window)
    • CODE PEN (opens new window)
    • 印记中文 (opens new window)
    • TOOL.LU (opens new window)
    • 阮一峰-网道 (opens new window)
    • DIGITAL OCEAN (opens new window)
    • DEVDOCS.IO (opens new window)
    • JOI (opens new window)
  • 算法

    • 小浩算法 (opens new window)
    • LABULADONG 的算法小抄 (opens new window)
    • 力扣 SOLUTION (opens new window)
    • HACKER RANK (opens new window)
    • 代码随想录 (opens new window)
  • 博客系列

    • 美团大佬 (opens new window)
    • 蜡笔小伟 (opens new window)
    • 优秀博客1 (opens new window)
    • 优秀博客2-umi (opens new window)
    • 优质博客 (opens new window)
  • CSS

    • CSS-EASING 库 (opens new window)
    • ROUGH.JS (opens new window)
    • CSS 网站收集
    • UNOCSS (opens new window)
  • 前端

    • PROMISE (opens new window)
    • UNDERSCORE.JS (opens new window)
    • study with BGM (opens new window)
    • nginx【B站视频】 (opens new window)
    • 机器学习
    • Js基础
  • 掘金已购课程

    • 前端自动化测试精讲 (opens new window)
    • 深入浅出 Vite (opens new window)
    • 现代 Web 布局 (opens new window)
    • 前端算法与数据结构 (opens new window)
    • 基于 Vite 的 SSG 框架开发实战 (opens new window)
    • SSR 实战:官网开发指南 (opens new window)
    • WebGL 入门与实践 (opens new window)
    • 玩转 CSS 的艺术之美 (opens new window)
    • 前端调试通关秘籍 (opens new window)
    • React 进阶实践指南 (opens new window)
    • TypeScript 全面进阶指南 (opens new window)
    • 前端缓存技术与方案解析 (opens new window)
    • npm scripts 前端工作流 (opens new window)
    • Webpack5 核心原理与应用实践 (opens new window)
  • 购物车

    • 张鑫旭-技术写作指南 (opens new window)
    • 深入剖析 Node.js 底层原理 (opens new window)
    • 前端开发者的现代 C++ 课 (opens new window)
    • 从前端到全栈 (opens new window)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Node

  • VSCode插件

    • 如何打包 VSCode IDE(Mac)
    • 如何查看 VSCode 官网
    • VSCode目录结构分析
    • VSCode插件-yo脚手架创建
    • VSCode插件-debug
    • VSCode插件-TreeView
    • VSCode插件-WebView
    • VSCode插件-i18n
    • VSCode插件-Color Theme
    • VSCode插件-Node进程交互
    • VSCode 插件-Edge_devtools 源码
    • VSCode插件-使用 gulp 打包插件
    • VSCode-Tasks模式
    • VSCode插件-存储方式
    • VSCode插件-开发 code-snippets 插件
      • 0. 前言
      • 1.开发 snippets 片段
      • 2.制作插件
      • 3. 备注
      • 参考
  • Webpack

  • Redux

  • React源码

  • 组件库

  • React高阶系列

  • UMI插件

  • 前端工程化

  • 单元测试vitest

  • 重点技术
  • VSCode插件
wangjiasheng
2023-06-17
目录

VSCode插件-开发 code-snippets 插件

# 0. 前言

本篇博客介绍如何开发一个 VSCOde 插件提供常用的代码片段(Snippets)。

示例代码仓库:https://github.com/wangjs-jacky/jacky-snippets (opens new window)

VSCode 插件市场:jacky-snippets (opens new window)

# 1.开发 snippets 片段

由于 code-snippets 功能相对来说比较简单,可以先不创建标准的 VSCode 插件工程。

  1. 直接在本地的 .vscode 文件夹创建 .code-snippets 结尾的文件。

    上述步骤也可以替换为,按下 F1 打开命令行,输入 snippets 关键字.

    选择 local 作用范围。

    image-20230617103702578

  2. 打开这个网站 snippet-generator.app/ (opens new window) 可以快速创建一段模板代码。

    将模板代码黏贴到左侧,拷贝右侧的代码至上一步生成的 .code-snippets 文件中。

    image-20230617103914656

    其中,prefix 是触发词字段,description 为说明字段。

  3. 限定这段 snippets 生效的范围

    在 package.json 中配置 snippets 属性

    "snippets": [
          {
            "language": "javascript",
            "path": "./snippets/snippets.json"
          },
          {
            "language": "javascriptreact",
            "path": "./snippets/snippets.json"
          },
          {
            "language": "typescript",
            "path": "./snippets/snippets.json"
          },
          {
            "language": "typescriptreact",
            "path": "./snippets/snippets.json"
          }
        ]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    language 的值如何确定?

    可以直接 ctrl+n 创建一个新文件,然后点击 Select a language ,语言可选键值参考括号内的英文。

  4. 调试

    根据设置的 prefix 值即可触发语法提示,如下:

# 2.制作插件

code-snippets 除了可以直接在 local 工程中生效外,还可以制作为 vscode 插件,发布到应用市场,分享给他人使用。

code-snippets 开发如下:

  1. 使用 VSCode 官方提供的代码片段模板工程。

    • 安装依赖
    npm install -g yo generator-code
    
    1

    说明:yo 是第三方脚手架工具,VSCode 官方维护的是 generator-code 这个包,yo 启动时会自动去全局搜索 generator-* 名称开头的包。

    • 创建模板代码
    yo code
    
    1
    • 选择 New Code Snippets

    • 输入 package.json 有关的一些基本信息,即可创建项目成功。
  2. 创建代码片段

    比如说将 fse 库的代码示例制作成 snippets

    ├── scripts
    │   └── mergeJson.js
    ├── snippets
    │   └── fse
    │       ├── fse-copy.code-snippets
    │       ├── fse-empty.code-snippets
    │       ├── fse-ensureDir.code-snippets
    │       ├── fse-ensureFile.code-snippets
    │       ├── fse-ensureLink.code-snippets
    │       ├── fse-ensureSymlink.code-snippets
    │       ├── fse-import.code-snippets
    │       ├── fse-move.code-snippets
    │       ├── fse-outputFile.code-snippets
    │       ├── fse-outputJson.code-snippets
    │       ├── fse-pathExists.code-snippets
    │       ├── fse-readJson.code-snippets
    │       ├── fse-remove.code-snippets
    │       └── fse-writeJson.code-snippets
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
  3. 由于在 package.json 只允许设置一个 path

    "contributes": {
      "snippets": [
        {
          "language": "javascript",
          "path": "./dist/fse.code-snippets"
        }
      ]
    },
    
    1
    2
    3
    4
    5
    6
    7
    8
  4. 封装 json 合并脚本,详见 (opens new window)

    npm run build:json
    
    1
  5. 打包本地文件

    vsce package
    
    1

插件的发布另起一篇博客记录。

# 3. 备注

插件的开发,具体可详见:VSCode 插件官网-Snippets in Visual Studio Code (opens new window)

除了简单的特性外,还有几个特性是 snippets 开发中用的比较多的:

  1. tabSotp 特性:插入模板后,支持使用 tab 移动光标的位置

    语法为:$1、$2

  2. placeholder 特性:默认值

    语法为:${1: foo} 、${1:another ${2:placeholder}}

  3. choice 特性:支持选择

    语法为:${1| one,tow,three |} ,使用 | xxxx | 包裹可选项

  4. variables 特性:内置变量。

    举例来说,比如有一段语法片段,需要根据不同 language 设置不同的值,如

    {
      "hello": {
        "scope": "javascript,html",
        "prefix": "hello",
        "body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
      }
    }
    
    1
    2
    3
    4
    5
    6
    7

    在 js 文件中插入文本为 /* Hello World */,在 HTML 文件中插入文本为 <!-- Hello World -->

# 参考

  1. 狂奔的小马的文章 (opens new window)
编辑 (opens new window)
上次更新: 2023/06/19, 22:06:00
VSCode插件-存储方式
webpack源码分析一:AST语法

← VSCode插件-存储方式 webpack源码分析一:AST语法→

最近更新
01
如何理解浏览器的 user agent 用户代理的含义?
11-05
02
浏览器事件循环机制
10-31
03
浏览器页面渲染机制【2023】
10-15
更多文章>
Theme by Vdoing | Copyright © 2020-2023
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式