Visual Studio 2019忽略制表符偏好设置。

17
今天早上我在VS2019编程,但晚上继续编程时发现它突然使用空格代替制表符! 我的偏好设置是对于每种语言都放置制表符,并且在过去的几天一直这样做。 我更新了VS以确认,但问题仍然存在-无论我的偏好设置如何,空格都会突然出现而不是制表符。
注:我知道这个问题已经在此处被问到,但他们的解决方案是更新VS-但这对我没有任何改变。

你有其他的插件吗,比如Resharper? - John Wu
不,我使用的是VS2019开箱即用(当然,除了用户偏好设置)。 - Khide Hoskins
4个回答

23

我找到解决方法了!在选项中,进入文本编辑器>高级,并关闭“使用自适应格式”。这会根据给定文件的已有格式覆盖我的首选项。


3
谢谢回答。目前似乎大部分还没有记录下来。我希望这种情况在未来会有所改变。 - Arturo Torres Sánchez
2
9个月后(2020年9月),这个新功能仍然没有文档记录,"响应式代码完成"功能也是如此。VS中的帮助按钮毫无用处。拜托了,微软,你们比这更好。 - Dai
1
对我没有任何影响。 - O. R. Mapper
在 CS 文件中,我也遇到了 VS 2022 相同的问题。禁用“使用自适应格式”有所帮助。谢谢。 - Bluefire

8
也许这会有所帮助,因为我也遇到了同样的问题,在答案中检查了所有通常提到的地方,如工具 -> 选项 -> 编辑器 -> 等等...,但是没有帮助。现在我在某个评论中找到了隐藏的解决方案。我从git下载的项目作用域内有一个名为.editorconfig的文件,它覆盖了您可以在工具菜单中设置的设置。请查找一行代码。
indent_style = spaces

并将其更改为

indent_style = tab

1
太棒了,我在其他地方很少见到这个记录。谢谢你。 - J. Gwinner

5
这非常令人沮丧 - 我发现即使我正确设置了编辑器配置,VS2019也会自动插入制表符到文件中。
我非常喜欢使用制表符,但在我的当前工作中他们使用空格,所以你必须遵循共识。
我的文件将被检入时带有制表符,Git当然会警告您有更改。
结果是,根据此线程:https://developercommunity.visualstudio.com/t/visual-studio-20194-c-insert-spaces-instead-of-tab/847853,Visual Studio 2019将基于文件内容决定是否突然切换到它认为正确的方式。
显然无法更改这个:
引用: 这是Visual Studio中的自适应格式行为:编辑器通过启发式方法确定当前文件是否应使用制表符或空格进行缩进。 我们目前没有选项来禁用自适应空格,但如果大家觉得这很重要,我们可以添加它。
很多人抱怨过,但随后您会看到(现在是标准)“我们关注最需要解决的问题”的免责声明。
因此,我们只能靠自己解决这个问题。
因此,您可以尝试关闭它,但是VS2019仍将按照其认为正确的方式维护文件 - 即使文件中只有一个制表符。
因此,唯一完整的解决方法是再次直接从Microsoft获取:
引用: 第三,如果您在代码存储库中使用.editorconfig,则我们将始终遵循这些设置。不必使用.editorconfig,但任何特别关心维护编码样式的人都应该知道我们VS的指导原则之一是永远不要相信我们“足够聪明”,以覆盖.editorconfig。
我的完整编辑器配置:
[*]
indent_style = space
indent_size = 3
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

注意 "end_of_line" ... 这也解决了WSL的问题,否则Git可能会在.sh文件中将您的行结束符更改为CRLF...这在WSL上不起作用。
除此之外,设置您的.gitattributes文件:
* text=auto eol=lf

*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
*.cs                  text eol=crlf
*.xaml                text eol=crlf
*.csproj              text eol=crlf
*.njsproj             text eol=crlf
*.pyproj              text eol=crlf
*.sln                 text eol=crlf

所以你可以一箭双雕。


最近我遇到了一个项目,它需要使用制表符而不是空格[与公司的其他部分规定相反]。因此,.editorconfig 是唯一可以拯救你的东西!这样每个项目都可以运行自己的标准。 - J. Gwinner
2
标准非常重要,每个人都应该有一个。 - J. Gwinner
1
谢谢您向我展示了一个编辑器配置文件任何位置都可以影响存储库中解决方案的情况。之前我尝试编辑一个示例时发现它在做一些奇怪的事情,因为某些全局默认设置并不适用于我使用的语言,这真是令人沮丧! - Kevin Anderson
很高兴我能帮助凯文!是的,这种行为以及Visual Studio(不是VSCode)中的“自适应格式”都很疯狂。此外,如果您正在使用 Visual Studio Code,我刚刚发现它会忽略 .editorconfig,但是有一个扩展程序(当然)可以解决这个问题。 - J. Gwinner

3
尝试以下步骤(已解决我的问题):

工具 -> 选项 -> 文本编辑器 -> 高级 -> 关闭“使用自适应格式”

工具 -> 选项 -> 文本编辑器 -> 所有语言 -> 制表符 -> 保留制表符

工具 -> 选项 -> 文本编辑器 -> C# -> 制表符 -> 保留制表符


这正是我需要的,它是“所有语言->选项卡”选项,只有你知道...空格。 - Aaron

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