防止将缩进从制表符更改为空格
Prevent changing indentation from tabs to spaces
我安装了 VSCode 和 python 3.6.8
我使用制表符来缩进。但是每当我保存文件时,所有制表符都被转换为空格。
这可能是因为我使用的格式化程序,即 Black。我如何防止格式化程序执行此操作(除了 使用空格交换缩进 之外的所有格式)?
谢谢
假设您没有将 VS Code 设置为将 space 插入选项卡,那么 Black 很可能会用 space 替换它们,因为这是 Python 中的规范社区和 Black 对如何格式化 Python 代码持非常固执己见的观点。您可以尝试使用其他格式化程序,例如 yapf 或 autopep8,看看它们是否会留下物理标签。
但请注意,绝大多数 Python 社区都使用 space,因此您可能面临一场艰苦的战斗。
不仅'black'而且'autopep8'和'yapf'都会将制表符转换为space。看起来 'black'、'autopep8' 和 'yapf' 都没有提供参数来更改缩进的格式行为。我同意 Brett Cannon 的观点,你最好适应 space 缩进。
如果你真的想尝试一下,你可以在 site-packages 文件夹中找到 black.py 并在 black.py 中的 1540 行更改 ' '(四个 spaces) 到' '(一个tab,复制一个tab,你可以选择tab包含的任意spaces)。然后你可以得到你想要的。但是,我真的不推荐它。
autopep8
和black
都非常严格。
他们不仅 推荐 space 制表符,而且 强制 使用 space 缩进。
如果你真的想使用制表符,你应该使用 yapf
,样式为 use_tabs=True
。
直到 maintainers/contributors 添加了一个能够使用制表符缩进 Python 的设置,我通过使用 multi-command 扩展找到了解决这个问题的方法。
解决问题的步骤:
安装扩展。
找到你的 settings.json
和 keybindings.json
。来自 here:
根据您的平台,用户设置文件位于此处:
- Windows %APPDATA%\Code\User\settings.json
- macOS $HOME/Library/Application Support/Code/User/settings.json
- Linux $HOME/.config/Code/User/settings.json
将此添加到 settings.json
:
"multiCommand.commands": [
{
"command": "multiCommand.properlyFormatAnyDocument",
"sequence": [
"editor.action.formatDocument",
"editor.action.indentationToTabs"
]
}
]
- 将此添加到
keybindings.json
:
{
"key": "shift+alt+f",
"command": "extension.multiCommand.execute",
"args": {
"command": "multiCommand.properlyFormatAnyDocument"
},
"when": "editorTextFocus"
}
- 保存所有文件即可。
从技术上讲,yapf 有 use_tabs
设置,但我一直无法让它工作。
所以其中一个评论是 yapf 不太容易上手。在 Debian 下,安装
apt-get install yapf3
现在转到您的源目录并运行
yapf3 --style "google" --style-help > .style.yapf
编辑 .style.yapf 以便将
use_tabs=True
而不是 False。
现在运行
yapf3 -i dirty.py
而且它确实使用制表符进行缩进。空格仍然用于视觉格式化,制表符仅用于真正的缩进,我正在发送一个视觉示例,说明我的代码是如何格式化的。
我安装了 VSCode 和 python 3.6.8 我使用制表符来缩进。但是每当我保存文件时,所有制表符都被转换为空格。 这可能是因为我使用的格式化程序,即 Black。我如何防止格式化程序执行此操作(除了 使用空格交换缩进 之外的所有格式)?
谢谢
假设您没有将 VS Code 设置为将 space 插入选项卡,那么 Black 很可能会用 space 替换它们,因为这是 Python 中的规范社区和 Black 对如何格式化 Python 代码持非常固执己见的观点。您可以尝试使用其他格式化程序,例如 yapf 或 autopep8,看看它们是否会留下物理标签。
但请注意,绝大多数 Python 社区都使用 space,因此您可能面临一场艰苦的战斗。
不仅'black'而且'autopep8'和'yapf'都会将制表符转换为space。看起来 'black'、'autopep8' 和 'yapf' 都没有提供参数来更改缩进的格式行为。我同意 Brett Cannon 的观点,你最好适应 space 缩进。
如果你真的想尝试一下,你可以在 site-packages 文件夹中找到 black.py 并在 black.py 中的 1540 行更改 ' '(四个 spaces) 到' '(一个tab,复制一个tab,你可以选择tab包含的任意spaces)。然后你可以得到你想要的。但是,我真的不推荐它。
autopep8
和black
都非常严格。
他们不仅 推荐 space 制表符,而且 强制 使用 space 缩进。
如果你真的想使用制表符,你应该使用 yapf
,样式为 use_tabs=True
。
直到 maintainers/contributors 添加了一个能够使用制表符缩进 Python 的设置,我通过使用 multi-command 扩展找到了解决这个问题的方法。
解决问题的步骤:
安装扩展。
找到你的
settings.json
和keybindings.json
。来自 here:根据您的平台,用户设置文件位于此处:
- Windows %APPDATA%\Code\User\settings.json - macOS $HOME/Library/Application Support/Code/User/settings.json - Linux $HOME/.config/Code/User/settings.json
将此添加到
settings.json
:
"multiCommand.commands": [
{
"command": "multiCommand.properlyFormatAnyDocument",
"sequence": [
"editor.action.formatDocument",
"editor.action.indentationToTabs"
]
}
]
- 将此添加到
keybindings.json
:
{
"key": "shift+alt+f",
"command": "extension.multiCommand.execute",
"args": {
"command": "multiCommand.properlyFormatAnyDocument"
},
"when": "editorTextFocus"
}
- 保存所有文件即可。
从技术上讲,yapf 有 use_tabs
设置,但我一直无法让它工作。
所以其中一个评论是 yapf 不太容易上手。在 Debian 下,安装
apt-get install yapf3
现在转到您的源目录并运行
yapf3 --style "google" --style-help > .style.yapf
编辑 .style.yapf 以便将
use_tabs=True
而不是 False。
现在运行
yapf3 -i dirty.py
而且它确实使用制表符进行缩进。空格仍然用于视觉格式化,制表符仅用于真正的缩进,我正在发送一个视觉示例,说明我的代码是如何格式化的。