黑色不支持“格式选择”命令。

49

我需要在VS Code中缩进我的Python文件。我按照正常的程序进行了操作:

On Windows Shift + Alt + F
On Mac Shift + Option + F
On Linux Ctrl + Shift + I
但我的问题是,每次我尝试格式化Python文件时,它都会显示:
Black不支持“格式化选定内容”。
那么有人能解释一下这里出了什么问题吗?
我的Python版本是Python 3.7.6。 VS Code详细信息:
Version: 1.46.0 (user setup)
Commit: a5d1cc28bb5da32ec67e86cc50f84c67cc690321
Date: 2020-06-10T09:03:20.462Z
Electron: 7.3.1
Chrome: 78.0.3904.130
Node.js: 12.8.1
V8: 7.8.279.23-electron.0

OS: Windows_NT x64 10.0.18363 

2
你可以尝试使用autopep8。它支持格式选择。 - Justin Lin
5个回答

72

在我的情况下(在VS Code设置中选择黑色作为Python格式提供者),每当我将一些文本粘贴到编辑器中时,都会遇到这个警告

而VS Code的官方文档针对此问题有一个解决方法:

使用black格式化程序时,当将源代码粘贴到编辑器中时,VS Code会发出以下警告:Black不支持“格式选择”命令。

要防止出现此警告,请在用户或工作区设置中添加以下条目以禁用Python文件的粘贴格式:

"[python]": {
    "editor.formatOnPaste": false
}

10
根据官方文档,您还必须拥有"[python]": { "editor.formatOnSaveMode": "file" } - S. Esteves
这个回答解决了我的问题! - WhyWhat

17

听起来你的键绑定设置为运行“格式化选择”而不是“格式化文档”, Black 只支持后者而不是前者。如果你运行“格式化文档”命令,那应该就没有问题了。


2
如果我需要“格式选择”,您建议使用哪种格式化程序? - Justin Lin
我们还没有为任何格式化程序添加显式支持以进行选择格式化,因此我没有建议。 - Brett Cannon
5
autopep8 支持 格式化所选内容,而 black 不支持。这就是我使用 autopep8 的唯一原因,对于其他方面,我更喜欢 black - Eduardo Pignatelli

16

请确保在保存时 编辑器:格式化模式>文件输入图像描述


1
谢谢您清晰的解释!对我有用!对我来说,它是在用户设置上被修改的。 - Adam
1
太棒了!完美地完成了任务。在大多数开发商店中,CI/CD将要求所有文件都进行“黑化”,因此在大多数情况下,格式化整个文件并不会有什么影响。很好。 - sming
1
还要将“粘贴时格式化”设置为“False”,因为Black无法格式化粘贴的块。 - william_grisaitis

4
黑色(Black)的设计不支持格式选择选项。在这个错误中,您可以找到理由
如果要使用黑色,您必须配置以格式化所有文件并禁用格式选择。您的settings.json必须具有以下配置:
 "[python]": { 
     "editor.formatOnSaveMode": "file",       
     "editor.formatOnPaste": false
 }

如果您真的想在现有项目中使用Black,我的建议是尝试使用darker。我一直在一个使用Black开发的代码中成功使用它,但我的同事没有使用。现在我可以编辑它而不会破坏git blame信息。

0

在我的情况下,我有一个旧的设置

"[python]": {
  "editor.formatOnSaveMode": "modifications"
}

为了解决这个问题,我已经将它替换成了这个:
"[python]": {
  "editor.formatOnSaveMode": "file"
}

问题就这样消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接