夫天地者,万物之逆旅;光阴者,百代之过客。而浮生若梦,为欢几何?
高效开发你应该知道的Visual Studio 代码段功能

代码段简述

我们使用宇宙第一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分割符
KindSnippet的类型(方法体、方法声明、类型声明等)


特别说明:我们的代码片段应该放到<![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自带的代码段。对于文件中的内容,笔者相信聪明的你一看便懂。

作者:暗夜余晖

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

1

支持

0

反对

posted @2017-10-2  拜读(2303)

评论列表

评论内容:



喜欢请打赏

支付宝 微信

请放心支付