为啥大括号缩进在 Visual Studio 2015 中搞砸了?

Posted

技术标签:

【中文标题】为啥大括号缩进在 Visual Studio 2015 中搞砸了?【英文标题】:Why is curly brace indentation messed up in Visual Studio 2015?为什么大括号缩进在 Visual Studio 2015 中搞砸了? 【发布时间】:2015-07-01 03:13:54 【问题描述】:

我正在使用 Visual Studio 2015 Release Candidate。

在以前版本的 Visual Studio 中,我一直在编程时禁用 Automatic brace completionAutomatically format completed block on

在以前的版本中创建块时,输入enter enter 时会自动格式化大括号

这会导致:

class Foo


在 VS 2015 中导致:

class Foo

    

我是否缺少新设置或者这是 RC 中的错误?

【问题讨论】:

这将是某个地方的配置。 可能相关:***.com/questions/30520764/… @EvanCarslake 知道在哪里吗? @Blorgbeard 我在发布自己的问题之前遇到了这个问题。那里的答案并没有解决我的问题。 它在选项中,相关语言的编辑器。但我认为为了获得一些人们认为有用的功能而不得不选择退出各种事物是一个坏主意。而是我会有一个很好的清单,例如我可以选择加入的格式如果我愿意。正如所有老前辈都同意的那样,developer studio 6.0 是最好的。从那以后,只能走下坡路。 【参考方案1】:

好的,我测试过了。结果似乎很明显 - 您告诉 Visual Studio 上格式化您的代码,所以它没有这样做。

换句话说,旧版 Visual Studio 中的行为似乎被破坏了——即使您已指定不希望 VS 为您进行格式化,它确实如此。毕竟,当您输入时,您的光标最终会出现在 _ 上:

class Test

    _

然后你只需添加一个,这样就可以了

class Test

    

哪些旧版 Visual Studio 会自动格式化为

class Test


即使您未选中 Automatically format completed block on 。这显然是自动格式化 - 如果您按 Ctrl+Z,它将恢复格式,而不是 本身。可以说,VS2015 中的行为是对旧版本中存在的错误的修复

当我开始对您的设置使用疯狂的格式时,这一点变得更加明显。像这样的代码:

class Test

    public
        string
            Ana
    
        get; set;
        
    

变成

class Test

    public
        string
            Ana
    
        get; set;
        
        

在 VS2013 上!这显然是错误的。另一方面,VS2015 正确地应用了无格式——它只是将插入符号放置在它认为你想要它的位置,并且永远不会自动应用任何格式。

那么,有没有办法解决旧的行为?没什么简单的,我很害怕 - 我的猜测是 MS 只是认为是正确的行为,而旧的行为是错误的,很难与之争论。您可以采取一些变通方法来接近旧行为,例如手动禁用所有自动格式化 except 以进行大括号对齐,但它仍会稍微改变行为。

不过,我可以看到您期望的行为是多么理想。如果您认为值得,您可以尝试在 Connect 上将其作为 bug 提交,但我不会给它太多“修复”的机会 - IMO 这是对 bug 的修复,而不是 bug。

【讨论】:

嗯,我明白你在说什么,但我不买它。我无法理解如何将取消缩进的右大括号视为自动格式化,但您在键入时获得的所有其他基本缩进都不被视为自动格式化。我一直将Automatically format completed block on 理解为“在结束您正在输入的代码块时应用您设置的所有实际自动格式化规则”。此外,这个错误(如果它一个错误)至少从 2008 年就已经存在于 Visual Studio 中。为什么现在修复它? @inlinevoid 好吧,我提到的区别是存在的——自动格式化实际上改变了输出。另一个缩进只是移动光标。当然,您不修复 noöne 关心的错误 - 那是在浪费资源。但是,无论如何,当您重写整个代码时(我猜这与 Roslyn 集成等有关),您甚至倾向于避免那些没人关心的错误。我当然理解为什么它很烦人,但它确实更有意义(即使我仍然认为它很傻)。也许您可以编写一个简单的插件来处理这个问题?

以上是关于为啥大括号缩进在 Visual Studio 2015 中搞砸了?的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 代码编辑时怎样自动添加大括号

转到Visual Studio中的匹配大括号?

Visual Studio 中的大括号逗号语法是啥?

Visual Studio 2005怎么让大括号不换行

在 Visual Studio Code 中设置 Cobol 制表符/缩进

visual studio 2008的ISO文件有3.70GB,为啥有这么大?