VS Code项目中共享自定义的代码片段方案

一.问题背景

  • 项目中注释风格不统一,如何统一注释风格
  • 一些第三方组件库名称太长,每次使用都需要找文档,然后复制粘贴
    • 部分组件库有自己的Snippets插件
  • 一些组件能记住名称,但太长了手敲全称有点费时间
  • 某些组件还有不少常用的参数,有不有办法在敲出组件的时候,加上一些参数

二.解法

稍加总结就不难看出,这些问题都能通过一些代码片段去解决

问题又来了:如何在项目中共享自定义的代码片段?

编辑器以VS Code为例,引入自定义代码片段的方案有如下几种:

  1. 通过扩展市场,以插件的方式引入(比较推荐各UI 组件库做一个)
  2. 直接在VS Code中引入自定义代码片段(首选项 -> 用户片段)
    1. 全局
    2. 当前项目

目前最适合当前场景的方案2-2

三.如何在当前项目中创建自定义的代码片段?

  1. 在当前项目中创建.vscode文件夹
  2. 在其中创建以.code-snippets结尾的文件如:
    1. a.code-snippets
    2. b.code-snippets

如何编写?

first.code-snippets

{
"Print to console": { // 代码片段名称
"scope": "javascript,typescript", // 生效的语言
// (在文件中敲入prefix即可生成body中的内容)
"prefix": "lg", // 片段缩写
"body": [ // string[] 片段的完整内容,每个string代表一行
"console.log('$1');",
"$2"
],
// 在文件中输入完prefix时候,弹出此内容
"description": "Log output to console"
}
}

保存后就可以在工作区生效

body中可以有一些自定义的特殊内容

占位符$

  • $number:$1$2$3

    • 可指定代码片段触发落入编辑器之后的光标位置,光标位置按照从小到大排序,通过Tab 切换
    • $0用于设置光标最终的位置
  • ${number|option1,option2|}: ${1|op1,op2|}
    • 设置占位内容的可选项
  • ${number:value}: ${1:default}
    • 可选内容只有一个的情况

变量

使用 $name 或者 ${name:default} 可以插入变量的值。如果未设置变量,则会插入其默认值或空字符串。当变量未知(未定义其名称)时,会将插入的变量名称转换为占位符。

VS Code内置了许多变量这里就不赘述了,

变量文档/掘金翻译

四.总结

通过在VS Code中创建.vscode文件夹写入x.code-snippets配置文件即可实现自定义代码块的共享

局限

  1. 必须写在.vscode目录中
  2. 不支持文件夹分类,即在.vscode目录生效深度只能为1
  3. 增加项目的文件大小
  4. 需要手动把别人的片段文件放在.vscode目录中

五.未来

部分库(组件/方法/语言)等提供了Snippets插件,但还有一些库没有提供,想把自己的代码块共享给其它人,开发插件的学习成本较高

有没有一种办法能够:

  • 直接引入它人的代码块
  • 传播方便
  • 引入方便
  • 对项目结构没有影响
  • 更新迭代方便

我的设想:

Snippets文件以npm包的形式发布到npm仓库,本地通过一个VS Code插件自动扫描node_modules中的代码片段文件,然后使其在编辑器中生效

接下来去调研看看是否有现成的这种插件,没有的话自己搞个23333

参考文章:

