每当我将Python文件保存在Sublime Text 3中时,我都想应用black
。该怎么办?
(奖励积分是一种快速禁用它的方法)
答案 0 :(得分:1)
上面的答案真的很好。如果您不想编写自己的软件包或插件,并且不喜欢Formatter软件包,则还有sublack软件包,我认为它支持快速启用/禁用运行{{3 }}上保存。
您可以通过程序包控制(Ctrl-Shift-P(Mac:Cmd-Shift-P)程序包控制:安装程序包)以常规方式安装sublack。然后,您可以手动格式化当前文件:
在当前文件上运行黑色: 按Ctrl-Alt-B格式化整个文件。您也可以按Ctrl-Shift-P(苹果机:Cmd-Shift-P)并选择Sublack:格式化文件。
或者您可以:
在保存时将黑色切换为当前视图: 按Ctrl-Shift-P(苹果机:Cmd-Shift-P),然后选择Sublack:在保存时将黑色切换为当前视图。
或者,您还可以通过创建类似于以下内容的用户设置(首选项->程序包设置-> sublack->设置)来启用永久保存时运行黑色的功能。
{
"black_on_save": true,
"black_line_length": 80,
}
答案 1 :(得分:0)
要执行此操作,您需要一个软件包或插件,该软件包或插件应能够在Sublime中为Python文件触发on_post_save
事件时触发外部命令。
Formatter程序包是执行此类操作的程序包示例,自述文件提到它也支持Black。我自己不使用该程序包,因此无法以一种或另一种方式推荐它。也许还有其他软件包也提供类似的功能,尽管这是我发现的唯一提及它明确支持Black的软件包。
从理论上讲,任何可以在保存事件上执行命令的格式化软件包或软件包,只要您指定执行命令的格式,都可以配置为正常工作。
为了完整起见,可以通过创建一个ViewEventListener
来创建一个类似这样的插件,该插件仅在Python文件内部触发并使用内部exec
命令执行{ {1}}命令。
以下是此类插件的示例(this video提供了有关如何在Sublime中设置插件的说明,如果您不确定该怎么做),对于元点,已在保存时格式化了本身:
black
一旦import sublime
import sublime_plugin
import os
class FormatWithBlackOnSave(sublime_plugin.ViewEventListener):
"""
Listen for file saves and run the black code formatter on Python files
as they are saved, unless they have a setting indicating that the autoformat
should be disabled.
"""
@classmethod
def is_applicable(self, settings):
return "/Python/" in settings.get("syntax") and not settings.get(
"black_disabled", False
)
def on_post_save(self):
path, file = os.path.split(self.view.file_name())
settings = sublime.load_settings("Preferences.sublime-settings")
show_panel_on_build = (settings.get("show_panel_on_build", True),)
override_panel = settings.get("black_override_panel", False)
env = settings.get("black_env", {})
args = settings.get("black_arguments", [])
if override_panel:
settings.set("show_panel_on_build", not show_panel_on_build)
window = self.view.window() or sublime.active_window()
window.run_command(
"exec",
{
"shell_cmd": 'black {args} "{file}"'.format(
file=file, args=" ".join(args)
),
"working_dir": path,
"env": env,
},
)
if override_panel:
settings.set("show_panel_on_build", show_panel_on_build)
包中有此文件,您还应该向User
文件中添加一些自定义设置以对其进行控制:
Preferences.sublime-settings
这需要您自己安装 // When this is True, the plugin will not execute on save.
"black_disabled": false,
// Override the value of the `show_panel_on_build` setting that controls
// whether the output panel appears when the command is executed. When
// true the value of that setting is temporarily inverted.
"black_override_panel": false,
// The arguments (other than the current file) to pass to black
"black_arguments": [],
// Optional environment variables to use while running the tool
// (for example to set the path); works as in a `sublime-build` file.
"black_env": {
}
命令(例如black
),并使用给定参数为当前文件执行该命令,只要该文件是Python文件且{{ 1}}设置如上设置为pip install black
。
该插件使用内部black_disabled
命令,该命令使用首选项false
来确定是否应该显示一个面板来显示命令的输出。该设置的默认值为exec
,这意味着每次保存Python文件时,面板都会显示如下消息:
show_panel_on_build
true
设置使插件在执行命令时反转reformatted black.py
All done!
1 file reformatted.
[Finished in 0.2s]
的值;或者在正常情况下不显示它,反之亦然。
更改首选项中的设置将全局禁用所有Python文件中的事件监听器。您也可以在black_override_panel
包中创建一个文件,其名称类似于show_panel_on_build
,其内容如下:
User
这将向命令选项板添加一个命令,该命令将反转当前文件中设置的状态;这样一来,您可以仅对某些文件禁用插件,或者仅对某些文件启用插件。
答案 2 :(得分:0)
Package Control: Install Package
which python
在右侧面板
{
"black_on_save": true,
"black_command": WHICH_PYTHON_RESULT
}