同志们,问题如下:我习惯于在我的项目中排序using并且(不仅是)按字符串的长度排序。也就是说,这种代码:
using System.Collections.Generic;
using System;
using System.Linq;
using System.IO;
我一定会改成:
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
只有这样我才能冷静下来)
所以。我有点厌倦了手动执行此操作,所以我想问:是否有任何轻量级扩展(我怀疑ReSharper它可以,但我不考虑它)Visual Studio 2017可以按长度对所选行进行排序?
实际上,没有人回答我,但我自己没有找到合适的扩展名。但是谁阻止我自己写呢?这就是我所做的。该扩展程序现在挂在Marketplace中,即此处。
当然,我并没有开始强烈地将这一切正式化,因为我这样做只是为了我自己,但你永远不知道这样的小事会派上用场,并不是每个人都想安装令人印象深刻的扩展。
好吧,让我们同时考虑一个为手头的任务创建这样一个简单扩展的示例。
0) 首先,我们创建一个 VSIX 项目(Visual Studio 扩展可以用 Visual C++、Visual Basic、C# 编写。我用 C# 编写了这个案例)。如果此类项目的模板不在可用模板列表中,请使用 Visual Studio 安装程序安装相应的项目。
1) 向项目中添加一个元素
Custom Command并将其命名为“ CommandSort ”。在出现的类“ CommandSort.cs ”中添加以下代码:
我们团队在项目中的初始化程序、ID 和 GUID 将由 VS 自动设置。其实我们只需要改变方法即可
Execute。2) 为了更方便地使用选定的文本,让我们创建“ TextSelection ”类并将以下代码添加到“ TextSelection.cs ”:
我认为代码的逻辑非常清楚。但是,我将重点介绍用新集合 (
ReplaceSelection) 替换所选文本的方法。最初的代码如下所示:一切似乎都很合乎逻辑:只需将所选文本替换为新文本即可。在许多手册中,我只是看到了这种方法。但是,我警告不要使用这种处理选定文本的方法,因为它的工作速度非常慢。设置后,由于某种原因,该属性
EnvDTE.TextSelection.Text会解析整个插入的文本,将其分解为语义单元。让我解释一下:例如,我们有 2 个这样using的 'a 需要排序:对于我们的算法,重要的是这些是2行。但是,指定的属性将整个事物分解为一个语义集:
而且我们不再有2行,而是11 个单独处理的元素。随着要排序的字符串数量的增加,处理的语义单元的数量急剧增加,因此使用这种方法的简单操作开始花费大量时间。
这就是为什么我使用了一个小技巧:
老实说,我不知道这个解决方案有多好,但它肯定比标准方式快。如果有更正确实施的想法 - 我会很高兴听到!
3)好吧。实际上,通过代码理解。它仍然清理配置(
CommandSortPackage.vsct):因此,我们添加了一个带有指定文本的按钮,并在 VS上下文菜单中引用我们的操作,并将热键与之关联: ( Ctrl+ E) + ( Ctrl+ L)
4) 就是这样,我们的简单扩展已经准备就绪。您可以使用 VS 的实验版本对其进行调试,或者直接构建它,之后在许多软件包中您会发现令人垂涎的带有 *.vsix 扩展名的文件,您可以使用它立即在您的工作室中安装该扩展,或者甚至发布它)
关于这一点 - 仅此而已)感谢您的关注)