在 vscode 中使用 Prettier 时出现格式问题 python

Problem formatting python when using Prettier in vscode

在 vscode 中,我想使用 Prettier 作为我的默认格式化程序,但不用于 Python,我将只使用 autopep8。我现在有以下设置:

{
  "workbench.iconTheme": "vscode-icons",
  "workbench.editorAssociations": [
    {
      "viewType": "jupyter.notebook.ipynb",
      "filenamePattern": "*.ipynb"
    }
  ],
  "git.confirmSync": false,
  "editor.formatOnPaste": true,
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "python.formatting.provider": "autopep8",
  "explorer.confirmDelete": false,
  "python.showStartPage": false,
  "explorer.confirmDragAndDrop": false
}

当我保存 python 文件时,它给我消息:“扩展名 'Pretier - code formatter cannot format etc...'。所以,显然它仍然对 python 文件使用了错误的格式化程序。我该如何改变这个?!

在VSCode中,Python的“Formatting”由Python扩展提供。因此,对于 Python,请使用 Python 扩展名(例如:autopepe8)中的格式,以避免使用重复的格式设置以致它们不起作用。

参考:Formatting.

如果我禁用 Prettier 作为默认格式化程序,它将不再在保存时格式化,但我的 Python 将在保存时由 autopep8 格式化。考虑到这一点,以下解决方案对我来说很有效,让 Prettier 可以用于其他语言,而 autopep8 可以用于 Python:

{
  "workbench.iconTheme": "vscode-icons",
  "workbench.editorAssociations": [
    {
      "viewType": "jupyter.notebook.ipynb",
      "filenamePattern": "*.ipynb"
    }
  ],
  "git.confirmSync": false,
  "editor.formatOnPaste": true,
  "editor.formatOnSave": true,
  "python.formatting.provider": "autopep8",
  "explorer.confirmDelete": false,
  "python.showStartPage": false,
  "explorer.confirmDragAndDrop": false,
  "python.linting.pylintArgs": ["--load-plugins=pylint_django"],
  "javascript.updateImportsOnFileMove.enabled": "always",
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "[python]": {
    "editor.defaultFormatter": "ms-python.python"
  }
}

如果有人找到更好的解决方案,请告诉我!

您可以按照@round_circle 所做的去做,因为那应该有效。如果您不想设置初始提供程序,例如您可能想改用 Black,您也可以添加到 settings.json:

"[python]": {
    "editor.defaultFormatter": null
  },

我碰巧使用的是 Microsoft 的 Python 扩展,默认为 autoPep8,这将提示您设置要使用的格式化程序。 photo of the prompt to add formatter 然后您可以在 settings.json 中添加您的提供商,方法是添加:

"python.formatting.provider": <your_formatter>

这里也可以参考:VS Code Formatting

来自 @round_circle 的回答的有意义的配置片段:

"[python]": {
    "editor.defaultFormatter": "ms-python.python"
  }

添加后,autopep8 可用于 python 个文件。