禁用Razor中的Visual Studio代码格式化

156

这个问题以前就被问过了:为什么Visual Studio对Razor标记的格式化无法正常工作?

但那个问题已经过时了,而且Razor格式化仍然是完全不可接受的。我已经放弃修复它。

我能否禁用所有CSHTML文件的Visual Studio格式化?如果不能,我可以完全禁用所有Visual Studio格式化吗?有没有第三方黑客工具可以使用?一定有些方法!

我升级到2013年版本,但格式化仍然很糟糕。

[编辑]: 2015年的也非常糟糕。我真希望他们能解决这个问题。

[编辑]: 2017年的也非常糟糕。我真希望他们能解决这个问题。

[编辑]: 2019年的也非常糟糕。我真希望他们能解决这个问题。话说,微软为.Net Core发布了一个新的格式化引擎

[编辑]: 现在是2022年……你懂的。如果他们再无视这个问题12年,我可能在看到它解决之前就退休了!


18
2013年情况更糟。 - TombMedia
11
2015年情况更糟糕了! - Paul
7
未在 Visual Studio 2017 RTM 版本中修复。 - apr
8
2018 年未固定。 - Dirk Boer
15
2021 年并未确定! - Ryan Lundy
显示剩余12条评论
10个回答

88

在“工具”→“选项”→“文本编辑器”→“HTML”→“高级”下,有一个键值项目“Paste”,它说“粘贴时格式化”,并且其旁边有一个布尔值。将其更改为false,即可禁用Razor语法中的粘贴格式化。

我使用的是VS Professional 2013,版本12.0.30110.00升级1。


谢谢!粘贴时的自动格式化让我疯了。这似乎已经消除了它。 - Torrents
太棒了,这正是推动这个项目的所需之物!谢谢! - Martin S Ek
我会给你点赞不止一次,这是针对VS 2013 up1及更高版本的正确响应。 - Erik Simonic
2
在Visual 2015中无法工作?我已在HTML /高级中取消选中“粘贴时格式化”,但仍会在粘贴时得到奇怪的未格式化/疯狂缩进。我考虑使用其他编辑器处理 cshtml 文件,但这样会失去C#自动完成功能。这种情况真是太疯狂了。 - youen
6
在VS2017中对我起作用。 - Dave
救了我的一天。这对我在 VS 2019 上有效。 我每次在 Razor 文件中粘贴时都使用 Ctrl+Z,但有时会忘记,导致文件在 SVN/git 中出现许多更改。 - Jiping

59

无法做到。自第一个.Net版本(Visual Studio 2002/2003)以来,这是VS内置的“功能”。

有大量的关于格式问题的连接报告,但微软完全忽视它们,或者将修复推迟到“下一个版本”。您可以看一个例子,微软的回答在这里

您可以在此处向Microsoft团队发表自己的反馈here


1
我又沮丧地搜索了一遍,不知道他们是否改变了什么,但是Metroid Hunter的修复方法在Razor中对我有效。https://dev59.com/3mIj5IYBdhLWcg3wmWC1#28053865 - mattmanser
4
在 2015 年,Visual Studio 中的 HTML 怎么还这么烂? - schmoopy
1
实际上,2015年的版本比2013年更糟糕(C#也是如此,每次打开大括号时都会缩进无关的内容)。我曾经喜欢Visual Studio,但这慢慢地让它失去了吸引力。 - youen
2
注意:所有连接链接现在都已失效。 - jrh

38

寻找的地方:

Tools -> Options -> Web Essentials -> HTML -> Auto-format HTML on Enter

(需要安装Web Essentials扩展)

设置为False

Tools -> Options -> Text Editor -> HTML -> Advanced -> Format on Paste

设置为False

使用这些设置,我在Visual Studio 2013中没有任何问题。

以前我经常不得不按Ctrl-Z,如果你忘记了解决代码混乱的问题,一旦你编写和测试代码,那么要整理它会非常麻烦。我觉得微软可以帮助用户配置这些设置,并使其更易于访问。


4
没有“Web Essentials”区域。 - Paul
太棒了!这个问题困扰了我多年,但现在不再了! - David Kirkland
2
@Paul Web Essentials 是一个增强 HTML、CSS、JS 编辑器相关功能的 VS 扩展。安装它并禁用自动格式化会大有帮助 - SandRock
3
应将此标记为答案,特别是有关Web Essentials的那一行。感谢@dazbradbury! - Aggromonster
格式化输入功能在代码重构方面花费了我很多时间。感谢您的帮助! - ihimv
1
第二个选项在VS2017中并不能解决它,而第一个选项甚至不存在。 - ygoe

27

对我有用的解决方法是粘贴后按CTRL+Z,这样格式就被移除了。


3
在这里工作时,我正在粘贴一个包含<select>标签的块,其中有一系列的data-bind knockout属性分散在约8行上,它破坏了驼峰式命名法并移除了冒号...我正准备放弃并重新输入它...然后我按下了Ctrl+Z,惊喜地发现它起作用了...@Miros - beauXjames
点赞。这在VS 2015中有效 :) 其他解决方案(在“工具”>“选项”下的各种设置)对我没有用,至少当粘贴应该以某种方式在代码/ HTML之间更改的内容时,即粘贴包含C#代码后跟随HTML标记的行或直接在C#代码后面粘贴HTML标记。 - savehansson
这在VS中总是有效的。这是撤消格式混乱的唯一方法。(或者你真的手动清理了吗?)我已经习惯了,但它非常令人恼火。 - ygoe
令人惊讶的是,在VS 2019中,.razor文件中格式化后按下Control-Z键“不再起作用”。糟糕的格式仍然存在。 - Ryan Lundy

