用于 vscode 的 Python 黑色格式化程序未格式化

问题描述

我正在尝试在 Ubuntu 20.04 上的 VS Code 上将 black as a formatter 用于 Python,但它无法自动保存。

我在 black 中选择了 Python>Formatting:Provider。我使用 prettier 作为我的认格式化程序,为此我添加一个 .prettierignore、禁用和卸载以确保它不会干扰黑色。我还向 ./local/bin/black 添加自定义路径。但是当我通过终端运行它时它可以工作。我如何使它工作?

{
  editor.defaultFormatter": "esbenp.prettier-vscode","editor.formatOnSave": true,"python.formatting.provider": "black","python.formatting.blackArgs": [
    "-l 120"
  ],"editor.formatOnType": true,"python.formatting.blackPath": "./local/bin/black"
}

解决方法

您只需要在 VS Code 上setup black as a formatter 进行一些设置。似乎您大部分都正确,但我对使用 blackPath 的相对路径表示怀疑(但如果路径确实不正确,VS Code 应该显示错误)。所以我建议切换到绝对路径。

这是我的设置:

// User Settings

"editor.defaultFormatter": null,"editor.formatOnSave": false,// enable per language
"[python]": {
    "editor.formatOnSave": true
},"python.formatting.provider": "black","python.formatting.blackPath": "/usr/local/bin/black"

// Workspace Settings

"python.formatting.blackPath": "/absolute/path/to/venv/with/black","python.formatting.blackArgs": [
    "-l 120"
],

首先,我建议去掉 editor.defaultFormatter 设置(或者只是将其设置回默认的 null)。不要为所有内容设置默认值,而是为每种语言和每种扩展配置格式化程序。在这里,它是空的,然后我配置了 python 特定的设置(然后我有单独的 JS 和 C++ 设置)。你提到了一些关于 Prettier 的事情,这可能会干扰 VS Code 使用黑色。

其次,确保您正在修改正确的设置。 VS Code 有3 sets of settings用户工作区文件夹。我通常在 User 设置中为 Python 启用 formatOnSave,并将 provider 设置为 black(使用系统范围内安装的 black)。在特定工作区上,我有一个虚拟环境,我将 blackPath 覆盖为专门安装在该虚拟环境中的 black。您也可以将所有设置放在用户设置中或使用相同的系统范围安装的 black。但这里的要点是对两者都使用绝对路径(基本上是从控制台复制 which black 的输出)。

请注意,如果您指定 blackPath 来指向特定的虚拟环境,请确保在您的工作区中 select that same virtual environment

最后,您可以从“输出”选项卡 > Python 检查任何问题:

enter image description here