好消息!在最新的VSCode版本(1.77)中,现在有了这个选项
设置"notebook.formatOnSave.enabled": true
就可以解决问题了
您可以在这里阅读更多相关信息。
如果您已经为Python启用了black
,那么它应该可以正常工作。
editor.codeActionsOnSave
,但它不允许运行任意shell命令(出于安全原因?),所以您需要安装像Run On Save这样的扩展,并让它在保存事件时调用black path/to/file.ipynb
。"emeraldwalk.runonsave": {
"commands": [
{
"match": "\\.ipynb$",
"cmd": "black ${file}"
}
]
}
一个简单的解决方案是将notebook格式选项设置为与保存相同的键绑定,就像您建议的那样。以下是如何使用VSCode任务进行操作:
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"
}
]
"key": "cmd+s"
。 - Salvatore感谢wossname提出这个问题。它非常有效。不幸的是,我无法直接回复您的帖子。
只需注意一件事:在Mac上工作时,在keybingdings.json
中需要调整key
。 在那里,它需要是:
[
{
"key": "cmd+s",
"command": "workbench.action.tasks.runTask",
"args": "cmd:format-notebook+save"
}
]
keybindings.json
中,当您按下 ctrl+s 时,它应该会在 Jupyter 笔记本上同时运行 format cell
和 save file
。{
"key": "ctrl+s",
"command": "runCommands",
"args": {
"commands": ["notebook.formatCell","workbench.action.files.save",]
},
"when": "editorHasDocumentFormattingProvider && editorTextFocus && inCompositeEditor && notebookEditable && !editorReadonly && activeEditor == 'workbench.editor.notebook'"
},
相反地,如果您想在保存时保存整个笔记本,则可以将notebook.formatCell
替换为notebook.format
。
pip install 'black[jupyter]'
。 - Mehvix