VS中Code Snippet 代码段
VS中Code Snippet 代码段
VS中Code Snippet 代码段在开发的项目的时候,我们经常遇到需要重复编写一些类似的代码,比如经常会使用 for、foreach ? 在编写这两个循环语句的时候,除了一个字符一个字符敲,我们还可以使用 Visual Studio 提供的Code Snippet 工具自动生成呢。
一、VS中Code Snippet代码段初步认识
我们只需要在代码编辑器中输入for,就会看到 Visual Studio 的自动提示框中出现了如下红框框起来的部分,这个时候只需要连按两下 tab 键,便会自动补全 for 循环语句(如图2所示),并且默认选中索引,以便你进行修改。
例如
连按两下 tab 键后,自动补全循环语句
二、VS中Code Snippet代码段是怎么做到的
Code Snippet其实只是一个 xml,只不过包含了一些只有 Visual Studio 才认识的元素,这些元素就定义了如何去替我们补全代码
例如: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>index</ID>
<Default>i</Default>
<ToolTip>索引</ToolTip>
</Literal>
<Literal>
<ID>max</ID>
<Default>length</Default>
<ToolTip>最大长度</ToolTip>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[for (int $index$ = 0; $index$ < $max$; $index$++)
{
$selected$ $end$
}]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Code Snippet代码段XML文件的说明
一个 CodeSnippet 则主要包含 <Header> 和 <Snippet> 两部分。上面的结构挺清晰的,一个 <CodeSnippets> 元素可以包含多个不同的 <CodeSnippet> 。
其中 <Header> 部分主要是对这个 Snippet 的一个声明,包括 Snippet 的名称、描述、作者及 Snippet 的类型。
1、<Snippet> 元素
snippet元素是关键的重点,完整的 snippet 元素结构如下:
<Snippet>
<Declarations>... </Declarations>
<Code>... </Code>
</Snippet>
2、<Declarations> 元素
该元素用于定义在运行中需要被替换的变量,Microsoft 提供了两种类型:Literal(文本)和 Object(对象)。
其中Literal 类型
完整的 <Literal> 结构如下:
<Literal Editable="true/false">
<ID>... </ID>
<ToolTip>... </ToolTip>
<Default>... </Default>
<Function>... </Function>
</Literal>
Literal 类型各字段说明
ID 用于指定需要被替换的对象名称,有且只有一个。Editable 意味在生成代码过程中能不能直接替换成我们想要文本,比如 for 循环中的索引变量,默认是 “i”,但是我们可以替换成任何自己想要的,比如 “Index”。
Default 表示默认生成代码时,该对象将被 Default 值给代替。
Function 指示当该对象在获取焦点的时候将要执行的方法。在 Visual Studio 中目前只支持三个方法:GenerateSwitchCases(EnumerationLiteral)、ClassName()、SimpleTypeName(TypeName)。
其中 GenerateSwitchCases 顾名思义是用于为switch的变量生成case条件的。
ClassName方法用于获取当前的类名。
SimpleTypeName 则用于缩短类型的名字,因为有些时候有些程序集不会被using进来,这个时候对该程序集中某一类型的调用就需要使用 “名称空间.类型名称” 这种方式。但是如果当前的文件已经把需要的程序集using进来了,那这种调用方式就显得是多此一举。通过使用 SimpleTypeName 就能在生成代码的时候帮助我们判断是否需要加上名称空间这个前缀。
3、<Code> 元素
我们的代码就是写在了该元素内部。
先来看一个例子:
<Code Language="csharp"><![CDATA[for (int $index$ = 0; $index$ < $max$; $index$++)
{
$selected$ $end$
}]]>
上面的代码相当简单,所有需要在生成代码的时候被替换的内容都用 $ 包裹,如$index$,记住这个被包裹的内容必须在 <Declarations> 被正确定义过。因为代码中可能会有一些在XML中有特殊含义的字符,所以用CDATA进行包裹,防止错误转义。
$selected$ 和 $end$ 是保留的关键字,其中 $end$ 用于指示当代码插入完毕后,光标应该位于的位置。$selected$ 用于表示在生成代码前你所选中的文本,并在生成代码的过程中使用你选中的文本替换 $selected$,常用于 SurroundWith 这种类型的 Code Snippet 中。
4、Snippet 类型
根据我们的使用方式,snippet 分为 Expansion、SurroundsWith 及 Refactoring(只能在重构过程中使用,自定义的 Code Snippet 不能使用)。
Expansion:允许将代码段插入到光标处。
SurroundsWith:允许将此代码段放置在一段选定的代码周围。比如我们写完一段代码后,发现忘记加 try...catch... 了,这个时候可以选中需要包裹在 try...catch... 中的代码,然后调用 Code Snippet。
三、自定义一个自动生成 Debug.WriteLine 的 Code Snippet 代码段
1、打开 Visual Stuido / 文件 / 新建 / 文件,选择 xml 类型,在 xml 文件中,输入snippet代码
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>dw</Title>
<Description>Debug.WriteLine</Description>
<Shortcut>dw</Shortcut>
<Author>Charley</Author>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>text</ID>
<ToolTip>希望输出的内容</ToolTip>
<Default>"text"</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[Debug.WriteLine($text$);$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
2、将该Code Snippet 代码段导入到代码段管理器
(1)、工具 / 代码段管理器 打开管理器
(2)、使用 “导入” 将自定义的文件导入进来
(3)、为自己的 snippet 选择一个位置
(4)、点击完成就已经成功了。在代码编辑器中,输入 dw 就会发现 Visual Stuido 的智能提示已经出现了我们的 snippet
- 介绍几个Visual Studio 调试技巧
- Visual Studio中使用正则表达式替换
- vscode react插件(基于visual studio code + react 开发环境搭建过程)
- Visual Studio中 sln 和 suo 文件
- 创建自己的Visual Studio工程模板
- Visual Studio 自动添加头部注释
- Visual studio中使用VSCommands插件在大括号尾部显示方法或过程名字
- 关闭visual studio 的实时调试
- 使用Visual Studio为WebAPI生成帮助文档
- 实用的Visual Studio插件
- visual studio怎么连接数据库(使用Visual Studio Code连接MySql数据库并进行查询)
- Visual Studio的browser link
- 改变Visual Studio的主题
- Visual Studio代码缩略图
- Visual Studio 调试方法
- Visual Studio 编译中活动平台AnyCPU
- 《倚天屠龙记》再遭翻拍,关晓彤主演赵敏,蒋劲夫演张无忌,你怎么看(倚天屠龙记再遭翻拍)
- 吴启华与曾舜晞两代张无忌同框,戏里经典的他却没活出原著的潇洒(吴启华与曾舜晞两代张无忌同框)
- 经常发这三种 朋友圈 的人,要迅速屏蔽(经常发这三种朋友圈)
- 有种尴尬叫朋友圈忘屏蔽,大学生上演社死现场,父母亲自下场吐槽(有种尴尬叫朋友圈忘屏蔽)
- 朋友圈屏蔽你的人,可以直接看淡了(朋友圈屏蔽你的人)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
热门推荐
- laravel授权怎么用(laravel 使用auth编写登录的方法)
- html5按钮点击跳转(HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题)
- sql如何把重复数据记录删除(sql分组后二次汇总处理表重复记录查询和删除的实现方法)
- python获取日期(Python根据当前日期取去年同星期日期)
- MongoDB命令与SQL语法对比
- css修饰文本的方法(CSS常用文本样式总结)
- python函数大全详细(详解Python函数式编程—高阶函数)
- python编程加密解密(python实现AES加密解密)
- tortoisesvn 合并分支
- SQLServer数据库从高版本降级到低版本实例详解(SQLServer数据库从高版本降级到低版本实例详解)