VSCode: 保存和格式化之间的制表符大小不同

VSCode: different tab size between save and format

我已将制表符设置为空格并将制表符宽度设置为其中的 2 个。当我明确要求 vscode 重新格式化我的代码 (javascript) 时,它完全符合我的预期。当我在我的代码中创建一个新行时,它也会自动缩进到 2 个空格。

但是,当我(手动或自动)保存时,代码被重新格式化为 4 个空格!!!

它不会使用 yaml 执行此操作。

我相信我正在使用 prettier(因为它在状态栏中这样说)与它所说的 Spaces: 2 有一点距离。在我的 settings.json 中有这个:"editor.tabSize": 2。我也有这个漂亮的小东西:

"[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },

我认为这意味着它正在使用 prettier。它为 yaml 记录了相同的格式化程序(事实上,几乎所有其他内容)。

有人能告诉我如何在不失去自动保存的好处的情况下停止这种烦人的行为吗?

像这样禁用缩进检测

"editor.detectIndentation": false.

也用

"editor.formatOnSave": true

"prettier.tabWidth": 2,

  1. 请查看您的项目中是否存在 .editorconfig
  • 如果是这种情况,请编辑文件(请参阅 https://editorconfig.org/),或者如果是共享项目,您可以与作者讨论。例如:
[*.js]
indent_style = space
indent_size = 2
  • 或者完全关闭.editorconfig支持:
"prettier.useEditorConfig": false
  1. 不使用 .editorconfig,我无法重现您的问题(即 tabSize 配置 = 2,重新格式化为 4)。 但是解决方法是:
"editor.formatOnSave": false

甚至仅限于javascript

"[javascript]": { "editor.formatOnSave": false }

这会保留自动保存功能,但会跳过自动格式化。

  1. 相关选项总结:
"editor.tabSize":
"editor.detectIndentation":
"editor.formatOnSave":
"prettier.tabWidth":
"prettier.useEditorConfig":
"prettier.useTabs":