Is there a way to make a hotkey for running specific command in terminal? Say I want to compile my TypeScript files by hotkey and not to type to terminal "tsc" or any other variation of that command. (Edit: I know it is possible to recompile TS on save, but the question is still the same)
-
if you use a tool like webpack, your typescript file will be recompiled anytime you save – Thomas Oct 12 '18 at 19:54
5 Answers
Typically you would set up a build or another task or an npm script and then trigger that with a hotkey.
There is another new way to do it with send text to the terminal.
For example, try this in your keybindings (Preferences: Open Keyboard Shortcuts (JSON)):
{
"key": "ctrl+alt+u",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "node -v\u000D"
}
}
for an npm script:
{
"key": "ctrl+alt+u",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "npm run-script test\u000D"
}
}
The first will run the node -v
command (the \u000D
is a return so it runs). I still recommend actually setting up a build task though, and then there are keychords for running your build task: Ctrl-shift-B. Or an npm script.
For example, if you had a more complex script to run, see how to bind a task to a keybinding or how to keybind an external command.
EDIT: As of v1.32 you can now do something like this:
{
"key": "ctrl+shift+t",
"command": "workbench.action.terminal.sendSequence",
"args": { "text": "tsc '${file}'\u000D" }
}
You can now use the built-in variables, like ${file}
, with the sendSequence
command in a keybinding. I wrapped ${file}
in single quotes in case your directory structure has a folder with a space in the name. And \u000D
is a return.
-
7Only downside to this is the keyboard shortcut fails silently if no terminal is open yet. – Leeroy Oct 25 '19 at 15:44
-
is it possible to run sequence of commands via single shortcut? e.g. "open new terminal" && "run command" – godblessstrawberry May 11 '21 at 14:48
-
1@godblessstrawberry With a macro extension yes. See multi-command extension. – Mark May 11 '21 at 14:51
-
1@godblessstrawberry it is possible to run multiple commands. see my answer below. i did not try your exact sequence but should be doable. – Ross Bencina Jun 24 '23 at 09:40
You can accomplish this with VSCode tasks
and then wire up your task to a keybinding. The downside to this approach is you have to have a tasks.json
file in your workspace .vscode
folder (it can't be global).
Here is an example where I wanted to open a file in a custom GitHub remote:
// tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Open in remote",
"type": "shell",
"command": "open https://github.custom.com/org/repo/blob/master/${relativeFile}#L${lineNumber}"
}
]
}
// keybindings.json
{
"key": "ctrl+o",
"command": "workbench.action.tasks.runTask",
"args": "Open in remote"
},
Here are some more VS Code variables you can use if you are curious: https://code.visualstudio.com/docs/editor/variables-reference
There is a long standing issue open here which should make this easier to do without tasks: https://github.com/microsoft/vscode/issues/871

- 5,193
- 4
- 30
- 59

- 4,355
- 2
- 29
- 38
-
see also assign task to prelaunchtask in launch configuration: https://stackoverflow.com/questions/43836861/how-to-run-a-command-in-vs-code-with-launch-json – Hawkeye Parker Nov 30 '19 at 22:06
I don't think vscode by default can do this, but you can try this extension. That work for me.
https://marketplace.visualstudio.com/items?itemName=mkloubert.vs-script-commands

- 5,811
- 8
- 29
- 42
in addition to @mark ..
"args": { "text": "npm run-script test | tee /dev/null \u000D" }
this way it will run any script including bash scripts, that doesn't conflict to their arguments (e.g try rsync without the tee)

- 21
- 2
As a variation on the accepted answer, note that it is also possible to set up hot-keys that run multiple commands. Below is one that saves the current document, and moves the cursor, prior to invoking a script that operates on it. Open keybindings.json
using "Open Keyboard Shortcuts (JSON)" and you could for example insert:
{
"key": "ctrl+shift+enter",
"command": "runCommands",
"args": {
"commands": [
"workbench.action.files.save",
"cursorBottom",
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "py -3 myscript.py ${file}\u000D"
}
},
]
},
"when": "editorLangId == markdown"
},

- 3,822
- 1
- 19
- 33