VSCODE自定义代码片段简述与基础使用

目录

  • 一、 简述
  • 二 、 基础使用说明
    • 2.1 新建一个代码块工作区间
    • 2.2 语法
  • 三、 示例
  • 四、 参考链接

一、 简述

VSCode的自定义代码片段功能允许开发者根据自己的需求定义和使用自己的代码片段,从而提高编码效率。
优点:

  1. 提高效率: 自定义代码片段能够减少重复输入的工作量,特别是对于经常使用的代码模式或者特定的代码结构。
  2. 规范代码风格: 可以定义统一的代码风格和命名规范,让团队成员在编码过程中更加一致。
  3. 易于维护: 用户代码片段文件可以轻松地进行编辑和管理,可以随时添加、删除或修改代码片段。
  4. 适应个性化需求: 开发者可以根据自己的习惯和需求定制代码片段,使得编码过程更符合个人的工作流程。
  5. 跨平台支持: VSCode跨平台,并且用户代码片段可以在不同的操作系统上共享和使用。

二 、 基础使用说明

2.1 新建一个代码块工作区间

点击左下角的设置
在这里插入图片描述
点击用户代码片段
在这里插入图片描述
在这里插入图片描述
选择新建全局代码片段
输入文件名称
在这里插入图片描述
在这里插入图片描述

2.2 语法

以下是snippets模板文件的示例代码

	Example:
	"Print to console": {
		"scope": "javascript,typescript",
		"prefix": "log",
		"body": [
			"console.log('$1');",
			"$2"
		],
		"description": "Log output to console"
	}
  1. “Print to console” : 代码片段的名称,显示在代码片段提示列表中。
  2. “prefix” : 代码片段的触发前缀,当你键入这个前缀时,VSCode会自动提示该代码片段。
  3. “body” : 代码片段的实际内容,以数组的形式列出。在数组中,可以使用 $1、$2 等占位3. 符来表示光标停留的位置,方便用户进行填写和编辑。
  4. “description” : 代码片段的描述,当你在代码片段提示列表中看到该片段时,会显示该描述。

在上面的示例中,当你键入 log 后按下 Tab 键时,就会展开为 console.log(‘’);,其中的单引号之间是光标所在位置,方便你直接输入要打印的内容。再次按下 Tab 键,光标移动到 $2 所在的位置,方便你继续编辑后续代码。

body内介绍
Ⅰ 规则

	Example:

		"body": [
			"1",
			"2",
			"3",
			"4","5",
			   "6",
			"7"
		],
	

以双引号框住,逗号分隔为实际代码里的一行,在引号外的空格回车皆不会影响引号内的格式
在这里插入图片描述
如若需要进行特殊对齐缩进需要在引号内部操作,如在引号内部使用
“\t”制表符进行对齐

		"begin and end": {  
			"prefix": "bend",  
			"body": [
				"begin",
				"\tbegin",
				"\tend",
				"end"
			], 
			"description": "begin and end"  
		}, 

在这里插入图片描述

Ⅱ 方法
① 光标位置控制


		"Cursor Position": {
			"prefix": "var",
			"body": [
				"const haha = '$1';",
				"const xixi = '$2'.toUpperCase();",
				"$3"
			],
			"description": "Variable Replacement"
		}

输入关键词 var 然后 回车 或者 TAB 展开代码段后,光标会移动至 $[数字] 的位置(优先较 数字),而后在不通过 方向键 或者鼠标移动光标位置的情况下,继续按 TAB 就会移动至下一个较数字
在这里插入图片描述
② 变量替换


    "Replace console.log with debug function": {  
        "prefix": "clog",  
        "body": [  
            "debug(${variable1}, ${variable1}, ${variable2});"  
        ],  
        "description": "Replace console.log with debug function and multiple variables"  
    }  

展开代码片段后光标移动至变量位置,输入内容即可将相同变量同时替换为相同内容

在这里插入图片描述
③ 二者结合

    "Replace console.log with debug function": {  
        "prefix": "clog~",  
        "body": [  
            "debug(${2:variable1}, ${3:variable2}, ${1:variable3});"  
        ],  
        "description": "Replace console.log with debug function and multiple variables"  
    }  

只需在变量名称前添加 [数字] : 即可通过 TAB 按照数字顺序移动光标
在这里插入图片描述

三、 示例

① verilog计数器

