引言

Code snippet (代码片段)在VS中指的是基于IDE支持的利用快捷方式快速输入一小段,或者称之为一整块代码的功能,在日常编程,特别是在工作中写内容相似的业务代码时,利用Snippet功能,可以极大加快编程效率,我们先来看一个故事:

小张是一个IMIS软件的程序员,每天的工作内容就是处理各种数据表,他最近在写代码的时候,发现经常有客户需要在一个Remark字段中储存一串多行的字符串,用其中的每一行的冒号之后的内容代表一个自定义的字段,比如,在这串字符串中得到姓名字段:

职业:程序员

姓名:张三

性别:男

为此,他经常需要在不同的客户的程序中写同一个方法:

        /// <summary>/// 得到字符串特定行的第一个冒号(若有)之后的内容/// </summary>/// <param name="strSource">源字符串</param>/// <param name="intRow">指定的行数</param>/// <returns></returns>public static string GetSpecificRow(string strSource, int intRow){string strResult = "";//用回车分割字符串string[] strFields = strSource.Split('\n');//只有目标行数不大于当前字符串行数且大于0才需要操作if (intRow >= 1 && strFields.Length >= intRow){//用冒号拆分这一行的内容为两部分string[] strRow = strFields[intRow - 1].Split(new char[] { ':' }, 2);//若数组长度为1,证明没有冒号,直接返回这一行的内容,否则返回冒号之后的内容strResult = strRow.Length == 1 ? strRow[0] : strRow[1].TrimEnd();}return strResult;}

因为写的次数确实也有好几次了,小张觉得每次遇到都写一次这个方法,实在是太蠢了,虽然其实很多时候可以去找到上次写过的,然后Copy过来,但是还是有点蠢,因为每次都不得不去回忆在哪里用到过,然后找到对应的代码文件。

他转念一想,可以放在公司的公用代码库(Code Library)里作为一个公用方法,就可以直接调用啦,可不成想,这个做法却遭到了一个老同事的反对,同事这样说:“不要整天你觉得有一个方法很常用就往库里面加,谁知道你写的方法可不可靠,而且谁都像你这样动不动就往里面加东西的话,以后里面方法一大堆,谁找得到。”

好吧,觉得有点道理,又觉得没什么道理,不过确实也是这样,有时候你觉得好的东西,别人不一定觉得好,你觉得值得分享的东西,别人可能觉得没价值。既然如此,只能再想想办法啦。

忽然,小张想到,平时在写for循环和定义属性的时候,经常会这样做:

在代码中输入for,IDE会提示有可用的代码片段,双击Tab键就会出现属于for循环的内置代码片段:

            for (int i = 0; i < length; i++){}

此时,光标会定位在"i"处,然后可以把"i"改成自己想要的局部变量名,再按Tab键,可以看到后面的两个"i"都会随之改变,之后光标会定位在"length"处,把"length"改成自己想要的数,按Enter键,可以看到光标定位在了for循环体中,可以开始写循环体中的代码了

如此方便的功能,能否自己DIY,创建一些属于自己的代码片段呢,小张搜索了MSDN文档相关内容,发现结论是肯定的,甚至可以说这个功能就是为DIY而生的,他总结了一些有价值的信息

代码片段的存放位置及其内容

打开Visual Studio → 工具 → 代码片段管理器 → 选择编程语言

可以看到出现了一些文件夹供选择,我们可以在这里找到刚刚出现的那个for循环的代码片段:

根据图示文件夹,找到for.snippet文件,双击打开(会默认自动用VS打开,没有的话可以用其它任意的文本编辑器打开),可以看到是一个XML结构的文本,也就是说,snippet实际上是以XML文件来储存的,那么现在问题就简单了,为了快速说明这个文件,我们为其添加一些注释

可以看到,一个Snippet文件大致分为两个部分:

<Header></Header>标签之间的一些关于属性的定义

Title 标题
Shortcut 在IDE中以何快捷键触发
Description Snippet内容描述
Author 作者
SnippetType Snippet种类,是否允许插入在光标处,是否允许围绕在选中代码两边(选中一段代码,按Ctrl+K,Ctrl+X,然后选中支持此属性的Snippet,就能把这段代码放在选中代码的两边)等

<Snippet></Snippet>标签之间的一些关于代码片段内容的定义

Declarations Literal ID 需要被替换的字符串,如index,代表自定义代码块中的$index$需要被替换(以内置for循环的代码片段举例)
Default 代码片段出现后这个字符串的默认值,比如i,用来替换$index$(以内置for循环的代码片段举例)
ToolTip 注释,用于提示这个字符串代表什么
Code Language 语言种类,如csharp,VB等
<![CDATA]]>

代码块正文,其中要被替换的关键字符串需要用两个$(可以自定义,默认为$)包裹,其中$selected$ 和$end$为保留关键字,分别代表允许围绕的代码片段的选中代码部分,以及代码片段各部分调整完毕按回车之后,光标的停留位置

如何自定义并使用自己的代码片段

打开Visual Studio → 工具 → 代码片段管理器 → 选择编程语言

可以看到VS为我们内置了一个代码片段文件夹,叫做My Code Snippets,我们只要自己创建一个snippet文件(复制内置的过来调整即可),然后在里面写上自己想要的内容,放进这个文件夹就行啦,比如前言中小张的需求,我们为他编写了一个snippet

