VS Code 代码片段编写教程

最近要做一个vs code的代码片段插件,于是搜索和学习相关内容,整理分享给大家!

[!TIP]

本篇博客50%+内容由BingChat提供,然后作者对内容进行验证和整理。

格式

使用json格式定义代码片段,示例:

{
"ng if": {
"prefix": "ngif",
"body": "",
"description": "ng if"
},
"ng for": {
"prefix": "ngfor",
"body": "",
"description": "ng for"
}
}

语法:基本使用

  • $0:表示最终光标位置。
  • ${1:default}:表示带有默认值的占位符。当代码片段展开时,光标会定位在这个占位符上,并显示默认值 "default"。
  • $CURRENT_YEAR$CURRENT_MONTH$CURRENT_DATE 等:表示当前日期和时间的变量。
  • ${1|one,two,three|}:表示带有选项的占位符。当代码片段展开时,光标会定位在这个占位符上,并显示一个下拉列表,供用户选择 "one"、"two" 或 "three"。

下面是一个使用了多种占位符和变量的代码片段示例:

{
"Print date": {
"prefix": "date",
"body": [
"// Current date: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE",
"console.log('Hello, ${1:world}!');",
"$0"
],
"description": "Print current date and hello message"
}
}

上面的代码定义了一个名为 "Print date" 的代码片段。它的前缀为 "date",当你在编辑器中输入 "date" 并按下 Tab 键时,它会展开为:

// Current date: 2022-12-01
console.log('Hello, world!');

其中,第一行显示了当前日期,第二行显示了一条带有默认值 "world" 的消息。光标最终会定位在 $0 处。

语法:预定义常量

  • $TM_SELECTED_TEXT:表示当前选中的文本。
  • $TM_CURRENT_LINE:表示当前行的内容。
  • $TM_CURRENT_WORD:表示当前光标所在单词的内容。
  • $TM_LINE_INDEX:表示当前行的索引(从 0 开始)。
  • $TM_LINE_NUMBER:表示当前行号(从 1 开始)。
  • $TM_FILENAME:表示当前文件名。
  • $TM_FILENAME_BASE:表示当前文件名(不带扩展名)。
  • $TM_DIRECTORY:表示当前文件所在目录。
  • $TM_FILEPATH:表示当前文件的完整路径。

你可以在代码片段中使用这些变量来插入动态内容。例如,下面是一个使用了 $TM_SELECTED_TEXT 变量的代码片段:

{
"Print selected text": {
"prefix": "printsel",
"body": [
"console.log('$TM_SELECTED_TEXT');",
"$0"
],
"description": "Print selected text to console"
}
}

上面的代码定义了一个名为 "Print selected text" 的代码片段。它的前缀为 "printsel",当你在编辑器中选中一些文本,然后输入 "printsel" 并按下 Tab 键时,它会展开为:

console.log('selected text');

其中,"selected text" 是你之前选中的文本。

语法:转换

在 Visual Studio Code 的代码片段中,你可以使用转换来对变量或占位符的值进行处理。转换是一种特殊的语法,可以让你在代码片段中使用正则表达式和格式字符串来修改变量或占位符的值。

下面是一个使用转换的代码片段示例:

{
"Transform example": {
"prefix": "transform",
"body": [
"Original: ${1:example}",
"Upper case: ${1/(.*)/${1:/upcase}/}",
"$0"
],
"description": "Example of using transform in snippet"
}
}

上面的代码定义了一个名为 "Transform example" 的代码片段。它的前缀为 "transform",当你在编辑器中输入 "transform" 并按下 Tab 键时,它会展开为:

Original: example
Upper case: EXAMPLE

其中,第二行使用了转换语法 ${1/(.*)/${1:/upcase}/} 来将第一个占位符的值转换为大写。转换语法中,(.*) 是一个正则表达式,用于匹配占位符的值;${1:/upcase} 是一个格式字符串,用于将匹配到的值转换为大写。

除了 /upcase 之外,还有其他一些预定义的格式字符串可以使用,例如 /downcase(转换为小写)、/capitalize(首字母大写)和 /pascalcase(帕斯卡命名法)等。

你也可以使用自定义的格式字符串来对匹配到的值进行处理。例如,下面是一个使用自定义格式字符串的代码片段示例:

{
"Custom transform example": {
"prefix": "custom",
"body": [
"Original: ${1:example}",
"Reverse: ${1/(.*)/${1[::-1]}/}",
"$0"
],
"description": "Example of using custom transform in snippet"
}
}

上面的代码定义了一个名为 "Custom transform example" 的代码片段。它的前缀为 "custom",当你在编辑器中输入 "custom" 并按下 Tab 键时,它会展开为:

Original: example
Reverse: elpmaxe

其中,第二行使用了转换语法 ${1/(.*)/${1[::-1]}/} 来将第一个占位符的值反转。转换语法中,${1[::-1]} 是一个自定义格式字符串,用于将匹配到的值反转。

总之,在 Visual Studio Code 的代码片段中,你可以使用转换来对变量或占位符的值进行处理。你可以使用预定义或自定义的格式字符串来修改变量或占位符的值。

