我可以在 VS Code 中保存文件时自动执行 2 个单独的命令吗?
1. 设置焦点文档的格式
2. 对文件导入进行排序
默认不支持在保存 (onSave) 时运行任务或命令。但是,通过 VSCode 扩展“保存时运行”有第 3 方支持。
这是链接:https://marketplace.visualstudio.com/items?itemName=emeraldwalk.RunOnSave
这是一个非常流行的扩展,我不久前使用过它,它非常适合我的用例。
此外,如果您只想在保存时检查代码或格式化代码,可以通过 VSCode 设置来完成。
如果要将命令添加到设置中,则必须配置扩展,扩展 README.md 中对此进行了说明,可以通过单击 VSCode 扩展资源管理器中的扩展图标进行查看。
将“emeraldwalk.runonsave”配置添加到用户或工作区设置。
注意由于这是一个正则表达式,并且在 JSON 字符串中,反斜杠必须进行双重转义,例如在定位文件夹时。例如"match": "某个\\文件夹\\.*"
此示例配置将运行 echo 语句,包括保存的文件路径。 在此示例中,第一个命令是异步的,因此即使第一个命令尚未完成,第二个命令也会立即执行。 由于第二个命令不是异步的,因此在第二个命令完成之前,第三个命令不会执行。
"emeraldwalk.runonsave": {
"commands": [
{
"match": ".*",
"isAsync": true,
"cmd": "echo 'I run for all files.'"
},
{
"match": "\\.txt$",
"cmd": "echo 'I am a .txt file ${file}.'"
},
{
"match": "\\.js$",
"cmd": "echo 'I am a .js file ${file}.'"
},
{
"match": ".*",
"cmd": "echo 'I am ${env.USERNAME}.'"
}
]
}
配置保存时执行的命令并不像按 [F1] 打开快速输入并找到要运行的扩展任务那么简单。您必须按照说明进行操作,当您遇到困难时,您可能必须返回并询问有关您遇到的问题的问题,或者通过谷歌进行搜索;如果您是 Linux 用户,或者您有丰富的 MS-Dos 或 Powershell 经验,这将非常简单。
正如我在评论中指出的,有许多“保存时运行”扩展。这是一个将运行外部命令的命令,例如来自扩展的命令。而且它似乎比某些更新且维护得更好。
设置示例:
"runItOn": {
"commands": [
{
"match": ".*",
"isShellCommand" : false,
"cmd": "myExtension.amazingCommand"
},
{
"match": "\\.txt$",
"cmd": "echo 'Executed in the terminal: I am a .txt file ${file}.'"
}
],
"watchers": [
{
"match": "**/*.js",
"cmd": "echo 'Changes detected on js files.'"
}
]
}
myExtension.amazingCommand
就是您正在寻找的。
请注意所提供的答案:
如果您使用 Python,VSCode 中的
Run on Save
扩展(以及任何与此相关的 tasks.json
)看不到(自动识别)工作区中的任何活动虚拟环境。
在激活环境之前,所有命令都像从当前工作目录中的 shell 运行一样。 (如果你仔细想想,认为是有道理的,因为它不知道你要运行什么语言/程序)
要在虚拟环境的上下文中运行 python 命令进行保存,请首先手动激活它:
"cmd": ".venv\\Scripts\\activate.bat && py -m your_script.py"
否则,使用全局python安装。如果您使用来自第 3 方包的命令(例如
pyupgrade
)并且您的全局 python 中没有安装该命令,则不会运行任何内容。更糟糕的是,如果您安装了多个 python 并且都安装了该软件包,则运行的软件包是来自全局 python 的软件包,这可能不是您想要的。
https://marketplace.visualstudio.com/items?itemName=emeraldwalk.RunOnSave。
如何使上述扩展工作:为了查看控制台输出,您必须位于“输出”选项卡中,并在下拉列表中选择“保存时运行”选项。该扩展是在集成终端存在之前创建的,并且已经有一段时间没有看到重大更新了。