有时在使用VSCode进行前端编码时总会有一些代码段是需要重复编写的,这时使用一些代码模板(snippets),通过规定的字符序列触发snippets,快速地输入一段预设的代码模板会使编码效率提高

内置Snippets

VSCode中本身也自带一些 snippets ,典型的就是JavaScript中的for

如果要查看内置的代码模板有哪些,可以通过Command Palette查看:

点击左下角的齿轮图案,然后找到Command Palette选项(或者使用快捷键Ctrl + Shift + P),在VSCode窗口上方出现的搜索框输入Insert Snippets即可查看到

要通过Insert Snippets命令查看一个语言的 snippets 时,必须满足当前编辑的语言为snippet对应的语言的条件,才能找到对应语言的 snippets 。比如如果要找到 JavaScript 的 snippets ,当前打开的文件是.html类型的,那么如果当前编辑位置为<script>内部,输入Insert Snippets就可以找到 JavaScript 的snippet;或者当前编辑的文件是.js,输入Insert Snippets也可以找到 JavaScript 的 snippets 。这是因为snippets是有作用范围的snippet scope),snippet的作用范围要么是某个(些)语言,要么是某个(些)项目,这个不在这里做赘述,详细信息可见这里

这些配置文件所在目录为:
<VSCode安装目录>\resources\app\extensions\<对应语言名称>\snippets\

下载Snippets

这里的下载是指下载带有 snippets 的插件,可以在VSCode的插件市场搜索@category:"snippets"

自定义Snippets

这里以CSS代码为例:在进行简单的前端页面布局前,一般会将标签元素自带的内外边距统一清除,所以以下代码块是很经常用到的

* {margin: 0;padding: 0;
}

为此我想为它配置一个 snippet ,这里需要找到 CSS snippet 的配置文件:找到VSCode左下角的齿轮图标,查找菜单中的“User Snippets”选项,选择 CSS (或者顶部菜单File > Prenferences > User Snippets)

打开了一个css.json文件后,可以看到有一大段注释,认真读懂注释并按照规定输入就可以配置出自己的代码模板了,先不说规则细节,先实现一下上述提到的清除内外边距的CSS样式

按照注释提示,添加以下内容并保存

"Clear all elements' margin and padding": {"prefix": "cmp","body": ["* {","\tmargin: 0;","\tpadding: 0;$0","}"],"description": "Clear all HTML elements' default margin and padding"
}

prefix表示触发代码段的文本,所以需要通过输入cmp触发,效果如下

snippets 配置规则

当打开用户snippets的配置文件时,总能看到一段注释,根据这段注释一般就可以写出自己的 snippet 了,接下来基于这段注释的内容展示如何写一个 snippet(更多配置方式可以参考这里)

// Place your snippets for css here. Each snippet is defined under a snippet name and has a prefix, body and
// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
// \$1, \$2 for tab stops, \$0 for the final cursor position, and \${1:label}, \${2:another} for placeholders. Placeholders with the
// same ids are connected.
// Example:
// "Print to console": {// "prefix": "log",
// "body": [
//   "console.log('\$1');",
//   "\$2"
// ],
// "description": "Log output to console"
// }

配置文件类型

snippet 的配置文件是 JSON 文件,允许使用C语言风格的注释,允许定义不限定数量的 snippet

基本结构

单个snippet的配置基本结构如下:

// 尖括号包含内容表示自定义内容
"<snippet name>": {"prefix": "<triggerText>",// 如果模板有多行,应该用字符串数组赋值,一个元素代表一行内容"body": "<template>","description": "<description of this snippet>"
}

多个配置之间用逗号分隔(不能有多余逗号)