{
	// Place your snippets for verilog 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.
	"计数器": {
		"prefix": "cnt",
		"body": [
		"reg         [${2:cnt_width}-1:0]      cnt_${1:cnt_name}    ; //计数器",
    	"wire                    add_cnt_${1:cnt_name}; //开始计数",
    	"wire                    end_cnt_${1:cnt_name}; //计数器最大值",
		"always @(posedge sys_clk or negedge sys_rst_n) begin",
    	"\tif (!sys_rst_n)begin",
        "\t\t cnt_${1:cnt_name} <= ${2:cnt_width}'b0;",
		"\tend",
    	"\telse if (add_cnt_${1:cnt_name})begin",
        "\t\tif (end_cnt_${1:cnt_name})begin",
        "\t\t\tcnt_${1:cnt_name}<=${2:cnt_width}'b0;",
        "\t\tend",
        "\t\telse begin",
        "\t\t\tcnt_${1:cnt_name} <= cnt_${1:cnt_name} +1'd1;",
        "\t\tend",
    	"\tend",
    	"\telse begin",
        "\t\tcnt_${1:cnt_name} <= cnt_${1:cnt_name};",
    	"\tend",
		"end",
		"assign add_cnt_${1:cnt_name} = ${3:param3};",
		"assign end_cnt_${1:cnt_name} = add_cnt_${1:cnt_name} && (${4:param4});"
		],
		"description": "计数器模板"
	}
}

在这里插入图片描述

② ros有关代码片段(待补全)

{
	// Place your 全局 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and 
	// description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope 
	// is left empty or omitted, the snippet gets applied to all languages. 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:
	"link": {
		"scope": "xml",
		"prefix": "<link",
		"body": [
			"<link name=\"$1\">",
			"\t<visual>",
			"\t\t<geometry>",
			"\t\t</geometry>",
			"\t\t<origin xyz=\"$2\" rpy=\"$3\"/>",
			"\t\t<material name=\"$4\">",
			"\t\t\t<color rgba=\"$5\"/>",
			"\t\t</material>",
			"\t</visual>",
			"</link>"
		],
		"description": "link"
	},
	"robot": {
		"scope": "xml",
		"prefix": "<robot",
		"body": [
			"<robot name=\"$1\">",
			"</robot>"
		],
		"description": "robot"
	},
	"launch to rivz": {
		"scope": "xml",
		"prefix": "<launchrivz",
		"body": [
			"<launch>",
			"\t<param name=\"robot_description\" textfile=\"$1.urdf\" />",
			"\t<node pkg=\"rviz\" type=\"rviz\" name=\"rviz\" args=\"$2.rviz\"/>",
			"</launch>"
		],
		"description": "launch"
	},
	"launch to gazebo": {
		"scope": "xml",
		"prefix": "<launchgaze",
		"body": [
			"<launch>",
			"\t<param name=\"${name}\" textfile=\"${urdf_path}.urdf\" />",
			"<!-- 启动gazebo仿真环境 -->",
			"\t<include file=\"$(find gazebo_ros)/launch/empty_world.launch\"/>",
			"<!-- 在Gazebo中添加机器人模型 -->",
			"<node pkg=\"gazebo_ros\" type=\"spawn_model\" name=\"${spawn_name}\" args=\"-urdf -model mycar -param ${name}\"/>",
			"</launch>"
		],
		"description": "launch with gazebo"
	},
	"node": {
		"scope": "xml",
		"prefix": "<node",
		"body": [
			"<node pkg=\"$1\" type=\"$2\" name=\"$3\"/>"
		],
		"description": "node"
	},
	"joint": {
		"scope": "xml",
		"prefix": "<joint",
		"body": [
			"<joint name=\"$1\" type=\"$2\">",
			"\t<parent link=\"$3\"/>",
			"\t<child link=\"$4\"/>",
			"\t<origin xyz=\"$5\" rpy=\"$6\"/>",
			"\t<!-- <axis xyz=\"$7\"/> -->",
			"</joint>"
		],
		"description": "joint"
	},
	"xacro": {
		"scope": "xml",
		"prefix": "<xarobot",
		"body": [
			"<robot name=\"$1\" xmlns:xacro=\"http://wiki.ros.org/xacro\">",
			"\t$2",
			"</robot>"
		],
		"description": "xacro"
	},
	"xacro:property": {
		"scope": "xml",
		"prefix": "<xp",
		"body": [
			"<xacro:property name=\"$1\" value=\"$2\" />"
		],
		"description": "property"
	},
	"xacro:macro": {
		"scope": "xml",
		"prefix": "<xm",
		"body": [
			"<xacro:macro name=\"$1\" params=\"$2\">",
			"\t$3",
			"</xacro:macro>"
		],
		"description": "macro"
	},
	"gazebo label": {
		"scope": "xml",
		"prefix": "<Gazs",
		"body": [
		"<!-- 1.设置碰撞参数 -->",
		"<collision>",
        "\t<geometry>",
        "\t\t<box size= \"$1\" />",
        "\t</geometry>",
        "<origin xyry>",
        "<origin xyz=\"$2\" rpy=\"$3\"/>",
    	"</collision>",
        "<!-- 2.设置惯性矩镇 -->",
        "<inertial>",
        "\t<origin xyz=\"$4\"/>",
        "\t<mass value=\"$5\"/>",
        "\t<inertia ixx=\"$6\" ixy=\"$7\" ixz=\"$8\" iyy=\"$9\" izy=\"$10\" izz=\"$11\" />",
        "</inertial>",
		"<gazebo reference=\"$12\">",
        "\t<material>Gazebo/$13</material>",
    	"</gazebo>"
		],
		"description": "gazebo "
	},

}