VS Code项目中共享自定义的代码片段方案的更多相关文章

  1. 项目中解决实际问题的代码片段-javascript方法,Vue方法(长期更新)

    总结项目用到的一些处理方法,用来解决数据处理的一些实际问题,所有方法都可以放在一个公共工具方法里面,实现不限ES5,ES6还有些Vue处理的方法. 都是项目中来的,有代码跟图片展示,长期更新. 1.获 ...

  2. 在Xcode中使用自定义的代码片段提高效率

    拖动代码的时候按住option键,很难拖,注意方法:< 引用于:http://www.2cto.com/kf/201409/336245.html

  3. VS Code项目中通过npm包的方式共享代码片段的方案实现

    VS Code项目中通过npm包的方式共享代码片段的方案实现 上周在 "VS Code项目中共享自定义的代码片段方案" 的文章中提到过一个共享代码片段的方案,上周经过调研后并没有发 ...

  4. Vue2/3 项目中的 ESLint + Prettier 代码检测格式化风格指南

    Vue2/3 项目中的 ESLint + Prettier 代码检测格式化风格指南 因为平时都是使用 VSCode ESLint + Prettier 检测格式化不规范代码,但是随着接手的项目越来越多 ...

  5. VS code自定义用户代码片段snippet

    打开VS code,“文件-首选项-用户代码片段-选择新建全局代码片段文件 “ 属性介绍:prefix   就是你自定义的快捷键 body    就是你自定义的代码片段 description 就是这 ...

  6. VSCode添加用户代码片段,自定义用户代码片段

    在使用VScode开发中经常会有一些重复使用的代码块,复制粘贴也很麻烦,这时可以在VScode中添加用户代码片段,输入简写即可快捷输入. VScode中添加用户自定义代码片段很简单. 1.在VScod ...

  7. 自定义sublime代码片段

    sublime text 已经有一些他们内置的一些代码片段,但是有时候,这些并不能满足我们,这就需要我们自定义一些代码片段. 步骤如下: 1.打开sublime text 2.选择 tools -&g ...

  8. sublime自定义snippet代码片段

    相信很多人喜欢sublime编辑工具有两个原因:第一sublime很轻巧方便:第二sublime提供很多自定义拓展功能,包括很简单且和很好用的代码片段功能snippet文件. 今天,在这里就介绍下su ...

  9. 在项目中增加自定义icon图标

    以MUI框架为例,内容来自于MUI官网. mui如何增加自定义icon图标 mui框架遵循极简原则,在icon图标集上也是如此,mui仅集成了原生系统中最常用的图标:其次,mui中的图标并不是图片,而 ...

随机推荐

  1. dede列表页限制标题长度

    {dede:list pagesize ='10' titlelen="45"} <li><a href="[field:arcurl/]"& ...

  2. JAVA局部变量和成员变量的区别

    成员变量与局部变量的区别 1.在类中的位置不同 成员变量:在类中方法外面 局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中) 2.在内存中的位置不同 成员变量:在堆中(方法区中的静态区) ...

  3. 转 js自定义事件——Event和CustomEvent

    之前在学习自定义事件时,在MDN的Event.initEvent()页面顶端有写:该特性已从Web标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性. 作 ...

  4. Istio 1.6架构及性能

    Istio 架构 Istio 服务网格从逻辑上分为数据平面和控制平面. 数据平面 由一组智能代理(Envoy)组成,被部署为 sidecar.这些代理负责协调和控制微服务之间的所有网络通信.他们还收集 ...

  5. oracle 11g 用户名和密码默认区分大小写

    oracle 11g 用户名和密码默认区分大小写,可更改alter system set sec_case_sensitive_logon=false 设置改为不区分大小写.

  6. 【JavaScript数据结构系列】07-循环链表CircleLinkedList

    [JavaScript数据结构系列]07-循环链表CircleLinkedList 码路工人 CoderMonkey 转载请注明作者与出处 1. 认识循环链表 首节点与尾节点相连的,就构成循环链表.其 ...

  7. HTTP 规范中的那些暗坑

    HTTP 协议可以说是开发者最熟悉的一个网络协议,「简单易懂」和「易于扩展」两个特点让它成为应用最广泛的应用层协议. 虽然有诸多的优点,但是在协议定义时因为诸多的博弈和限制,还是隐藏了不少暗坑,让人一 ...

  8. [书籍分享]0-006.App营销解密:移动互联网时代的营销革命

    封面 内容简介 如何在移动互联网上推广和销售自己的产品?如何通过移动互联网为顾客提供服务?如何在移动互联网上树立和传播自己的品牌?这几乎是当下所有互联网企业和传统企业都在思考的问题,企业要想在移动互联 ...

  9. [安卓自动化测试] 001.UIAutomator初探

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  10. Mysql基础(三)

    #DML语言 /* 数据操作语言 插入:insert insert into 表名(列名,...) values(值1,...); insert into 表名 set 列名=值, 列名=值,... ...