在 VsCode 中的按键上执行 bat 文件
Execute a bat file on keypress in VsCode
我正在为 vulkan 编写着色器,必须将其编译到 spir-v 中。我有一个非常好的批处理文件,它将使用 GLSlangvalidator 为我构建着色器。我正在尝试按下 运行 我在 VsCode 中的批处理文件,这样我就可以检查我的代码是否有错误,以便构建它。我有以下内容:
{
"key": "f5",
"label": "build",
"type": "shell",
"command": "workbench.action.terminal.sendSequence",
"args" : {"text": ".\compile.bat"},
"presentation" : {
"reveal": "always"
}
这几乎可以工作 - 但我仍然必须专注于内置终端面板并按 Enter 键。肯定有一种方法可以执行命令,而不是只输入字符串吗?
谢谢!
在tasks.json
中,创建一个任务到运行 .bat
。像这样:
{
"label": "MY_TASK",
"type": "shell",
"command": "MY_BAT_FILE.bat",
"presentation": {"echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": false, "clear": true},
"group": {"kind": "build", "isDefault": true},
},
然后,使用 Tasks: Run Build Task
热键 (CtrlShiftB默认)。
您可以有多个这样的任务。
最多一个任务可以有"isDefault": true
,CtrlShiftB 应该 运行.
您可以为这些任务分配自定义热键,方法是在您的 keybindings.json
中添加以下内容:
{"key": "f5", "command": "workbench.action.tasks.runTask", "args": "MY_TASK"},
// ^~ key ^~~~~~~ task name
{
"key": "alt+5",
// "label": "build", // no effect in a keybinding
// "type": "shell", // no effect in a keybinding
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": ".//test.bat\u000D"
// },
// "presentation": { // no effect in a keybinding
// "reveal": "always"
// },
},
我注释掉的那些键和值在这个键绑定中没有作用。他们会去完成一项任务。如果这些对您很重要,那么您应该采用其他答案中的任务方法。如果你想用 presentation
做的只是确保终端打开,你可以在宏键绑定中将 sendSequence
调用与 terminal.focus
结合起来,如:
{
"key": "alt+3",
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
"terminal.focus",
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": ".//test.bat\u000D"
}
}
]
},
}
否则你已经非常接近你的初始键绑定了。使用unicode字符\u000D
在发送到终端的文本末尾添加一个return,它会立即运行。
因此,如果您在触发键绑定之前或之后手动打开终端,这就足够了:
{
"key": "alt+5",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": ".//test.bat\u000D" // these path separators work for me on Windows
}
}
我正在为 vulkan 编写着色器,必须将其编译到 spir-v 中。我有一个非常好的批处理文件,它将使用 GLSlangvalidator 为我构建着色器。我正在尝试按下 运行 我在 VsCode 中的批处理文件,这样我就可以检查我的代码是否有错误,以便构建它。我有以下内容:
{
"key": "f5",
"label": "build",
"type": "shell",
"command": "workbench.action.terminal.sendSequence",
"args" : {"text": ".\compile.bat"},
"presentation" : {
"reveal": "always"
}
这几乎可以工作 - 但我仍然必须专注于内置终端面板并按 Enter 键。肯定有一种方法可以执行命令,而不是只输入字符串吗? 谢谢!
在tasks.json
中,创建一个任务到运行 .bat
。像这样:
{
"label": "MY_TASK",
"type": "shell",
"command": "MY_BAT_FILE.bat",
"presentation": {"echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": false, "clear": true},
"group": {"kind": "build", "isDefault": true},
},
然后,使用 Tasks: Run Build Task
热键 (CtrlShiftB默认)。
您可以有多个这样的任务。
最多一个任务可以有"isDefault": true
,CtrlShiftB 应该 运行.
您可以为这些任务分配自定义热键,方法是在您的 keybindings.json
中添加以下内容:
{"key": "f5", "command": "workbench.action.tasks.runTask", "args": "MY_TASK"},
// ^~ key ^~~~~~~ task name
{
"key": "alt+5",
// "label": "build", // no effect in a keybinding
// "type": "shell", // no effect in a keybinding
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": ".//test.bat\u000D"
// },
// "presentation": { // no effect in a keybinding
// "reveal": "always"
// },
},
我注释掉的那些键和值在这个键绑定中没有作用。他们会去完成一项任务。如果这些对您很重要,那么您应该采用其他答案中的任务方法。如果你想用 presentation
做的只是确保终端打开,你可以在宏键绑定中将 sendSequence
调用与 terminal.focus
结合起来,如:
{
"key": "alt+3",
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
"terminal.focus",
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": ".//test.bat\u000D"
}
}
]
},
}
否则你已经非常接近你的初始键绑定了。使用unicode字符\u000D
在发送到终端的文本末尾添加一个return,它会立即运行。
因此,如果您在触发键绑定之前或之后手动打开终端,这就足够了:
{
"key": "alt+5",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": ".//test.bat\u000D" // these path separators work for me on Windows
}
}