如何在vim中使用C#代码语句进行排序?

5

最近我在vim中编辑C#代码。并且构建系统启用了StyleCop,所以所有using语句都应该按字母顺序排列。

因此,我尝试在可视模式下选择以下代码行,然后键入“:sort”。

using System.Security.Permissions;
using System.Runtime.Serialization;
using System.Security;
using System.ServiceModel;

结果为:

using System.Runtime.Serialization;
using System.Security.Permissions;
using System.Security;
using System.ServiceModel;

它无法通过StyleCop检查,因为"System.Security"不在"System.Security.Permissions"之前。分号";"的ASCII值大于点"."的ASCII值。

首选结果是:

using System.Runtime.Serialization;
using System.Security;
using System.Security.Permissions;
using System.ServiceModel;

如何实现它?
4个回答

7

:h :sort 是你的好帮手:

:[range]sort r /[^;]*/

如果你想在过程中删除重复内容,可以添加 unique 标记:

:[range]sort ur /[^;]*/

如果你在“;”后面有不同的注释,这样做就没有任何好处了。


谢谢。为了使它更好,我们可以使用以下命令删除重复的引用语句::[range]sort ur /[^;]*/ - Morgan Cheng

1
:1,4s/;$//
:sort
:1,4s/$/;/

(其中1、4行是使用语句)


这是一个解决方案,尽管需要大量的打字 :) - Morgan Cheng
1
试一下这个(选择你的using语句然后按F5键)::map <F5> :s/;/ /g<cr>gv:sort<cr>gv:s/ /;/g<cr> - Habi

0
在我的Linux机器上,使用除C以外的本地语言(已测试过fr_FR、fr_FR.UTF-8、en_US、en_GB),sort命令会按照你的期望进行排序。你可以很好地将其管道传输到sort命令中:
:1,4!sort

如果你使用的是Windows系统,我想你可以安装类Unix工具(如SFU),这些工具可以完成这项任务,因为vim的排序命令似乎无法处理语言环境。


0

不使用CodeRush或ReSharper就是在从你的雇主那里偷取资源

<为避免被踩>

(是的,我知道这需要VS(据我所知,VS10已经默认安装了这个插件))


@Konamiman:不,但如果出于某种原因我必须使用vim,我会切换到VS来获得它们中的任何一个。 - Ruben Bartelink
有很多微软员工像我一样使用VIM而不是VS。 - Morgan Cheng
@Morgan:我知道 - 只是在开玩笑。 (尽管我很难想象自己在一个平行宇宙中,用一种语言编码,这种语言为您使用重构工具而抓住脚踝,然后故意忽略它。)是的,我明白VS很难被描述为可编写脚本的编辑器。也许阅读《代码整洁之道》、《应用程序模式》、《重构》并使用xunit.net和CR已经扭曲了我的世界观:P - Ruben Bartelink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接