VS Code 代码片段编写教程的更多相关文章

  1. Java Android程序员软件开发知识:枚举的介绍,以及代码的编写教程。

    Java枚举 Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值.使用枚举可以减少代码中的bug. 例如,我们为果汁店设计一个程序,它将限制果汁为小杯.中杯.大杯.这就意味着它不允许顾客点除 ...

  2. Visual Studio 如何使用代码片段Code Snippet提高编程速度!!!

      使用Code Snippet简化Coding 在开发的项目的时候,你是否经常遇到需要重复编写一些类似的代码,比如是否经常会使用 for.foreach ? 在编写这两个循环语句的时候,你是一个字符 ...

  3. Writing Reentrant and Thread-Safe Code(译:编写可重入和线程安全的代码)

    Writing Reentrant and Thread-Safe Code 编写可重入和线程安全的代码 (http://www.ualberta.ca/dept/chemeng/AIX-43/sha ...

  4. visual studio code开发代码片段扩展插件

    背景 visual studio code编辑器强大在于可以自己扩展插件,不仅可以去插件市场下载,也可以按照官方的API很方便的制作适合自己的插件: 自己最近在开发一个手机端网站项目,基于vant项目 ...

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

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

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

    VS Code项目中共享自定义的代码片段方案 一.问题背景 项目中注释风格不统一,如何统一注释风格 一些第三方组件库名称太长,每次使用都需要找文档,然后复制粘贴 部分组件库有自己的Snippets插件 ...

  7. VS里的 代码片段(Code snippet)很有用,制作也很简单

    工欲善其事必先利其器,而 Visual Studio 就是我们的开发利器. 上一篇文章,介绍了一个很棒的快捷键,如果你还没用过这个快捷键,看完之后应该会豁然开朗.如果你已经熟练的应用它,也会温故而知新 ...

  8. WPF技巧:通过代码片段管理器编写自己常用的代码模板提示效率

    在写自定义控件的时候,有一部分功能是当内部的值发生变化时,需要通知控件的使用者,而当我在写依赖项属性的时候,我可以通过popdp对应的代码模板来完成对应的代码,但是当我来写属性更改回调的时候,却发现没 ...

  9. Code Snippets 代码片段

    Code Snippets 代码片段       1.Title : 代码片段的标题 2.Summary : 代码片段的描述文字 3.Platform : 可以使用代码片段的平台,有IOS/OS X/ ...

  10. sublime text3 之snippet编写代码片段

    sublime text 3 中有个强大的功能就是可以编写各种文件类型的snippet代码片段,可以节省大量的时间. 文件名为:jekyll-top.sublime-snippet(.sublime- ...

随机推荐

  1. Windows wsl2支持systemd

    背景 很多Linux发行版都是使用systemd来管理程序进程,但是在WSL中默认是用init来管理进程的. 为了符合长久的使用习惯,且省去不必要的学习成本,就在WSL的发行版(我这里安装的是Ubun ...

  2. 【FAQ】视频编辑服务常见问题及解答

    Q1问题描述 1. 访问贴纸等素材的时候提示"网络异常,请重试"怎么办? 2. 使用AI能力时,提示"errorCode:20124 errorMsg:Method no ...

  3. HarmonyOS应用兼容稳定性云测试

      兼容性测试 兼容性测试主要验证HarmonyOS应用在华为真机设备上运行的兼容性问题,包括首次安装.再次安装.启动.卸载.崩溃.黑白屏.闪退.运行错误.无法回退.无响应.设计约束场景.具体兼容性测 ...

  4. 在python中实现二叉树

    二叉树设计 定义节点类 class Node: # 修改初始化方法 def init(self,value): self.value = value # 节点值 self.left = None # ...

  5. node require 运行步骤

    前言 准备整理node 系列,先把一些基础含义放出来. 在学习node 的时候我们一般加载模块都是require,那么require 是如何运行的呢? 正文 通常,在Node.js里导入是通过 req ...

  6. 部署iis7和vs2010低版本项目遇到的一些问题

    前提 本人一直用iis10然后用的是vs2015,项目框架也用的是高版本的,所以后来接触了一个项目,部署iis7遇到的一些问题,按顺序总结出来,希望有所帮助. 正文 按顺序来: 1.HTTP错误 40 ...

  7. 有意思的JavaScript代码写法【持续更新,欢迎留言分享有趣代码】

    filter过滤假值 [1,2,null].fiter(Boolean) 2.Object.is 健壮的相等判断 Object.is(NaN,NaN) Object.is(+0,-0) Object. ...

  8. 力扣287(java&python)-寻找重复数(中等)

    题目: 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数. 假设 nums 只有 一个重复的整数 ,返回 这个重复的 ...

  9. 力扣670(java)-最大交换(中等)

    题目: 给定一个非负整数,你至多可以交换一次数字中的任意两位.返回你能得到的最大值. 示例 1 : 输入: 2736输出: 7236解释: 交换数字2和数字7.示例 2 : 输入: 9973输出: 9 ...

  10. App隐私合规“免费”自动化检测

    简介: App隐私合规检测提供了全面的隐私合规检测报告和专家建议,从确保形式合规(隐私政策文本合规性)及实质合规(代码层合规性)的一致性,从个人信息收集.权限使用场景.超范围采集.隐私政策.三方SDK ...