ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Viusal Studio 代码片段管理

2022-06-18 21:34:47  阅读:182  来源: 互联网

标签:片段 定义 代码 Viusal Visual 循环 Studio MyClass


什么是代码片段?

所谓代码片段,指的是一小段可以重复拿来修改使用的代码块。

比如一些常见的 for 循环、类的定义等等。

// for 循环
for(size_t i = 0; i < length; i++)
{

}

// 类的定义
class MyClass
{
public:
    MyClass();
    ~MyClass();

private:

};

MyClass::MyClass()
{
}

MyClass::~MyClass()
{
}

在 Visual Studio 中,提供了一种快速生成代码片段的快捷方式,具体用法如下:

当你在编辑器中输入 for 之后,IDE 会弹出相关的代码片段,如 “for” 、"foreach"、 “forr” 等,首选项为 “for”,并为其提供了提示文字:for,“for”循环的代码片段。

image

然后按下 Tab 时,自动生成 for 循环代码片段:

image

同理,当你输入 class 时,按下 Tab 也会自动生成相应的代码片段:

image

代码片段从哪读取的?

在 VS 的顶部功能栏,选择 工具 > 代码片段管理:

image

弹出如下界面:

image

这里记录了所有语言的代码片段集合、以及对应的存储位置,并且提供了自定义代码片段功能,此处的 “My CSS Snippets” 就是用来读取用户自定义的代码片段的。

我们选择在语言中下拉选择 “Visual C++”,然后选择左下角窗口中的 Visual C++ 文件夹,找到 for:

image

可以看到这里记录了 for 这个代码片段,右侧对其进行了解释。

注意到上方提供了位置路径,我们打开它,并找到 "for.snippet",文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
	<CodeSnippet Format="1.0.0">
		<Header>
			<Title>for</Title>
			<Shortcut>for</Shortcut>
			<Description>“for”循环的代码片段</Description>
			<Author>Microsoft Corporation</Author>
			<SnippetTypes>
				<SnippetType>Expansion</SnippetType>
				<SnippetType>SurroundsWith</SnippetType>
			</SnippetTypes>
		</Header>
		<Snippet>
			<Declarations>
				<Literal>
					<ID>type</ID>
					<Default>size_t</Default>
					<ToolTip>控制变量类型</ToolTip>
				</Literal>
				<Literal>
					<ID>index</ID>
					<Default>i</Default>
					<ToolTip>索引</ToolTip>
				</Literal>
				<Literal>
					<ID>max</ID>
					<Default>length</Default>
					<ToolTip>最大长度</ToolTip>
				</Literal>
			</Declarations>
			<Code Language="cpp"><![CDATA[for ($type$ $index$ = 0; $index$ < $max$; $index$++)
		{
			$selected$ $end$
		}]]>
			</Code>
		</Snippet>
	</CodeSnippet>
</CodeSnippets>

该文件使用的是 xml 语法,定义了 for 循环代码片段。

代码片段是如何被定义的?

xml 语言具有层级关系,下面按照标签包裹关系分析以下 for 循环代码片段是如何被定义的。

一个代码片段被定义在一组 CodeSnippet 中,其内部又分为 HeaderSnippet

Header 中定义了代码片段的标题(Title)、快捷方式(Shortcut)、说明(Description)、作者(Author)、以及代码片段的类型(SnippetType)。以上代码内容编号后与界面元素对应关系如下:
image

类型(SnippetType)中有两种可选类型:

  • SurroundsWith表示代码片段可以将已有的代码包裹进代码片段中。
  • Expansion表示代码片段可以在光标处插入。

这部分代码主要定义了快捷方式的基本信息,负责输出代码片段内容的在 Snippet 中。

Snippet 中,将代码片段分成变量申明(Declarations) 和代码块(Code)。

image

Declarations 中由 Literal 包裹着的为一个变量。变量具有 ID、提示语(ToolTip)、默认值(Default)。当需要申明多个变量时,可以在 Declarations 中写入多组 Literal 。

Code 中,需要指明语言类型 Language="cpp",然后开始定义代码内容。

这里语法是这样的:

<![CDATA[你的代码内容]]>

在Literal 中申明的变量可以用一对美元符号包裹起来,放在代码内容里,自行转换成其值。

其中 $selected$ 表示的是被选中的已有代码,与SurroundsWith类型对应,实现已有片段的包裹。$end$ 表示代码插入后,光标停留的位置。

假设我想把 int a=10; 这段代码包裹一层 for 循环。那么选择代码,右键>外侧代码>Visual C++>for,双击for(或者按下回车)即可。

image

image

image

写一个自己的代码片段

掌握上面的规则后,我们可以自己DIY代码片段了。

假设我现在要实现一个函数代码功能快速注释的功能,希望输入 funcdef 时,自动给我生成以下格式的注释模板

/**
 * @brief 
 * 
 * @param[in]
 * @param[out]
 * @return
 */

则可在自定义文件夹中写入自己的 snippets 文件
image

内容如下:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
	<CodeSnippet Format="1.0.0">
		<Header>
			<Title>funcdef</Title>
			<Shortcut>funcdef</Shortcut>
			<Description>函数功能注释</Description>
			<Author>GShang</Author>
			<SnippetTypes>
				<SnippetType>Expansion</SnippetType>
			</SnippetTypes>
		</Header>
		<Snippet>
			<Code Language="cpp">
<![CDATA[/**
 * @brief	$end$
 * 
 * @param[in] 
 * @param[out] 
 * @return
 */]]>
			</Code>
		</Snippet>
	</CodeSnippet>
</CodeSnippets>

注意代码片段最左边为左对齐
效果如下:
image
image

参考资料

标签:片段,定义,代码,Viusal,Visual,循环,Studio,MyClass
来源: https://www.cnblogs.com/gshang/p/16389339.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有