因为他的需求比较简单,只是想要快速输入方法,所以内容主要是方法体本身,没有$包含的字符串,我们把这个文件存进刚刚说的My Code Snippets文件夹,可以看到,不需要重启VS,打开代码片段管理器,这里已经出现了我们自定义的代码片段

试着使用看看,在IDE中输入快捷方式"gsr",可以看到一整个方法体直接出现了,小张终于可以解放双手了,他接下来有了新的想法,把Snippet分类,做一个属于自己的代码片段库,里面包含各种自己常用的代码片段,这样不但可以方便查找常用的方法,不用去仔细回忆,寻找各种文件,还能作为自己的一个知识储备库,想到这里,他笑开了花

后记:

合理使用代码片段确实能给我们的编程提高不少效率,但是编写代码片段本身也是一个有点消耗时间的过程,笔者为了进一步解放双手,用Winform开发了一个简单的小工具用于快速编写和储存Snippet,大家可以随意取用,代码在

GitHub - KamenRiderKuuga/SnippetManager: A Winform Tools for manage snippets in Visual Studio

晚安啦各位!

【编程技巧】Code snippets(代码片段)在Visual Studio中的使用(附简单的Snippet管理工具)相关推荐

  1. VS Code设置代码片段(C++)

    前言 VS Code设置代码片段,官网介绍 代码片段是模板,可以快速地输入重复的代码,比如循环.条件语句.注释模板等.在vs code中代码片段会和自动提示IntelliSense(Ctrl + Sp ...

  2. Android Studio使用小技巧:提取方法代码片段

    今天,讲讲android studio使用的小技巧.把代码直接提取一个函数. 有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再放在一个单独的方法里,通常我们的做法是复制粘贴,现在 ...

  3. Android课程---Android Studio使用小技巧:提取方法代码片段

    这篇文章主要介绍了Android Studio使用小技巧:提取方法代码片段,本文分享了一个快速复制粘贴方法代码片段的小技巧,并用GIF图演示,需要的朋友可以参考下 今天来给大家介绍一个非常有用的Stu ...

  4. qt creator插入代码块快速注释snippets代码片段的功能

    定义 任何开发IDE中,一般都提供snippets代码片段的功能,就是为了方便快捷的插入格式一致的代码段或者注释段. 步骤 qt creator 添加头文件,源文件的注释功能. 在qt creator ...

  5. Visual Studio中使用Macros插件给代码添加注释、时间和以及自动脚本

    title: Visual Studio中使用Macros插件给代码添加注释.时间和以及自动脚本 date: 2020-09-11 sidebarDepth: 2 tags: 代码 Visual st ...

  6. VS编程,几个好用的Visual Studio

    使用VS开发过程中可以提高效率的一些插件, 部分插件的安装与使用需要和VS版本匹配. 具体可以在官方下载链接中看到自己使用的VS版本是否支持. 1.Indent Guides https://mark ...

  7. 如何在Visual Studio中直接使用示例代码浏览器搜索下载和管理代码示例

    今天微软一站式示例代码库团队发布了示例代码浏览器的Visual Studio 扩展.有了它,开发人员就可以在Visual Studio 2010里直接通过Alt+F1快捷键搜索示例代码,并方便地对示例 ...

  8. 在 Visual Studio 中使用 Q# 进行量子编程

    1 量子计算机与量子编程 1.1 量子计算机 Quantum computing is computing using quantum-mechanical phenomena, such as su ...

  9. 《WF编程》系列之3 - 漫游工作流:Visual Studio 2005 扩展

    <WF编程>系列之3 - 漫游工作流:Visual Studio 2005 扩展 1.2.2 Visual Studio 2005 扩展 Microsoft提供了一个Visual Stud ...

最新文章

  1. 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...
  2. php查询数据存到下一界面_PHP从另一个页面获取数据
  3. 对比Excel,学习pandas数据透视表
  4. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理
  5. 参数详解 复制进程_如何优化PostgreSQL逻辑复制
  6. 人脸识别中的阈值应该如何设置?
  7. 【备忘录】创建自己的消息映射
  8. php语法中变量如何定义和使用,PHP语法—PHP的变量
  9. 高中计算机整人代码完整,整人代码 VBS整人代码大全
  10. 单片微机计算机原理与接口技术高峰,单片微机原理与接口技术(第2版)
  11. linux下r语言画图,linux命令行下使用R语言绘图实例讲解
  12. python中import与input_Python import与from import使用及区别介绍
  13. 人工智能终将自我进化?排除无用功能,让自己更加完美?
  14. 9大开源云管理平台(CMP)
  15. LOJ10066 新的开始
  16. FastAPI 快速入门
  17. 什么是Vue生命周期函数,有哪些函数?各自在什么时候执行?
  18. 华为总裁任正非近期撰写一篇名为《一江春水向东流》(转)
  19. ORACLE语句基本优化
  20. 爬虫练习:爬取网易云音乐热歌榜全部歌曲的热门评论

热门文章

  1. warning MSB3061: 无法删除文件
  2. html cellpadding css,CSS中cellspacing和cellpadding属性用法
  3. 又一次站在人生的十字路口!
  4. 【python自动化办公实例】CAD中用pyautocad简化等高线
  5. python入门II--类型检查--类型转换--运算符
  6. TCP/IP——IGMP
  7. Jdbc连接Phoenix+Kerbores总结之PQS Thin Client方式(此篇亲测有效)
  8. SqlServer 内存篇(五)—— 常见内存错误与解决方法
  9. mybatis plus一对多查询(经典案例)
  10. 面试结束后应该做的5件事