这非常令人沮丧 - 我发现即使我正确设置了编辑器配置,VS2019 也会自发地在文件中插入标签。
我非常喜欢制表符,但在我目前的工作中他们使用空格,所以你必须同意。
令他们沮丧的是,我的文件会使用标签签入,当然 Git 会喋喋不休地告诉你有关更改的内容。
事实证明,根据这个帖子:https://developercommunity.visualstudio.com/t/visual-studio-20194-c-insert-spaces-instead-of-tab/847853Visual Studio 2019 将基本上忽略您的设置,并根据文件的内容决定自发切换到它认为正确的内容。
这显然不能改变:
这是 Visual Studio 中的自适应格式行为:编辑器
启发式地确定当前文件是否应该使用制表符或空格
用于缩进。
我们目前没有禁用自适应空白的选项,但是
如果人们觉得这很重要,我们可以添加它。
很多人都在抱怨,但你会得到(目前的标准)免责声明,即“我们在用吱吱作响的轮子工作”。
所以我们只能靠自己了。
因此您可以尝试将其关闭,但 VS2019 仍会以它认为正确的方式维护文件 - 即使文件中只有一个 TAB。
因此,唯一完整的修复,再次直接来自 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
所以你可以用一块石头杀死两只鸟。