首先一个 snippet 配置要指定该一个名称,然后给这个项赋值一个对象
对象中包含三个部分:prefixbodydescription

  • prefix是指定用于触发snippet的文本,比如上述配置的清除元素内外边距的 snippet ,使用的prefixcmp(clear margin and padding)。这个可以根据自己的喜好配置,主要是要好记,毕竟配置snippet就是为了提高编码效率

  • body是指定代码模板内容,这里可以赋值为单个字符串或者一个字符串数组
    当模板只有一行内容或者只有一行代码时,可以直接把这行代码作为字符串赋值给body。比如如果想要快速打印console.log("hello")这一句,则可以配置:

    "Print Hello to console": {"prefix": "hello","body": "console.log('Hello');", // 直接赋值语句字符串"description": "Print Hello to console"
    }
    

    如果模板是多行内容,那么则需要用一个字符串数组来赋值(如上述CSS的例子),其中一个元素代表一行内容。其中的空白字符可以使用转义字符(如上述CSS的例子),并且如果直接应用空白字符,只有空格可以应用(不可以直接应用制表符)

  • description是指定描述该snippet的作用或者模板内容的字段,它的内容会出现在相关的提醒中

特殊结构的使用

body部分的内容可以使用一些特殊结构来控制光标位置和插入的文本。以下介绍一下配置文件中默认注释提到的tabstopsplaceholders

tabstops

当输出一个 snippet 时,如果 snippet 的body定义了tabstops,那么可以通过Tab键来使光标位置跳到特定位置,方便修改生成的模板

tabstops用$0, $1, $2, ......标识,数字表示被访问的顺序,而$0标识的是最后到达的光标位置,并且相同数字的tabstops是相关联的(也就是说会有多个光标同时在多个相关联的位置)

看下述例子:

// 添加到JavaScript的snippets配置文件中
"Test tabstops": {"prefix": "tts","body": "$0two($2);one($1);three($3);one($1)","description": "a test for tabstops"
}

以上这个例子刚开始时会有两个光标分别在两个one()的括号内;然后按一次Tab后,会有一个光标在two()括号内;第二次按Tab后,光标会在three()括号内;再按一次Tab,光标会跑到这行代码最前面,因为$0标识光标最后到达的位置(这里如果不设定$0会默认到达body内容的最后的位置,在这里就是生成的那行代码的末尾)

至此应该就可以理解tabstops这个称呼的含义了,其实就是“按tab后光标停止的地方
另外可以Shift+Tab退回上一个tabstops的位置,但要注意的是如果到达了$0,也就是snippet中光标的最后位置后还进行了其他操作(包括按Tab),就无法回退到上一个tabstops的位置了

placeholders

placeholders就是带值的tabstops,其中的值会作为默认文本插入代码并被选中,这样就可以方便地在需要时修改代码模板的默认内容了

最典型的例子就是文章开头内置的那个for循环JS snippet,这里我稍微复现一下来举个例子

"Test placeholders": {"prefix": "flt","body": ["for(let ${1:index} = 0; ${1:index} < ${2:array}.length; ${1:index} ++) {","\t${4:const} ${3:element} = ${2:array}[${1:index}];","\t$0","}"],"description": "a test for placeholders using for loop"
}

刚开始时,有多个选中的index,此时可以同时修改全部index为想要的内容;接着按一次tab,同时选中所有的array,这时也可以同时修改所有选中内容;按第二次tab就选中了element;按第三次,就到达了const;再按一次就到了最后的位置$0(这里如果不设定$0会默认到达body内容的最后的位置,在这里就是右花括号的后面)

snippet语法允许使用的特殊结构不止以上的tabstops和palceholders的配置,还有其他的,详情参考这里

文章源码:https://gitee.com/thisismyaddress/bocheng-blogs/tree/master/前端开发工具使用笔记/VSCodeSnippets

参考:

https://code.visualstudio.com/docs/editor/userdefinedsnippets

