8

几天前我问了这个问题,但没有得到答案,所以我会再次尝试精确一点。

我喜欢通过折叠我目前不使用的方法、注释和 xml 摘要来保留我的代码。但是,每次我在方法、循环、switch 语句或代码的任何部分(任何包含{}大括号的内容)中编辑一些大括号时,下面的所有内容都会在 1 秒后展开。一切都一直展开,直到当前文件(或区域,如果已编辑的代码位于其中)的末尾。

我再也受不了了,我厌倦了一直使用++ Ctrl,然后再次重新查找已编辑的字段。VS2010有什么选项或扩展可以解决我的问题吗?MO

更新 我开始意识到没有办法解决这个问题。但是,我也可以接受修改后问题的答案:有没有一种方法或工具可以让我自动删除仅包含一条指令{}括号对?对于我的问题,这将是一个可以接受的解决方法。

4

5 回答 5

4

如果我了解您的需求,那么您要问的是,how to stop the code below the line that I am editing from automatically expanding.我想告诉您,官方来源或任何东西都没有解决方案。代码折叠了 Visual Studio 等理想代码编辑器的功能。

让我解释一下为什么会发生这种情况以及如何防止它。首先让我解释一下代码崩溃工作的基本条件。理想的代码编辑器使用 Lexers 和 Parsers 来支持语言,解析器使用正则表达式来匹配特定语言由 Coder 或某人输入的语法,在此序列代码编辑器中存储特定符号(如;, { and }, ".

为了使代码折叠有效地工作,必须在正在编辑的代码中以确切的顺序指定相等数量的这些符号,只要源代码中的某些内容与特定于语言的语法不匹配,解析器标志就会报告编辑和格式这个错误的引擎。

回到你的问题,让我们谈谈你面临的问题,为了更好地理解它,让我们考虑一个简单的代码块;

到目前为止,代码折叠完美无缺

并考虑下面还有更多的功能AddNumbers也被折叠了。现在如果我理解你,那么你说如果I editMultiplyNumbers and remove its starting curly brace{`,这点下面的所有代码都会自动展开。

错位的起始花括号

如果是这种情况,那么问题是因为解析器试图匹配语言语法并在终止花括号中找到该点以下的任何终止花AddNumbers's括号。

更新 :

总而言之,这个问题没有解决方案,这是因为 Visual Studio 执行实时解析,这就是它实时向您显示错误的方式。实际上这不是问题,这就是为什么从未报告过,因为有官方来源没有任何信息。但是,您可以通过稍微改变编码习惯来防止这种情况发生,例如在创建函数时假设 SomeFunction(int a,int b),尝试首先完成函数的外侧,如下所示;

private void SomeFunction(int a,int b)
{
//Write code later.
}

首先像上面一样创建函数大纲,然后在其中编写一些代码,如下所示;

private void SomeFunction(int a,int b)
{
int z=a+b;
Console.WriteLine(z);

int x=a*b;
Console.WriteLine(x);

int p=a/b;
Console.WriteLine(p);

int q=a-b;
Console.WriteLine(q);
}

接下来考虑你正在写一个if statement,首先像这样完成外侧;

if(//We'll define condition later)
{
//Write function body later.
}

如果您在 Visual Studio 中使用过代码片段,那么您可能已经注意到 Visual Studio 首先生成片段的外侧,然后将插入符号放置到第一个参数。

所以,这些是一些指导方针,可以防止这个问题。

现在走向解决方案,to prevent this situation when you create a function try to first place its { and } braces before writing any code in it.

希望这可以防止您面临的问题。如果您还有其他问题,请告诉我。

于 2013-09-01T10:54:46.620 回答
1

我正在将自己折叠用于包含本地化文本的静态类,并且能够hide/show事物非常好,类似于TreeView节点的方式:

静态字符串

而且我从未遇到过所描述的问题,也从未对这样VS做的事情感到恼火。

但是,当您编辑代码时,我认为这种行为有点过分Intellisense(正如另一个答案中已经描述的那样)。也许你应该改变你的“思维方式”?

看一看:

成员名单

您可以使用此特殊窗口在成员之间快速导航或对其进行简要概述,同时展开所有代码。

我见过一些人非常喜欢#regionpartial但是您可以通过使用单个类并将其拆分为多个部分来实现相同的效果(如果不是在所有方面都更好) 。

ps:最后你的问题,你为什么不先选择你需要删除的内容然后按Delete?或者该工具能为您做什么?自动通过来源,检测并删除?如果你是一名程序员,那么制作能够做到这一点的软件不应该比在这里写你的问题花费更多 =D

于 2013-09-02T14:38:19.200 回答
0

我不确定到底是什么问题,因为这看起来肯定不是正常行为(我从未经历过)。

不过,有一些选项(在不了解问题的情况下)可能会对您有所帮助。

首先,有人在另一个关于自定义visual studio intellisense的线程上给出了很好的答案:Custom Intellisense Extension

如果这不是一个选项,或许可以查看为 Visual Studio 2010 提供的扩展。

Productivity Power Tools 可能会帮助您进行一些重构。您可以通过 Visual Studio 转到工具 - 扩展管理器来获取此信息。然后选择该选项并安装它。电动工具非常有限,因此这可能还不够。我相信人们可以提供其他替代方案,但我肯定会推荐 ReSharper: http: //www.jetbrains.com/resharper/。您可以获得免费试用,但在那之后您必须付费。我使用它,它提供的扩展非常棒。您可以根据个人喜好完全更改 Visual Studio 的行为方式。

抱歉,我无法提供任何其他帮助,但如果您可以提供更多信息,那么也许我们可以找到解决方案(例如,其他方法正在扩展等是什么意思)。

于 2013-08-22T15:12:20.727 回答
0

嗯,你遇到的这个问题是一个普遍的问题,它有时会很烦人。根据我的经验,Visual Studio 会出现问题,尤其是当您在大型代码文件中编写大量块语句时,无论何时发生这种情况,您都可以保存您的工作并重新启动 VS。但要回答您的问题,请确保您首先尝试打开要编辑的任何折叠代码,对于复制/剪切,请先尝试突出显示折叠代码,然后再执行编辑选项,这会通知编辑器您要编辑突出显示的代码段。希望能帮助到你

于 2013-09-01T13:07:09.720 回答
0

与选项

也许这会有所帮助?

于 2013-09-02T19:55:45.243 回答