四、 参考链接

1.https://blog.csdn.net/qq_33463449/article/details/103928634

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/575225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

08 内核开发-避免冲突和死锁-mutex

08 内核开发-避免冲突和死锁-mutex 课程简介&#xff1a; Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础&#xff0c;让他们能够理解和参与到Linux内核的开发过程中。 …

JAVA实现easyExcel模版导出

easyExcel文档 模板注意&#xff1a; 用 {} 来表示你要用的变量 &#xff0c;如果本来就有"{“,”}" &#xff0c;特殊字符用"{“,”}"代替{} 代表普通变量{.}代表是list的变量 添加pom依赖 <dependency><groupId>com.alibaba</groupId&g…

记一次数据查询问题

背景: 有一个数据表,适用原始查询就能查到数据 select * from t_easy_barcode where FP01 = panel_jitaix32_2024_04_25_10_29_57 当我把表中数据列重命名之后sql如下: 因此 我先统计了一下数据表中数据有多少,查询发现有 2482872条 因此首先想到的问题是查询一…

【机器学习】特征筛选实例与代码详解

机器学习中的特征筛选 一、特征筛选的重要性与基本概念二、特征筛选的方法与实践1. 基于统计的特征筛选2. 基于模型的特征筛选3. 嵌入式特征筛选 三、总结与展望 在机器学习领域&#xff0c;特征筛选作为预处理步骤&#xff0c;对于提高模型性能、简化模型结构以及增强模型解释…

是时候了解替代FTP传文件的最优传输方案了

目前越来越多的企业在寻找替代FTP传文件的方案&#xff0c;主要原因在于其固有的一些弊端&#xff0c;在现代企业数据传输需求中可能导致安全性、效率和可靠性方面的问题。以下是FTP的一些主要弊端&#xff1a; 1.数据传输不加密&#xff1a;FTP在传输过程中不加密数据&#xf…

Mybatis入门(入门案例,IDEA配置SQL提示,JDBC介绍,lombok介绍)

目录 一、Mybatis入门案例介绍整体步骤创建SpringBoot项目pom依赖准备测试数据新建实体类配置Mybatis数据库连接信息新建接口类,编写SQL代码单元测试 二、IDEA配置SQL提示三、JDBC是什么案例JDBC和Mybatis对比 四、数据库连接池介绍如何实现一个数据库连接池切换数据库连接池 五…

commvault学习(6):备份oracle(包括oracle的安装)

1.环境 CS、MA&#xff1a;一台windows server2012 客户端&#xff1a;2台安装了oracle11g的windows server2008 1.1 windows server2008安装oracle11g &#xff08;1&#xff09;右击安装包内的setup&#xff0c;以管理员方式运行 &#xff08;2&#xff09;取消勾选接收安…

前端学习<四>JavaScript——48-jQuery动画详解

前言 jQuery提供的一组网页中常见的动画效果&#xff0c;这些动画是标准的、有规律的效果&#xff1b;同时还提供给我们了自定义动画的功能。 显示动画 方式一&#xff1a; <span style"background-color:#f8f8f8"><span style"color:#333333"…

Qt 把.exe打包成安装文件形式