VSCode中snippets(代码模板)的使用相关推荐

  1. vscode设置templates_在VScode中创建你的代码模板的方法

    使用VScode的用户代码片段功能,来生成自己习惯的代码模板,提升开发效率 1.选择菜单里的 文件 > 首选项 > 用户代码片段 2.选择你需要自定义模板的文件,以vue为例 3. 配置对 ...

  2. 删除VSCode 中自定义的snippets

    snippets 在vscode中的自定义一个snippets是一个非常睿智的选择,可以帮我们节省大量的时间.具体操作非常简单,随意百度即可.这边记录一下如何删除的问题. 删除自定义的snippets ...

  3. VSCode中自定义的snippets对h文件无效的解决办法

    [前言] 关于在VSCode中自定义snippets(代码片段)的方法,请参考下面的文章,写得非常详细.具体. https://blog.csdn.net/maokelong95/article/de ...

  4. snippets vscode 配置_创建自己的Code Snippets在VSCode中

    创建自己的Code Snippets在VSCode中 创建Vuejs文件模板代码片段 1. Go to Code → Preferences → User Snippets 2.弹出提示框,选择一个v ...

  5. vscode新建html中文乱码,vscode中html中文乱码 怎么办

    vscode中html中文乱码 怎么办?VSCode 中文乱码解决办法 文件 >> 首选项 >> 设置 搜索:"files.autoGuessEncoding&quo ...

  6. 2 snippets vue 修改配置_自动化配置vscode的snippets

    起因 今天开发时遇到一个问题调了许久,之后才发现是option的结构有问题.觉得这种样板代码不应该去写,而应该自动生成,所以就想着配一下vscode的snippets. 解决过程 小程序需要写的主要是 ...

  7. VSCode中Vue插件使用整理_Vue2开发插件

    一.Vue 2 Snippets for Visual Studio Code This extension adds Vue 2 Code Snippets into Visual Studio C ...

  8. VScode中过时的几个插件,赶快卸载吧!VScode实用设置,快来开启!及Copilot的开启!

    ⭐ 简介:大家好,我是zy阿二,我是一名对知识充满渴望的自由职业者. ☘️ 最近我沉溺于Python的学习中.你所看到的是我的学习笔记. ❤️ 如果对你有帮助,请关注.点赞,让我们共同进步.有不足之处 ...

  9. vsCode创建javaScript代码模板

    vsCode创建javaScript代码模板 由于自己在使用js,创建的脚本总是带有一些用于提醒的注释,每次创建都得手动删除,在水群的过程中,有人提出了这样的疑问,我们有什么办法可以创建没有这些注释的 ...

最新文章

  1. VS2010 SP1 Beta与VisualSVN的冲突引起VS2010关闭时重启
  2. Python3.7.5安装(Windows10附pip更换下载源)
  3. python 时序数据库_时序数据库InfluxDB
  4. VTK:网格之SolidClip
  5. mate30pro 优化 开发者选项_10 个开发者必知的 MySQL 8.0 新功能
  6. CGContextAddLines和CGContextAddLineToPoint在线条半透明时候的区别
  7. 工业交换机如何预防雷电?
  8. python defaultdict 简单了解
  9. EfficientNet 解析:卷积神经网络模型尺度变换的反思
  10. 只有IE能上网,其他浏览器均不可以!
  11. 如何将示例bacpac文件导入到Azure SQL数据库
  12. jenkins的安装与使用
  13. php网页源码学生请假考勤管理系统mysql数据库web结构html布局计算机软件工程
  14. jsoneditor光标错位的原因及解决方式
  15. Android TV 焦点控制
  16. Learn Python The Hard Way (python 2.7) ex45.py 你来制作一个游戏
  17. 知乎上的那些神回复,已笑趴~~~
  18. 如何制作生成GIF?手把手教你生成GIF动态图
  19. gets和fgets函数及其区别,C语言gets和fgets函数详解
  20. 小学二年级操行评语1

热门文章

  1. 面试中 项目遇见的难点答案_你和offer之间只差这几个面试问题!常见面试问题汇总...
  2. 用科学计算机求arctan,计算器arctan怎么按
  3. Simulink:车辆换挡逻辑回顾_Demo
  4. 【机器人基础】阻抗/导纳控制深度解析
  5. Cisco路由器重置enable密码步骤
  6. 将vue-admin-template组件默认英文语言改成中文
  7. 清理异常值(MAD:绝对中位差)
  8. vs X64汇编 LNK2001: unresolved external symbol mainCRTStartup
  9. 处理器协同机制其二内存屏障与内存顺序(及Store Buffer与Invalidate Queue)
  10. Unity 绘制弹球和台球的运动轨迹