11

这并不包含在Visual Studio中,所以您需要单独安装它。 - Paul
2
我提到这个原因是因为有人可能会认为Visual Studio正在进行重新格式化(就像我一样),但实际上可能是R#(许多开发人员使用的工具)在起作用。因此,如果有人无法禁用它并且已安装了R#,则需要确保在两者中都将其禁用。 - hcoverlambda
5
在 R# 2017.3 中,这些设置位于 ReSharper | Options | Environment | Editor | Editor Behavior。 - Dark Daskin
2
在 R# 2018.3 中,我还需要将 Editor Behavior, Auto-format on paste 设置为“None”。 - EM0

7
很不幸,防止自动格式化粘贴的唯一方法是将要粘贴新代码的位置注释掉,并在粘贴操作后删除注释指令。搜索和替换似乎不会触发自动格式化。但是,粘贴会重新格式化整个代码块。这太糟糕了,难以形容。这使得Visual Studio IDE对于Razor编辑几乎无法使用。必须使用外部编辑器来处理Razor文件。更糟糕的是,即使是最新的Visual Studio 2013 Update 1,在编辑Razor视图时也总是崩溃。

6
有趣的是,您可以禁用C#格式和HTML格式,但无法禁用Razor格式。
我已取消选中“工具>选项>文本编辑器>C#>格式>粘贴时自动格式化”以及HTML的相同设置。
这将导致在cshtml文件中出现以下有趣的体验:
- 粘贴HTML代码:无格式 - 粘贴C#代码:无格式 - 粘贴Razor代码:格式全部错误
由于没有更改Razor选项的选项,所以您必须接受这种情况。
我的“解决方案”:粘贴后使用Ctrl + Z撤消自动格式化。

1
我也是,但这让我发疯了! - Matt Kocaj
你的解决方案是一个权宜之计,而且在编辑大文件时需要花费几分钟的时间。 - Arturo Torres Sánchez

3

谢谢,我启用了这个功能,它似乎比以前的格式引擎工作得更好。现在当我保存时,它不再破坏我的格式,并且当我使用键盘快捷键(在我的情况下是Ctrl-K,Ctrl-D)来格式化.razor文件时,几乎可以正确地格式化所有内容。 - Ryan Lundy
然而,进一步使用后发现,这个新编辑器很容易破坏Intellisense。 - Ryan Lundy
太糟糕了。希望这个新编辑器至少意味着他们在经过10年的无进展后终于开始了解决此问题! - Paul

0
我在Resharper 2019中找到了这些设置,它们改善了我的使用体验: 输入图像描述

0

以下内容并没有直接回答问题,但提供了一个可能有用的解决方案。

在我的情况下,自动格式化仅在一些文件中表现异常糟糕。这实际上与所使用的换行符类型有关。

解决方法:

  • 启用高级保存选项
  • 保存有问题的文件时,选择“Windows(CR LF)”作为换行符类型

支持文档

这样做后,自动格式化似乎表现更好了。


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