目录 1.下载工具 Qt Installer Framework2.将bin文件添加到环境变量3.拷贝startmenu示例-备用4.准备Qt Release打包好的程序5.把Release打包好的程序放到packages\org.qtproject.ifw.example\data文件夹下6.生成安装包7.修改安装包图标8.修改主程序程序安装引导-创建快捷键9.添…

【重磅】刚刚,《学位法》通过!!!2025年1月1日起施行!

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

JetBot手势识别实验

实验简介 本实验目的在JetBot智能小车实现手势识别功能&#xff0c;使用板卡为Jetson Nano。通过小车摄像头&#xff0c;识别五个不同的手势&#xff0c;实现小车的运动及灯光控制。 1.数据采集 连接小车板卡的Jupyterlab环境&#xff0c;运行以下代码块&#xff0c;配置数据…

rust 卸载重新安装 安装

原因&#xff1a;接触区块链时报错 linking with x86_64-w64-mingw32-gcc failed: exit code: 1 Rust编译需要C环境&#xff0c;如果你没有&#xff0c;Rust也能安装成功&#xff0c;只是无法编译代码 C的编译工具有两个&#xff0c;一个是msvc&#xff0c;也就是visual studi…

pytest-xdist:远程多主机 - 分布式运行自动化测试

简介&#xff1a;pytest-xdist插件使用新的测试执行模式扩展了pytest&#xff0c;最常用的是在多个CPU之间分发测试以加快测试执行&#xff0c;即 pytest -n auto同时也是一个非常优秀的分布式测试插件&#xff0c;分别支持ssh和socket两种方式实现master和worker的远程通讯。…

【ensp实验】路由过滤与引入

要求&#xff1a; 1、按照图示配置IP地址&#xff0c;R1, R3&#xff0c;R4上使用loopback 口模拟业务网段&#xff1b; 2、R1和R2运行RIPv2&#xff0c;R2&#xff0c;R3和R4运行OSPF&#xff0c;各自协议内部互通&#xff1b; 3、在RIP和OSPF间配置双向路由引入&#xff0c;要…

imutils包

imutils是Adrian Rosebrock开发的一个python工具包&#xff0c;它整合了opencv、numpy和matplotlib的部分操作&#xff0c;使这些操作更加简便快捷。今天我们将对它的部分功能进行介绍&#xff0c;以便大家在今后的学习工作中&#xff0c;能够灵活运用好imutils包。 安装 当我们…

Idea 21版本 解决Service 控制台启动类不显示端口

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 1.关闭idea&#xff0c;结束进程 2.找到 C:\用户\你的用户名\AppData\Local\Temp 删除&#xff08;hsperfdata_大健康&#xff09;文件 说明&#xff08;hsperfdata_大健康&#xff09; 后面三个中文是…

庐山研习班上介绍的25个LINUX工具

从2013年的第一届算起&#xff0c;庐山研习班走过十余个年头&#xff0c;办了十几次了。但每一次&#xff0c;都有很多不一样。即使是相同的主题&#xff0c;也有很大差异。 今年春季的庐山研习班是在上个周末。周四晚上我和大部分同学都到了五老峰脚下的训练基地。 除了周六下…

【可下载】CDA 1级教材《精益业务数据分析》2023最新版

CDA一级认证教材&#xff1a;《精益业务数据分析》 全面、系统地讲述业务描述性分析为企业决策行为创造价值的全流程技能&#xff0c;涵盖描述性数据分析方法、业务分析方法、数据分析结果应用方法等内容。 条理清晰的结构、通俗易懂的语言、完整立体的知识框架为读者铺开一幅…

Vite 热更新(HMR)原理了解一下

❝ 幸福的三大要素是&#xff1a;有要做的事&#xff08;something to do&#xff09;、有要爱的人&#xff08;someone to love&#xff09;、有寄予希望的东西&#xff08;something to hope for&#xff09; ❞ 大家好&#xff0c;我是「柒八九」。一个「专注于前端开发技术…

CK_Label_V15

CK_Label_v15&#xff08;外接供电版&#xff09; 产品型号 CK_Label_v15 尺寸 63*14.6*7.9mm 按键 0 指示灯 1 RGB&#xff08;7种(红/绿/蓝/黄/紫/白/青)&#xff09; 通信方式 无线通信 工作频段 868MHz 供电方式 24V外接供电 电池容量 300mAh 电池寿命 …