如何在保存时应用黑码格式?

时间:2019-07-31 10:51:30

标签: sublimetext3 python-black

每当我将Python文件保存在Sublime Text 3中时,我都想应用black。该怎么办?

(奖励积分是一种快速禁用它的方法)

3 个答案:

答案 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)

1 python 3.6

2点安装黑色

3 cmd + shift + p,然后单击Package Control: Install Package

4分欠缺

5在终端which python

6首选项/软件包设置/ sublack /设置

在右侧面板

{
    "black_on_save": true,
    "black_command": WHICH_PYTHON_RESULT
}