Commands and shortcuts
Every menu item, toolbar button and shortcut in Studio runs a command. You can run any command from the command palette and give any command your own shortcut.
Default shortcuts
"—" means no default shortcut; you can assign one. The command ID is only needed if you edit the shortcuts file by hand.
Files and documents
| Command | Shortcut | ID |
|---|---|---|
| File: Open Project | Ctrl+O | workspace.file.openProject |
| File: Save | Ctrl+S | workspace.file.save |
| File: Save All | Ctrl+Shift+S | workspace.file.saveAll |
| File: Revert / Reload | — | workspace.file.reloadDocument |
| File: Close Editor | Ctrl+W | workspace.file.closeDocument |
| File: Close All Editors | Ctrl+Shift+W | workspace.file.closeAllDocuments |
| File: Close Project | — | workspace.file.closeProject |
| File: Settings | — | workspace.settings |
| Editor: Switch Recent Tabs | Ctrl+Tab | studio.editor.recent-tabs |
Editing and search
| Command | Shortcut | ID |
|---|---|---|
| Edit: Undo | Ctrl+Z | workspace.edit.undo |
| Edit: Redo | Ctrl+Y | workspace.edit.redo |
| Edit: Cut | Ctrl+X | workspace.edit.cut |
| Edit: Copy | Ctrl+C | workspace.edit.copy |
| Edit: Paste | Ctrl+V | workspace.edit.paste |
| Edit: Select All | Ctrl+A | workspace.edit.selectAll |
| Edit: Find | Ctrl+F | workspace.edit.find |
| Edit: Find Next | F3 | workspace.edit.findNext |
| Edit: Find Previous | Shift+F3 | workspace.edit.findPrevious |
While you paint a texture map in the Material Editor, Save, Undo and Redo apply to the map, and Ctrl+Shift+Z also redoes.
Code navigation
| Command | Shortcut | ID |
|---|---|---|
| Code: Complete | Ctrl+Space | studio.code.complete |
| Code: Go to Definition | F12 | studio.code.definition |
| Code: Find Usages | Shift+F12 | studio.code.usages |
| Code: Inspect Symbol | — | studio.code.inspect |
| Code: Toggle Language Servers | — | studio.code.toggle |
See Code intelligence.
Running and building
| Command | Shortcut | ID |
|---|---|---|
| Game: Play | Ctrl+F5 | workspace.run.play |
| Game: Stop | Shift+F5 | workspace.run.stop |
| Build: Build | Ctrl+B | studio.build.build |
| Build: Rebuild | Ctrl+Shift+B | studio.build.rebuild |
| Build: Build Settings | — | studio.build.settings |
See Play and debug and Building from Studio.
Debugging
| Command | Shortcut | ID |
|---|---|---|
| Debug: Toggle Breakpoint | F9 | studio.debug.breakpoint |
| Debug: Continue | F5 | studio.debug.continue |
| Debug: Pause | Shift+F7 | studio.debug.pause |
| Debug: Step Over | F10 | studio.debug.next |
| Debug: Step In | F11 | studio.debug.stepIn |
| Debug: Step Out | Shift+F11 | studio.debug.stepOut |
| Debug: Start BT | F6 | studio.debug.start |
| Debug: Stop | Shift+F6 | studio.debug.stop |
Debug: Start BT debugs a single script or program outside Play; to debug your game, choose Debug and press Play. See Play and debug.
Views and layout
| Command | Shortcut | ID |
|---|---|---|
| View: Move Active View Left | Ctrl+Alt+1 | workspace.view.moveLeft |
| View: Move Active View to Editor | Ctrl+Alt+0 | workspace.view.moveDocument |
| View: Move Active View Right | Ctrl+Alt+2 | workspace.view.moveRight |
| View: Move Active View to Bottom | Ctrl+Alt+3 | workspace.view.moveBottom |
| View: Move Tab Earlier | Ctrl+Alt+PgUp | workspace.view.movePrevious |
| View: Move Tab Later | Ctrl+Alt+PgDn | workspace.view.moveNext |
| View: Reset Layout | — | workspace.view.resetLayout |
| View: view name (one per view) | — | view.show.<view> |
| Command Palette | Ctrl+Shift+P | workspace.commandPalette |
| Keyboard Shortcuts | — | workspace.keybindings |
Plugins and editor choice
| Command | Shortcut | ID |
|---|---|---|
| Plugins: Reload | Ctrl+Alt+R | plugins.reload |
| Document: Open With | — | document.open-with |
| Document: Open in Source Editor | — | document.open-source |
| Document: Open With · editor name | — | one per plugin editor |
See Studio plugins.
When commands are disabled
A command is disabled when it cannot run right now, for example Save with nothing to save or Step Over while the debugger is not paused. Disabled commands still appear in menus and the palette. A disabled command's shortcut does nothing, so the key goes to whatever has focus. This is why F5 refreshes Explorer except while the debugger is paused.
Shortcuts assigned to commands take priority over the focused view and the running game. All other keys go to the focused view or game.
Command palette
Press Ctrl+Shift+P (or Help > Command Palette) and type to search every command, including View: commands for every view.
| Key | Action |
|---|---|
| Typing | Filters the list. Every word you type must appear in the command's name; case is ignored. |
| Up / Down, Tab / Shift+Tab | Move the selection. |
| PgUp / PgDn | Move by a page. |
| Enter, or click | Run the command. |
| Escape, Ctrl+Shift+P, or click outside | Close the palette. |
Recently used commands are listed first. Each row shows the command's shortcut when the window is wide enough. Commands that cannot run right now stay in the list but do nothing.
Changing shortcuts
Open Keyboard Shortcuts from the command palette or from the button in File > Settings. Commands are grouped by the word before the colon in their name.
| Control | Action |
|---|---|
| Shortcut field | Filters commands. |
| Click a row, Up / Down | Selects a command. The status line shows its current shortcut. |
| Record shortcut, or Enter | Press the new key combination. Escape cancels. |
| Clear shortcut | Removes the command's shortcut. |
| Restore default | Puts back the default shortcut. |
You can record:
- a letter, digit, symbol or Space together with Ctrl, Alt or Super (Shift optional);
- F1–F25, with or without modifiers;
- Tab with at least one modifier;
- Ctrl+Alt+PgUp or Ctrl+Alt+PgDn.
You cannot record plain keys, arrows, Enter, Escape or the backtick key (which opens the engine console). If another command already uses the shortcut, Studio tells you which one; clear or change that command first.
Changes apply immediately and are saved in your user shortcuts file (see Studio settings files). Only shortcuts you changed are saved. Shortcuts for plugin commands are kept even while that plugin is not loaded.