【编程技巧】Code snippets(代码片段)在Visual Studio中的使用(附简单的Snippet管理工具)
引言
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管理工具)相关推荐
- VS Code设置代码片段(C++)
前言 VS Code设置代码片段,官网介绍 代码片段是模板,可以快速地输入重复的代码,比如循环.条件语句.注释模板等.在vs code中代码片段会和自动提示IntelliSense(Ctrl + Sp ...
- Android Studio使用小技巧:提取方法代码片段
今天,讲讲android studio使用的小技巧.把代码直接提取一个函数. 有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再放在一个单独的方法里,通常我们的做法是复制粘贴,现在 ...
- Android课程---Android Studio使用小技巧:提取方法代码片段
这篇文章主要介绍了Android Studio使用小技巧:提取方法代码片段,本文分享了一个快速复制粘贴方法代码片段的小技巧,并用GIF图演示,需要的朋友可以参考下 今天来给大家介绍一个非常有用的Stu ...
- qt creator插入代码块快速注释snippets代码片段的功能
定义 任何开发IDE中,一般都提供snippets代码片段的功能,就是为了方便快捷的插入格式一致的代码段或者注释段. 步骤 qt creator 添加头文件,源文件的注释功能. 在qt creator ...
- Visual Studio中使用Macros插件给代码添加注释、时间和以及自动脚本
title: Visual Studio中使用Macros插件给代码添加注释.时间和以及自动脚本 date: 2020-09-11 sidebarDepth: 2 tags: 代码 Visual st ...
- VS编程,几个好用的Visual Studio
使用VS开发过程中可以提高效率的一些插件, 部分插件的安装与使用需要和VS版本匹配. 具体可以在官方下载链接中看到自己使用的VS版本是否支持. 1.Indent Guides https://mark ...
- 如何在Visual Studio中直接使用示例代码浏览器搜索下载和管理代码示例
今天微软一站式示例代码库团队发布了示例代码浏览器的Visual Studio 扩展.有了它,开发人员就可以在Visual Studio 2010里直接通过Alt+F1快捷键搜索示例代码,并方便地对示例 ...
- 在 Visual Studio 中使用 Q# 进行量子编程
1 量子计算机与量子编程 1.1 量子计算机 Quantum computing is computing using quantum-mechanical phenomena, such as su ...
- 《WF编程》系列之3 - 漫游工作流:Visual Studio 2005 扩展
<WF编程>系列之3 - 漫游工作流:Visual Studio 2005 扩展 1.2.2 Visual Studio 2005 扩展 Microsoft提供了一个Visual Stud ...
最新文章
- 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...
- php查询数据存到下一界面_PHP从另一个页面获取数据
- 对比Excel,学习pandas数据透视表
- ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理
- 参数详解 复制进程_如何优化PostgreSQL逻辑复制
- 人脸识别中的阈值应该如何设置?
- 【备忘录】创建自己的消息映射
- php语法中变量如何定义和使用,PHP语法—PHP的变量
- 高中计算机整人代码完整,整人代码 VBS整人代码大全
- 单片微机计算机原理与接口技术高峰,单片微机原理与接口技术(第2版)
- linux下r语言画图,linux命令行下使用R语言绘图实例讲解
- python中import与input_Python import与from import使用及区别介绍
- 人工智能终将自我进化?排除无用功能,让自己更加完美?
- 9大开源云管理平台(CMP)
- LOJ10066 新的开始
- FastAPI 快速入门
- 什么是Vue生命周期函数,有哪些函数?各自在什么时候执行?
- 华为总裁任正非近期撰写一篇名为《一江春水向东流》(转)
- ORACLE语句基本优化
- 爬虫练习:爬取网易云音乐热歌榜全部歌曲的热门评论
热门文章
- warning MSB3061: 无法删除文件
- html cellpadding css,CSS中cellspacing和cellpadding属性用法
- 又一次站在人生的十字路口!
- 【python自动化办公实例】CAD中用pyautocad简化等高线
- python入门II--类型检查--类型转换--运算符
- TCP/IP——IGMP
- Jdbc连接Phoenix+Kerbores总结之PQS Thin Client方式(此篇亲测有效)
- SqlServer 内存篇(五)—— 常见内存错误与解决方法
- mybatis plus一对多查询(经典案例)
- 面试结束后应该做的5件事