[英]Running Anaconda Command From Visual Studio Code's power shell
[英]Bind a keypress to a shell command that uses the current file in visual studio code
有没有办法创建一个键绑定来对文件执行 shell 命令? 就像是:
{
"key": "ctrl+shift+e",
"command": "run",
"command": "touch $file",
"when": "editorTextFocus"
}
我不想使用任务,因为这需要对整个编辑器是全局的,而不是特定的工作区。
[请参阅下面的编辑 - 现在更容易做到。]
我想出了一种方法来做你想做的事,但这有点像黑客。 您可能知道,如果您可以在 .vscode/tasks.json 中创建任务并使用类似以下内容,则绑定任务很容易:
{
"key": "shift+escape",
"command": "workbench.action.tasks.runTask",
"args": "Start server and process files"
},
在没有预先存在的任务的情况下通过键绑定运行脚本要复杂得多。 但是,您可以尝试以下利用"workbench.action.terminal.runSelectedText",
命令的方法。 但是我们需要先将脚本放入选择中,因此:
使用宏扩展(有点粗糙),以便我们可以将多个命令联系在一起。 在您的用户设置中:
"runCommandInTerminal": [
{
"command": "type",
"args": {
"text": "node -v"
}
},
{
"command": "cursorMove",
"args": {
"to": "wrappedLineStart",
"by": "wrappedLine",
"value": 1,
"select": true
}
},
"workbench.action.terminal.runSelectedText",
"editor.action.clipboardCutAction",
// "workbench.action.terminal.focus"
],
这是设置"runCommandInTerminal"
的一般示例,然后您可以将其绑定到 keybindings.json 中您希望的任何键和弦,例如
{
"key": "ctrl+shift+e",
"command": "macros.runCommandInTerminal"
},
您的示例有点难,因为您想访问${file}
,而您在设置中无法访问,只能访问 tasks.json 和 launch.json。 幸运的是,有一个命令可以获取当前文件: "copyFilePath"
。 所以试试
"runCommandInTerminal": [
"copyFilePath",
{
"command": "type",
"args": {
"text": "touch "
}
},
"editor.action.clipboardPasteAction",
{
"command": "cursorMove",
"args": {
"to": "wrappedLineStart",
"by": "wrappedLine",
"value": 1,
"select": true
}
},
"workbench.action.terminal.runSelectedText",
"editor.action.clipboardCutAction",
// "workbench.action.terminal.focus"
],
首先获取文件路径,然后输出脚本命令的第一部分“ touch
”。
接下来将文件路径附加到命令的末尾。
移动光标选择前面的。
在终端中运行选择。
从编辑器中剪切选择。
这可以与您的键绑定一起运行。 您将看到正在键入和剪切脚本的闪光,但您的编辑器代码不会受到影响。 最好从编辑器中的空白行运行它,但如果您愿意,也可以从不相关代码行的开头运行它(但现在缩进可能会丢失)。
这是hacky,但似乎工作。 我很想知道是否有扩展或其他方式来做这个清洁工。
2019 年 5 月编辑:
由于我的原始答案(如@Jeff 所示)vscode 添加了sendSequence
命令。 以及在该命令中使用变量的能力。 所以现在OP的问题更容易完成:
{
"key": "alt+x",
"command": "workbench.action.terminal.sendSequence",
"args": {"text": "touch ${file}"}
}
在您的 keybindings.json 文件中。 使用 sendSequnce 命令查看变量。
在这里使用 Marks 回答我可以解决我使用一些快捷方式运行 android 命令的情况。 之后我决定在我的 GitHub 上创建一个指南,希望能有所帮助。
GitHub: LucasMMota
{
//... other configs you could have "macros": { "runCommandInTerminal": [ "editor.action.insertLineAfter", // go to new line below { "command": "type", "args": { "text": "adb shell input text \\"RR\\" " // exec cmd to reload android device (could be any else) } }, // select text typed above { "command": "cursorMove", "args": { "to": "wrappedLineStart", "by": "wrappedLine", "value": 1, "select": true } }, "workbench.action.terminal.runSelectedText", //run command "editor.action.clipboardCutAction", // remove cmd typed //"editor.action.deleteLines", //couldn't use. When uncommented, command doesn't work ], }
}
{
"key": "alt+s",
“命令”:“宏。runCommandInTerminal”
}
keybindings.json
:
{
"key": "cmd+s",
"command": "macros.saveContentAndIndent",
"when": "editorTextFocus && !editorReadonly"
},
User Settings
:
"macros": {
"saveContentAndIndent": [
"editor.action.formatDocument", // format
"workbench.action.files.save", // as I used Save shorcut, I add the save bind again.
],
//....
}
更新 2 :
VS Code 现在为集成终端命令提供变量。 https://code.visualstudio.com/updates/v1_32#_variable-support-in-send-sequence-command
如果您想做更强大的任务,例如在后台运行它们(而不是仅向当前终端发送文本),请获取Command Runner或macro-commander扩展
原文:
我创建了一个扩展macro-commander
来使用非hacky解决方案来解决这个问题。 它是macros
扩展的改进版本,按顺序(同步)运行命令,并允许您将文件路径/文件夹路径注入命令。 命令可以在用户的 VS Code 终端或隐藏的后台终端中运行。
更新 1 :
到今天(几个月后)我意识到,令我沮丧的是,有一个现有的扩展可能可以做你(和我)想要的。 它是edonet编写的Command Runner 。 如果我知道这件事,我可能永远不会延期。
Command Runner 没有那么多通用的可能性(多个命令、用户输入或 javascript),但它具有更好的 UX,并且可能是您(读者)应该首先尝试的扩展。 但是,如果 Command Runner 不能执行您想要的操作,那么宏指令器可能可以,尽管不够优雅。
每当我决定对宏命令进行全面更新时,我都会与 edonet 交谈,看看我们是否可以将功能组合/添加到他的扩展中,在这种情况下,我将更新宏命令自述文件以重定向到他/她延期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.