代码段简述
我们使用宇宙第一IDE Visual Studio 进行开发时,常常会用到一些代码感知、代码补全的功能。例如:在文件中键入 switch 接着按下 Tab 键,编辑器会为我们补全后面的代码,IDE为我们补全的这些代码片段就是代码段(code snippet)。code snippet技术的存在就是提高开发人员的生产力,并且这种技术在其他健全的IDE工具中也被广泛应用。
在VS中,微软已经提供了很多常用的code snippet供我们开发使用,并且允许开发者定义自己的代码段,下面我们开始制作自己的code snippet。
制作一个最简单的code snippet
第一步:创建一个后缀为.snippet扩展名的xml文件,文件名可以随意取,这里为mysnippet。
第二步:将下面的代码粘贴到xml文件中。
<?xml version="1.0" encoding="utf-8" ?> <CodeSnippets> <CodeSnippet Format="1.0.0"> <Header> <Title>MyClass</Title> <Shortcut>myc</Shortcut> <Description>Expansion snippet for class</Description> </Header> <Snippet> <Code Language="csharp" Format="CData"> <![CDATA[public class MyClass { public int Id {get;set;} }]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>
第三步:导入自己的代码段到vs中。(这里使用vs 2015,其他版本大致类似)。
VS规定,自定义的code snippet必须放到一个文件夹中管理(不能和系统自带的代码段放一起),所以我们在任意盘符下新建一个文件夹,存放自定义的代码段,并命名为MyCodeSnippets。
打开工具—>代码片段管理器—>语言选择 CSharp—>点击 添加 按钮,选择 MyCodeSnippets 文件夹。
建好文件夹后将自定义的代码段导入到该文件夹中。
打开工具—>代码片段管理器—>语言选择 CSharp—>点击 导入 按钮 ,选择刚才的mysnippet.snippet文件—>确定 保存。
第四步:验证我们的代码段。
.snippet xml 文件说明
我们已经制作了一个简单的code snippet,小小爽了一把。但是对xml文件中每个节点的作用并不是很清楚,所以接下来我们要弄懂xml结构,制作出更加强大的代码片段。
xml 文件中CodeSnippets 为根节点,接下来是 CodeSnippet子节点。我们的每一个代码片段是放到CodeSnippet节点中的,一个CodeSnippets 可以包含多个CodeSnippet,也就是可以包含多个代码片段。(你也可以使用CodeSnippet作为根节点,这样一个xml文件中只会有一个代码片段,但是笔者不建议这么做,因为这样会使我们的代码段存放散乱,不易管理和移动)
CodeSnippet 中有了2个重要的子节点 Header 和 Snippet。其中Header节点用来描述snippet的属性,Snippet 用于定义和存放代码片段。
Header 包括这些子节点:
<Header>子元素 | 说明 |
<Title> | 显示的标题 |
<Shortcut> | 代码快捷方式名称,输入快捷名称,按Tab 补全代码片段 |
<Description> | 代码片段的描述 |
<SnippetType> | 指定代码段所属的类别(Expansion:扩展,SurroundsWith:围绕,或重构)。 IDE根据这个值决定使用哪个显示代码段的上下文菜单 |
<Author> | 作者 |
Snippet 包括 Declarations 、Code 、Imports、References 子节点。其中Declarations 中常用的是Literal节点,在该节点中可以定义变量(占位符);Code 节点存放代码片段;Imports 定义代码段需要在文件引入的命名空间,类似using;References 定义引入的程序集,类似添加 Dll 的引用。
Literal 子元素 | 说明 |
<ID> | 变量名称,在Code节点使用,使用格式为 $ID$ |
<ToolTip> | 提示信息 |
<Default> | 变量默认值 |
特别说明:$end$ 和 $selected$ 属于保留占位符。$end$ 表示代码插入后光标处于该位置;$selected$ 表示选中的文本,常用于Expansion类型(如 try cache)。
Code 属性 | 说明 |
Language | 适用的语言类型(CSharp、javascript、html 等) |
Delimiter | 分割符 |
Kind | Snippet的类型(方法体、方法声明、类型声明等) |
特别说明:我们的代码片段应该放到<![CDATA[]]>中,这样在代码片段中就可以使用一些特殊符号了。
Imports 节点:
<Imports> <Import> <Namespace>System.Web.Mvc</Namespace> </Import> </Imports>
References 节点:
<References> <Reference> <Assembly>System.Web.Mvc.dll</Assembly> </Reference> </References>
制作一个复杂的code snippet
了解了CodeSnippet结构后,我们定义一个较为复杂的代码段,这个代码段的主要作用是在控制台项目中调用HttpUtility的UrlEncode方法对参数进行编码。xml文件内容如下:
<?xml version="1.0" encoding="utf-8" ?> <CodeSnippets> <CodeSnippet Format="1.0.0"> <Header> <Title>HttpUtility.UrlEncode</Title> <Shortcut>hencode</Shortcut> <Description>对内容使用HttpUtility类进行UrlEncode编码</Description> <Author>暗夜余晖</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> <SnippetType>SurroundsWith</SnippetType> </SnippetTypes> </Header> <Snippet> <Imports> <Import> <Namespace>System.Web</Namespace> </Import> </Imports> <References> <Reference> <Assembly>System.Web.dll</Assembly> </Reference> </References> <Declarations> <Literal default="true"> <ID>address</ID> <ToolTip>http地址</ToolTip> <Default>https://limitcode.com</Default> </Literal> </Declarations> <Code Language="csharp" Format="CData"> <![CDATA[HttpUtility.UrlEncode("$address$");$end$]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>
写在最后
如果你忘记了XML文件中的节点和属性,可以参考IDE自带的代码段。对于文件中的内容,笔者相信聪明的你一看便懂。
评论列表
评论内容: