Visual Studio 2019 忽略选项卡首选项

Khi*_*ins 8 c# tabs spaces unity-game-engine visual-studio-2019

今天早上在开始我的一天之前,我正在 VS2019 中编程。当我晚上坐下来继续编程时,我意识到它突然放置了空格而不是制表符!我为每种语言设置了选项卡而不是空格的首选项,并且在前几天一直这样做。我更新了 VS 以确保,但问题仍然存在 - 无论我的偏好设置如何,都会放置空格而不是制表符。

PS:我知道这里已经问这个问题,但他们的解决方案是更新 VS - 这对我没有任何改变。

Khi*_*ins 13

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

  • 感谢你的回答。目前看来基本上没有记录。我希望这种情况在未来会有所改变。 (3认同)
  • 9 个月后(2020 年 9 月),这个新功能仍然没有记录,“响应式代码完成”功能也是如此。VS中的帮助按钮没用。加油,微软,你比这更好。 (2认同)

Dev*_*lus 8

也许这会有所帮助,因为我遇到了同样的问题,检查了答案中提到的所有常见位置,Tools -> Options -> Editor -> yadda yadda ...但没有任何帮助。

现在我发现隐藏在一些评论中的解决方案。我从 git 下载的项目有一个.editorconfig在范围内命名的文件,这会覆盖您可以在菜单中设置的设置Tools

寻找一条线

indent_style = spaces
Run Code Online (Sandbox Code Playgroud)

并将其更改为

indent_style = tab
Run Code Online (Sandbox Code Playgroud)


J. *_*ner 5

这非常令人沮丧 - 我发现即使我正确设置了编辑器配置,VS2019 也会自发地将选项卡插入文件中。

\n

我非常喜欢制表符,但在我目前的工作中,他们使用空格,所以你必须同意。

\n

令他们沮丧的是,我的文件将通过选项卡签入,当然 Git 会向你喋喋不休地谈论更改。

\n

事实证明,根据这个线程:https://developercommunity.visualstudio.com/t/visual-studio-20194-c-insert-spaces-instead-of-tab/847853 Visual Studio 2019 基本上会忽略您的设置并决定,根据文件的内容,自发地切换到它认为正确的内容。

\n

这显然无法改变:

\n
\n

这是 Visual Studio 中的自适应格式设置行为:编辑器\n试探性地确定当前文件是否应使用制表符或空格\n进行缩进。

\n

我们目前没有\xe2\x80\x99t 选项来禁用自适应空白,但是\n如果人们认为\xe2\x80\x99 很重要,我们可以添加它。

\n
\n

很多人抱怨,但随后你会得到“我们在吱吱作响的轮子上工作”的(目前标准)免责声明。

\n

所以我们只能靠自己了。

\n

所以你可以尝试将其关闭,但 VS2019 仍然会以它认为正确的方式维护文件 - 即使文件中只有一个 TAB。

\n

因此,唯一完整的修复,同样直接来自微软:

\n
\n

第三,如果您在代码存储库中使用 .editorconfig,我们将始终\n尊重这些设置。\xe2\x80\x99 不是使用 .editorconfig 的必要条件,但是\n任何对维护编码风格特别感兴趣的人\n应该知道我们的 VS 指导原则是永远不要相信\n我们\xe2\x80\x99re \ xe2\x80\x9csmart 足以覆盖 .editorconfig。

\n
\n

我的完整编辑器配置:

\n
[*]\nindent_style = space\nindent_size = 3\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n
Run Code Online (Sandbox Code Playgroud)\n

请注意“end_of_line”...这也解决了 WSL 的问题,否则 Git 可能会将 .sh 文件中的行结尾更改为 CRLF ...这不适用于 WSL。

\n

除了这个奖励解决方案之外,还设置您的 .gitattributes 文件:

\n
* text=auto eol=lf\n\n*.{cmd,[cC][mM][dD]} text eol=crlf\n*.{bat,[bB][aA][tT]} text eol=crlf\n*.cs                  text eol=crlf\n*.xaml                text eol=crlf\n*.csproj              text eol=crlf\n*.njsproj             text eol=crlf\n*.pyproj              text eol=crlf\n*.sln                 text eol=crlf\n
Run Code Online (Sandbox Code Playgroud)\n

所以一石二鸟。

\n

  • 标准很棒,每个人都应该有一个。 (2认同)