重复代码的克星,高效工具 VSCode snippets 的使用指南
为什么要用 snippets(代码段)?
不管你使用何种编程语言,在我们日常的编码工作中,都会存在有大量的重复代码编写,例如:
- 日志打印:
console.log,log.info('...') - 输出到控制台:
System.out.println("...."), fmt.Println("...") - 循环:
switch(...){},for(i := 0, i <= len, i++),for...i等等
这种模板代码在 java,go 中静态语言会比较多,实际上,平时除了 模板代码,还有很多模板文件,也是存在很多重复编码的工作,例如:vue文件,html文件,xml文件,里面的很多标签,方法,属性基本都是固定的,我平时遇到比较多的还是 java,go 里面的模板文件和代码,关于重复代码不胜枚举,这里就不过多概述了。
写这些模板代码和模板文件,实际上除了练习你的打字速度外,不会给你带来任何技能上的提升,是属于 重复而且低价值的事情,比如就算你把 "hello world" 练习一千遍,你也不会成为高手一样,
那么作为一个高效的程序员,要懂利用如何节省自己的时间,把有限的精力投资在高价值,高回报的事情上,对于这些无法逃避的重复的编码工作,我们需要用技术和工具来把他们解决就好,所以 VSCode 提供的 user snippets 用户代码段(在 jetbrains 家族中也称为 Live templates )就是用来做这个事情的
怎么使用 snippets ?
知道了为什么要用代码段,我们来说说 VSCode 中的 snippets 的具体作用
熟悉 Jetbrains 家族产品的同学应该知道 Live Templates 功能非常好用,其实 VSCode snippets 就是类型 Jetbrains 的 Live Templates 功能,他们解决的是相同的问题。
VSCode 官方对于 snippets 的描述如下:
Code snippets are templates that make it easier to enter repeating code patterns, such as loops or conditional-statements.
简单翻译就是:
代码段是一种模板,可以更容易地输入重复的代码模式,例如循环或条件语句
使用 snippeets 代码段对 javascript 中的 ajax 的重复代码进行封装,只需要输入关键字:ajax,就可以把整个代码段带出来,非常的高效,具体参见下面来自官方的示例:

查看已有的 snippets
其实 VSCode 对于每种语言都有默认初始化的 snippets,能够满足日常的使用,在 VSCode 打开命令行界面输入:insert snippets 即可查看当前可以用的 snippets,如图:

以上是在 JavaScript 语言环境下看到的 snippets (目前内置对 JavaScript 支持比较友好)
当我切换到 golang 的时候,查看的 snippets 如下(未安装语言包的情况下):

这么少的 snippets 肯定是不够用的,好在 VSCode 的丰富插件为我们提供了扩展的可能性,通常相关联的语言工具包都内置的大量常用的 snippets,我们通常只要安装即可。
在 VSCode 的扩展使用:@category:snippets 过滤搜索安装对应的工具即可,如图:

安装语言包完成后,在 VSCode Command 页面输入:insert snippets 即可看到新增的大量的 snippets :

熟练使用语言包内置的 snippets 可以满足 80% 场景。
但是可能还是无法满足和覆盖所有场景,
这样场景下我们需要创建自己的 snippets 来完全解决代码重复的问题。
创建你自己的 snippets
在 VSCode 中创建 snippets 是非常简单的事情(无需安装任何扩展),有两种方法实现:
- 在 macOS 中选择:Code -> Preferencts -> User Snippets 选项
- 或者在 VSCode Command 中输入:configure user snippets 即可
如果是创建 snipperts 选择 选择 New Global Snippets file ,输入你要创面的 snipperts name 即可进入配置
snipperts 文件是 JSON 风格,刚创建后的默认格式内容如下:

