python 在VSCode中保存时格式化Jupyter notebook

r1zk6ea1  于 2023-04-04  发布在  Python
关注(0)|答案(4)|浏览(350)

我使用black在VSCode中保存时自动格式化所有Python代码。我想要相同的功能,但在VSCode中的Jupyter笔记本中。
This answer展示了如何右键单击并从右键单击上下文菜单或键盘快捷键中格式化单元格或整个笔记本。我可以在保存时进行此操作吗?
看起来有一个issue与此相关,但它已经有一年多的历史了。
有什么好的解决方法吗?也许有一种方法可以将格式化笔记本选项设置为与保存相同的键绑定?
更新:
如果你和我一样希望添加这个功能,请去issue并投票支持它,开发人员说他们需要一堆投票才能考虑。

wvt8vs2t

wvt8vs2t1#

这不是官方支持的,但可以有变通方法。
来自janosh在GitHub上的回复:
有一个设置editor.codeActionsOnSave,但它不允许运行任意shell命令(出于安全原因?),所以你需要安装一个扩展,如Run On Save,并让它在保存事件时调用black path/to/file.ipynb
遗憾的是,由于VS Code还没有公开笔记本的生命周期事件,因此现在还不起作用。Improve workspace API for Notebook lifecycle to support (at least) saving events
如果两者都实现了,你应该能够将其添加到你的设置中,以自动格式化Jupyter笔记本:

"emeraldwalk.runonsave": {
  "commands": [
    {
      "match": "\\.ipynb$",
      "cmd": "black ${file}"
    }
  ]
}
jv2fixgn

jv2fixgn2#

一个足够简单的解决方案是将format notebook选项设置为与保存相同的keybinding,就像你建议的那样。下面是你如何使用VSCode Tasks来做到这一点:
tasks.json(在命令选项板“任务:打开用户任务”):

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cmd:save",
            "command": "${command:workbench.action.files.save}"
        },
        {
            "label": "cmd:format-notebook",
            "command": "${command:notebook.format}"
        },
        {
            "label": "cmd:format-notebook+save",
            "dependsOrder": "sequence",
            "dependsOn": [
                "cmd:format-notebook",
                "cmd:save"
            ]
        }
    ]
}

keybindings.json(在命令选项板“首选项:打开键盘快捷键(JSON)”):

[
    {
        "key": "ctrl+s",
        "command": "workbench.action.tasks.runTask",
        "args": "cmd:format-notebook+save"
    }
]
8yoxcaq7

8yoxcaq73#

目前还没有关于Github的计划。

5jdjgkvh

5jdjgkvh4#

好消息!这是最新的VSCode版本(1.77)中的一个选项
设置"notebook.formatOnSave.enabled": true就可以了
您可以在这里阅读更多信息。
如果你已经为Python启用了black,它应该可以正常工作。

相关问题