当前位置: 首页 > news >正文

如何快速创建 Visual Studio 代码片段?

使用 Visual Studio 的代码片段功能,我们可以快速根据已有模板创建出大量常用的代码出来。ReSharper 已经自带了一份非常好用的代码片段工具,不过使用 ReSharper 创建出来的代码片段只能用在 ReSharper 插件中。如果团队当中有一些小伙伴没有 ReSharper(毕竟很贵),那么也可以使用到 Visual Studio 原生的代码片段。

Visual Studio 的官方文档有演示如何创建 Visual Studio 的代码片段,不过上手成本真的很高。本文介绍如何快速创建 Visual Studio 代码片段,并不需要那么麻烦。


本文内容

    • Visual Studio 的代码片段管理器
    • Snippet Designer 插件
    • 创建代码片段
      • 编写一段代码
      • 插入占位符
      • 设置文本占位符
      • 设置类型占位符
      • 转义 `$` 符号
      • 保存代码片段
    • 导入代码片段
      • 使用代码片段
    • 管理代码片段
    • 推荐 C# 代码片段

Visual Studio 的代码片段管理器

Visual Studio 中代码片段管理器的入口在“工具”中。你可以参照下图找到代码片段管理器的入口。

代码片段管理器入口

在打开代码片段管理器之后,你可以选择自己熟悉的语言。里面会列出当前语言中可以插入的各种代码片段的源。

不过,Visual Studio 并没有提供创建代码片段的方法。在这个管理器里面,你只能导入已经存在的代码片段,并不能直接进行编辑。

官方文档提供了创建代码片段的方法,就在这里:

  • Code snippets - Visual Studio - Microsoft Docs

你只需要看一看就知道这其实是非常繁琐的创建方式,你几乎在手工编写本来是给机器阅读的代码。

我们创建代码片段其实只是关注代码片段本身,那么有什么更快速的方法呢?

方法是安装插件。

Snippet Designer 插件

请去 Visual Studio 的扩展管理器中安装插件,或者去 Visual Studio 的插件市场中下载安装插件:

  • Snippet Designer - Visual Studio Marketplace

在扩展管理器中安装插件

在安装完插件之后(需要重新启动 Visual Studio 以完成安装),你就可以直接在 Visual Studio 中创建和编辑代码片段了。

创建代码片段

你需要去 Visual Studio 的“文件”->“新建”->“新建文件”中打开的模板选择列表中选择“Code Snippet”。

新建代码片段文件

下面,我演示创建一个 Debug.WriteLine 代码片段的创建方法。

编写一段代码

我将一段最简单的代码编写到了代码编辑窗格中:

Debug.WriteLine("[section] text");

插入占位符

实际上,这段代码中的 sectiontext 应该是占位符。那么如何插入占位符呢?

选中需要成为占位符的文本,在这里是 section ,然后鼠标右键,选择“Make Replacement”。

插入占位符

这样,在下方的列表中就会出现一个新的占位符。

列表中出现占位符

设置文本占位符

现在我们设置这个占位符的更多细节。比如在下图中,我设置了工具提示(即我们使用此代码片段的时候 Visual Studio 如何提示我们编写这个代码片段),设置了默认值(即没有写时应该是什么值)。设置了这只是一个文本文字,没有其他特别含义。设置这是可以编辑的。

设置更多信息

用通常的方法,设置 text 也是一个占位符。

设置类型占位符

如果我们只是这样创建一个代码片段,而目标代码可能没有引用 System.Diagnostics 命名空间,那么插入完之后手动引用这个命名空间体验可不好。那么如何让 Debug 类可以带命名空间地插入呢?

我们需要将 Debug 也设置成占位符。

将 Debug 也设置成占位符

但是这是可以自动生成的占位符,不需要用户输入,于是我们将其设置为不可编辑。同时,在“Function”一栏填写这是一个类型名称:

SimpleTypeName(global::System.Diagnostics.Debug)

设置 Debug 占位符

转义 $ 符号

实际上用于调试的话,代码越简单功能越全越好。于是我希望 Debug.WriteLine 上能够有一个字符串内插符号 $

那么问题来了,$ 符号是表示代码片段中占位符的符号,那么如何输入呢?

