我知道 VS 代码折叠问题是一个老问题,但我在浏览过的所有其他讨论中都找不到这个问题:
我们有一个 C# 团队,有些人喜欢他们,有些人讨厌他们,而且我们似乎没有太多的中间立场可以合作。
是否有 VS 的插件或加载项只会“隐藏”这些区域?这样那些想要它们的人就会正常地看到它们,但是安装插件并查看 .cs 文件的人不存在这些区域,就好像它们不存在一样。
我可以看到在移动代码时这可能是一个问题,它可能会导致某些方法在错误区域之内或之外的问题,但这可能是团队满意的权衡......
我知道 VS 代码折叠问题是一个老问题,但我在浏览过的所有其他讨论中都找不到这个问题:
我们有一个 C# 团队,有些人喜欢他们,有些人讨厌他们,而且我们似乎没有太多的中间立场可以合作。
是否有 VS 的插件或加载项只会“隐藏”这些区域?这样那些想要它们的人就会正常地看到它们,但是安装插件并查看 .cs 文件的人不存在这些区域,就好像它们不存在一样。
我可以看到在移动代码时这可能是一个问题,它可能会导致某些方法在错误区域之内或之外的问题,但这可能是团队满意的权衡......
我讨厌区域(我的团队喜欢它们)并且惊讶地发现没有人编写扩展来使它们变得更好。我终于自己写了一篇名为I Hate #Regions 的文章:
让#regions 吸得更少(免费):
http://visualstudiogallery.msdn.microsoft.com/0ca60d35-1e02-43b7-bf59-ac7deb9afbca
有快捷键可以处理它们:
Ctrl+M、Ctrl+M 折叠或展开您当前所在的块。 Ctrl+M, Ctrl+O 折叠文件中的所有块 Ctrl+M, Ctrl+L 展开文件中的所有块 Ctrl+M, Ctrl+P 停止大纲模式。(Ctrl+M,Ctrl+O 恢复)
查看代码折叠问题
就个人而言,我编写了一个 VS 宏(工具 > 宏)来扩展文件打开时的所有区域。
老实说,我不知道有这样的插件。但是,使用VSTO,自己编写一个非常容易。
这有点……低俗,并且可能有副作用,但是:
Tools-->Options-->Environment-->Fonts and Colors-->Preprocessor Keyword 将前景色和背景色更改为白色(或任何您的默认背景)。
不过,您不会看到其他预处理器关键字。
对于 VS 2008 用户,您可以停止大纲并以编程方式重新启动它(通过宏)。我在http://weblogs.asp.net/rweigelt/archive/2003/07/06/9741.aspx找到了这段代码
Imports EnvDTE
' Expands all regions in the current document
Sub ExpandAllRegions()
DTE.ExecuteCommand("Edit.StopOutlining")
DTE.ExecuteCommand("Edit.StartAutomaticOutlining")
End Sub
以上适用于 C# IDE;出于某种原因,VB 的 IDE 在明确告知时不会删除带有区域的轮廓。希望这可以帮助!
-- 附加编辑:
这是在 Visual Studio 2008 中适用于 Visual Basic .NET 的一个。这有点暴力,但想法是注释所有#region 标记,扩展轮廓。下一步取消它们的注释,将它们返回到它们的原始状态(严格来说不是真的......可能在代码的其他部分有恶意使用#region)。此代码也不会将“查找和替换”对话框返回到其原始状态。有了这些警告,这是将执行此杂务的宏模块:
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module MacroMod01
Sub ExpandAllRegions()
' comment out all #region occurances
DTE.ExecuteCommand("Edit.Replace")
DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
DTE.Find.FindWhat = "#region"
DTE.Find.ReplaceWith = "'#region"
DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
DTE.Find.MatchCase = False
DTE.Find.MatchWholeWord = False
DTE.Find.MatchInHiddenText = True
DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone
DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
DTE.Find.Execute()
' uncomment all #region occurances
DTE.ExecuteCommand("Edit.Replace")
DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
DTE.Find.FindWhat = "'#region"
DTE.Find.ReplaceWith = "#region"
DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
DTE.Find.MatchCase = False
DTE.Find.MatchWholeWord = False
DTE.Find.MatchInHiddenText = True
DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone
DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
DTE.Find.Execute()
'close the find 'n replace dialog
DTE.Windows.Item("{CF2DDC32-8CAD-11D2-9302-005345000000}").Close()
End Sub
End Module
对于 VS2008 中的 VB,可能还有其他一些方法可以完成此操作。我会在找到它们时发布。
我认为任何讨厌地区的人都很有趣。我非常喜欢 Regions,我编写了一个名为 Regionizer 的程序,这是一个位于http://regionizer.codeplex.com的开源项目
我有老板和一些讨厌他们的团队成员,但我的工具按字母顺序组织所有代码,因此方法在方法区域中按字母顺序排序,属性在属性区域中排序,事件在事件区域中排序。
尝试在没有此工具(或区域)的情况下查找代码就是我所说的意大利面条代码)。
我一直在寻找一种简单的方法来折叠和展开所有区域,并且 MS 告诉我这些区域是 .suo 文件的一部分(与项目或解决方案同名)并且没有一种简单的方法来处理在区域上反对他们自己。
我已经搜索了整个 DTE,但我还没有找到折叠所有区域或展开所有区域的方法,我将尝试使用宏代码,看看它是否有效。
将很快发布更新。