Code Snippets - 代码段 ,vs2005 引入的功能。作为程序员,也许你每天都在用,然而可能你并不知道这个功能就叫这个东西。今天,笔者就跟大家简单的聊一聊它,说说你们或熟悉或将要熟悉的那个它。
1. 熟悉的陌生人
情景一:
我想把一堆代码分割成一块一块的,方便整理整顿代码,就像这样:
也许你会很快给出答案:“ 谁不会呀,就是快捷键 Ctrl+k、Ctrl+s 然后选中
#region
呗!”但也许你并不知道,这么好用的功能,他就是 Code Snippets ,本文主角!
你写一些宏逻辑时用到的 #if 。同样是本文主角,就不多哔哔赖赖了。
情景二:
经常感慨大佬指点的神奇小技巧,几个字符就把程序写好了的那种:
- 写下 ctor 按2下 Tab 就能自动生成构造函数
- 写下 prop 按2下Tab就能自动生成属性
- ...
当然还有自己“潜移默化”就被IDE教会了的小技巧:
- 写 for 循环时,写完 for 一对 Tab 一敲便完成了for语法。
- 写 foreach 时,一对Tab,巴拉巴拉 ... ...
- 写出 try 时,一对Tab,巴拉巴拉 ... ...
- 写出 do 时,一对Tab,巴拉巴拉... ...
- 写出 switch 时,一对 Tab,就出现了 Switch case 的语法结构,更神奇的是当你往switch的括号里面输入一个枚举参数时,敲一个回车或一个 ↓ 下键 过去,哇喔,case 都帮你写好了喂。
其实呢,这些都是 Code Snippets 带来的便捷。
而且 Ctrl+K、Ctrl+S
还有个兄弟 : Ctrl + K 、Ctrl+X
,前者唤起 IDE 自带 Snippets 而后者则唤起用户自定义 Snippets ,看动图演示:
从以往的经验来看,我们大都是直接在代码上下文 key 几个关键字得到咱们想要的 snippet,就比如咱们写 for 语法时。
而且还可以在智能感知菜单中使用 Snippets 过滤条件,只显示 Snippets,演示如下:
笔者使用 Ctrl+J 唤起智能感知菜单,使用菜单右下角按钮筛选出所有 Snippets
所以
Ctrl + K 、Ctrl+X
没用过,也无需唏嘘,觉着IDE也没鼓励咱这么用~
2. 新的征途
现在,是不是能理解笔者为啥说这个功能是一个熟悉的“陌生人”了?
好的,接下来笔者给出2个典型,看看 code snippets 是如何方便了我们的开发。
示例一:
背景:
.Net4.x 新增的语法中,$
符号 代替 string.Format
带来的便利令人耳目一新,省去了容易出错的 {0}、{1} ...
占位符,同时也简化了相关API的调用。
在以前可能还会用上形如 UnityEngine.Debug.LogFormat()
的API: (笔者是Unity程序员)
而如今的他们,竟一不小心全部作古,有了
$
log 输出就变成下面这样子咯,变量想怎么在log中穿插就怎么穿插,爽的飞起!。而且,还可以把上下文的变量拿来做逻辑运算,只需要用小括号括起来即可。
痛点:
虽然有了 $
加持, 调试时输出 log 更顺手了,可是,每次想要输出一个log来,不管你输出的内容复杂与否,你都不可避免的写完下面这些东西:
Debug.Log($"{you field} ")
不难发现此时手指要敲一堆星罗棋布的标点符号:$
、()
、""
、;
、{}
,外加一个 Shift
!
可我要的只是一个 log 啊,这他喵的才几个字符,却让我的手指爬满了整个键盘,上上下下左左右右,这个痛点必须被解决。
于是他来了~
实现:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<Title>Debug.Log($"")(完全限定)</Title>
<Author>Bian Shanghai</Author>
<Description>UnityEngine.Debug.Log 的代码片段</Description>
<HelpUrl>
</HelpUrl>
<Shortcut>log</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal Editable="false">
<ID>UnityLog</ID>
<ToolTip>
</ToolTip>
<Default>
</Default>
<Function>SimpleTypeName(global::UnityEngine.Debug)</Function>
</Literal>
</Declarations>
<Code Language="csharp" Delimiter="$"><![CDATA[$UnityLog$.Log($$"{GetType()}: $end$");]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
VS下使用快捷键: Ctrl+K 、Ctrl+B 唤起
上面 xml 代码段保存图示路径所在文件夹,改后缀为 .snippet ,回到 vs 中就可以看效果咯:
有了这个 Snippets ,Debug时只需要无脑的敲出 log
即可 ,舒坦! 。
现在,我们只需聚焦到程序调试本身,而无需费神耗时爬满键盘打那些可恶的字符了,节省的这几秒长远来看省的不仅仅是大把时间,更是提高了解决问题时的专注度呢。
示例二:
背景:
现在写代码多关注版权或者说协同作业的责任分担,也为了表现的更专业,往往类型的上方都会写上注释,标明创建人、创建时间、类型的作用(等等):
实现:
可以使用修改脚本模板的方式(本文不做赘述)。
更可以使用本文主角 snippet 实现:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<Keywords />
<Title>doc the class </Title>
<Author>BianShanghai</Author>
<Description>用于对 类型 署名的代码片段</Description>
<HelpUrl>
</HelpUrl>
<Shortcut>docc</Shortcut>
</Header>
<Snippet>
<References />
<Imports />
<Declarations>
<Literal Editable="true">
<ID>Description</ID>
<ToolTip>类型描述</ToolTip>
<Default>描述构建此类型的意图</Default>
<Function>
</Function>
</Literal>
<Literal Editable="true">
<ID>Author</ID>
<ToolTip>作者</ToolTip>
<Default>BianShanghai</Default>
<Function>
</Function>
</Literal>
<Literal Editable="true">
<ID>Date</ID>
<ToolTip>中文输入法快捷键: SJ可输入今天日期</ToolTip>
<Default>录入当前日期</Default>
<Function>
</Function>
</Literal>
</Declarations>
<Code Language="csharp" Kind="type decl" Delimiter="$"><![CDATA[/*
*Author: $Author$
*Date: $Date$
*Porpurs:$Description$
*/]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
使用方法跟第一个示例一样,下面看下效果就行:
可以看到
- 只需要输入 docc (doc + class 的简称)就能很快的出来这个类的描述模板。
- 每一个需要用户输入的地方都可以设置 tips 做友情提示
- 可以使用 Tab 键在这几个需要自定义内容的地方导航。
3. 结语:
通过本文,童靴们现在应该对这个 snippet 有了更深刻的了解了,虽然本文只是泛泛而谈,没有教程那种过于精细的细节指导,但是笔者认为篇幅限制之下,科普的目的应该已是达到了罢~
觉得示例可能对你有帮助,鼓励动手试试,想要进一步了解一下的,可以看看扩展阅读。
4. 扩展阅读:
- Function Element (IntelliSense Code Snippets) | Microsoft Docs - 官方手册
- VS2010中CodeSnippet【代码段】应用与创建 - Soar、毅 - 博客园
- VS中如何快捷地给自己的代码添加创建信息注释 - WeihanLi - 博客园
- 也许你需要:c# - Insert current datetime in Visual Studio Snippet - Stack Overflow
- Snippet Designer - Visual Studio Marketplace - 选中代码右键可存为模板
- Snippet Editor - CodePlex Archive - 图形化编辑器
5. 番外:
我用的VS 2019 居然对格式说明符有了Tips,好像更方便了耶!鼓励尝试VS新版本。
网友评论