我简单描述的一下属性的作用:
- scope:限定代码段的作用域,例如 go 语言的代码段不会出现在 js 中,反之亦然
- prefix:是快捷关键字,当 VSCode 检测到代码中出现 prefix 关键字就会在编辑器中替换为 body 的内容
- body:是重复的代码模板内容,通常是程序员想要自动化的一些重复,模板代码,录入在这里
- description:顾名思义就是对这段 snippets 的具体描述
这里值得再提一下的就是, body 里面的 $1 关键字是模板代码替换后鼠标光标的所在位置,当出现多个 $1,$2 的时候,可以通过键盘 TAB 按键快速切换鼠标光标所在位置,用于提高效率,这块就不具体深入描述了,有兴趣的小伙伴可以自行去探索。
关于 snipperts 配置文件的细节还有很多,这里就不深究了,
有兴趣深入研究的伙伴可以 VSCode Snippets 官方的相关的文档,里面解释的非常详细。
参考资料:
- [Snippets in Visual Studio Code
重复代码的克星,高效工具 VSCode snippets 的使用指南的更多相关文章
- 重复代码检查工具simian的基本用法
simian是一个检查重复代码的工具,支持通过命令行和UI方式来检查代码,可以检查多种语言(比如C\C++, java, c#等)的代码,常见的编程语言都支持,下面先来看看如何使用命令行来检查c++重 ...
- VS开发中的代码编写小技巧——避免重复代码编写的几种方法
上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生. 在开发过程中, ...
- Java 开发者不容错过的 12 种高效工具
Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松.目前,市面上涌现出越来越多的高效编程工具.所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用.正在使用或 ...
- 分析和解析PHP代码的7大工具
PHP已成为时下最热门的编程语言之一,然而却有许多PHP程序员苦恼找不到合适的工具来帮助自己分析和解析PHP代码.今天小编就为大家介绍几个非常不错的工具,来帮助程序员们提高自己的工作效率,一起来看看吧 ...
- .NET开发不可错过的25款高效工具
这些年来,微软的 .NET 开发团队不断在更新升级开发工具,这也提供了一个机会,让我们能对 .NET 系列的开发工具做出不断的评估和规范.以下是我们总结出的一些 .NET 开发不可错过的高效工具. 1 ...
- Web前端开发最佳实践(9):CSS代码太太乱,重复代码太多?你需要精简CSS代码
前言 提高网站整体加载速度的一个重要手段就是提高代码文件的网络传输速度.之前提到过,所有的代码文件都应该是经过压缩了的,这可提高网络传输速度,提高性能.除了压缩代码之外,精简代码也是一种减小代码文件大 ...
- 使用Simian进行重复代码检测
一.概述 Simian是一个可跨平台使用的重复代码检测工具,有商用和免费两种使用渠道,官方网址为:http://www.harukizaemon.com/simian/installation.htm ...
- [转帖]Linux查找文件6个高效工具
Linux查找文件6个高效工具 https://www.linuxrumen.com/rmxx/176.html 需要实操 -inname -type 等等. 1. 前言 我们使用Linux过程中,经 ...
- 前端开发工具-VsCode插件【个人开发常用】
前端开发工具-VsCode插件[个人开发常用] Atom One Dark Theme-主题 Chinese (Simplified) Language Pack for Visual Studio ...
随机推荐
- mysql创建和使用数据库
mysql连接和断开 mysql -h host -u user -p******** /*建议不要在命令行中输入密码,因为这样做会使其暴露给在您的计算机上登录的其他用户窥探*/ mysql -u u ...
- ACwing 258. 石头剪子布
258. 石头剪子布 题目传送门 题意挺好理解,但是当我看样例的时候就傻了.不是说好的只有一个裁判的吗?出现矛盾的时候该怎么判定裁判? 分析 观察这个数据量就会发觉是有猫腻的,直接从正面求出裁判并不是 ...
- Educational Codeforces Round 91 (Rated for Div. 2) D. Berserk And Fireball
题目链接:https://codeforces.com/contest/1380/problem/D 题意 给出一个大小为 $n$ 的排列 $a$ 和一个序列 $b$,有两种操作: 花费 $x$ 消除 ...
- 13. 从0学ARM-Cortex-A9 RTC裸机程序编写
一.RTC RTC(Real-Time Clock) 实时时钟. RTC是集成电路,通常称为时钟芯片.在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关 ...
- C++中流操作符<<重载的实现
一.继承fstream后重载其<< 注意:重载函数中不能直接使用参数中的流out,否则会出现递归出错. class CLogStream : public ofstream { publi ...
- Superset 1.0.1发布——稳定版本
Apache Superset最近发布了1.0.1版本,这也是1.0版本后的有一个重大的版本,Superset也会在以后有更多的改进.那么让我们来看一下最新的新功能吧. 用户体验 通过更简单,更直观的 ...
- Redis-sentinel 哨兵(HA)
Sentinel 介绍 Redis-Sentinel 是 Redis 官方推荐的高可用性(HA)解决方案,当用 Redis 做 Master-slave 的高可用方案时,假如Master 宕机了,Re ...
- Kubernets二进制安装(1)集群,软件,IP规划
1.Kubernetes节点信息情况 主机名 简称 角色 IP地址 操作系统 mfyxw10.mfyxw.com mfyxw10 K8S代理节点1 192.168.80.10 CentOS7.7 mf ...
- Git使用指南(下)
9 初识分支 把每一次的提交,都用线连起来,你会发现,很连贯. C/C++ 指针的概念 git reset --hard commitid HEAD 如果说内容已经add到暂存区,此时要想 ...
- BZOJ3211 花神游历各国(分块 区间开根号)
题意:给n个数,可以进行两种操作:给区间[l,r]每个数开方向下取整:算区间[l,r]的和. 思路:我们可以知道,一个数一直开方下去,就会变成0或者1,然后就不会变了.那么当一个区间只剩0或1时,就不 ...