方法是——写两遍 $。于是我们的代码片段现在是这样的:

Debug.WriteLine($$"[$section$] $text$");

保存代码片段

你可以随时按下 Ctrl+S 保存这个新建的代码片段。插件一个很棒的设计是,默认所在的文件夹就是 Visual Studio 中用来存放代码片段的文件夹。于是,你刚刚保存完就可以立刻在 Visual Studio 中看到效果了。

保存代码片段

导入代码片段

如果你将代码片段保存在插件给你的默认的位置,那么你根本不需要导入任何代码片段。但如果你曾经导出过代码片段或者保存在了其他的地方,那么就需要在代码片段管理器中导入这些代码片段文件了。

使用代码片段

如果你前面使用了默认的保存路径,那么现在直接就可以开始使用了。

使用我们在 Shortcut 中设置的字母组合可以插入代码片段:

插入代码片段

在插入完成之后,我们注意到此类型可以使用导入的命名空间前缀 System.Diagnostics。如果没有导入此命名空间前缀,代码片段会自动加入。

按下 Tab 键可以在多个占位符之间跳转,而使用回车键可以确认这个代码片段。

插入后编辑的代码片段

管理代码片段

在 Visual Studio 视图菜单的其他窗口中,可以找到“Snippet Explorer”,打开它可以管理已有的代码片段,包括 Visual Studio 中内置的那些片段。

代码片段管理器

推荐 C# 代码片段

推荐另一款插件 Snippetica:

  • Snippetica - Visual Studio Marketplace
  • Snippetica for C# - Visual Studio Marketplace

前者适用于 Visual Studio,后者适用于 Visual Studio Code。

它自带了很多的 C# 代码片段,可以很大程度补充 Visual Studio 原生代码片段存在感低的问题。


参考资料

  • Code snippets - Visual Studio - Microsoft Docs
  • Walkthrough: Create a code snippet - Visual Studio | Microsoft Docs
  • Snippet Designer - Visual Studio Marketplace
  • mmanela/SnippetDesigner: The Snippet Designer is a plugin which enhances the Visual Studio IDE to allow a richer and more productive code snippet experience.

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 从 git 的历史记录中彻底删除文件或文件夹
  • 如果不用 ReSharper,那么 Visual Studio 2019 能还原 ReSharper 多少功能呢?
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • 如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI
  • 如何追踪 WPF 程序中当前获得键盘焦点的元素并显示出来
  • 使用 Visual Studio 编译时,让错误一开始发生时就停止编译(以便及早排查编译错误节省时间)
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • 在项目文件 / MSBuild / NuGet 包中编写扩展编译的时候,正确使用 props 文件和 targets 文件
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • 如何给 Windows Terminal 增加一个新的终端(以 Bash 为例)
  • 在 Visual Studio 中设置当发生某个特定异常或所有异常时中断
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • 如何在 Windows 10 中安装 WSL2 的 Linux 子系统
  • 如何安装和准备 Visual Studio 扩展/插件开发环境
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 2017年终总结、随想
  • CSS 提示工具(Tooltip)
  • Laravel核心解读--Facades
  • Nacos系列:Nacos的Java SDK使用
  • Shell编程
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SpriteKit 技巧之添加背景图片
  • SQLServer之创建显式事务
  • webpack入门学习手记(二)
  • XML已死 ?
  • 猴子数据域名防封接口降低小说被封的风险
  • 回流、重绘及其优化
  • 理解在java “”i=i++;”所发生的事情
  • 前端js -- this指向总结。
  • 深入浏览器事件循环的本质
  • 我建了一个叫Hello World的项目
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​力扣解法汇总946-验证栈序列
  • ​学习一下,什么是预包装食品?​
  • #大学#套接字
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Python) SOAP Web Service (HTTP POST)
  • (七)c52学习之旅-中断
  • (图)IntelliTrace Tools 跟踪云端程序
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)linux下的时间函数使用
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET框架
  • .NET是什么
  • .Net中的集合
  • /var/lib/dpkg/lock 锁定问题
  • /var/spool/postfix/maildrop 下有大量文件
  • @WebService和@WebMethod注解的用法
  • [ SNOI 2013 ] Quare
  • [30期] 我的学习方法
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