VS code
https://code.visualstudio.com/docs/customization/keybindings
Key Bindings for Visual Studio Code
Visual Studio Code lets you perform most tasks directly from the keyboard. This page lists out the default bindings and describes how you can update them.
Note: If you visit this page on a Mac, you will see the key bindings for the Mac. If you visit using Windows or Linux, you will see the keys for that OS. If you need the key binding for another OS, hover your mouse over the key you are interested in.
Note: The following keys are rendered assuming a standard US keyboard layout. If you use a different keyboard layout, please read below.
Basic Editing
Key | Command | Command id |
---|---|---|
Ctrl+X | Cut line (empty selection) | editor.action.clipboardCutAction |
Ctrl+C | Copy line (empty selection) | editor.action.clipboardCopyAction |
Ctrl+Shift+K | Delete Line | editor.action.deleteLines |
Ctrl+Enter | Insert Line Below | editor.action.insertLineAfter |
Ctrl+Shift+Enter | Insert Line Above | editor.action.insertLineBefore |
Alt+Down | Move Line Down | editor.action.moveLinesDownAction |
Alt+Up | Move Line Up | editor.action.moveLinesUpAction |
Shift+Alt+Down | Copy Line Down | editor.action.copyLinesDownAction |
Shift+Alt+Up | Copy Line Up | editor.action.copyLinesUpAction |
Ctrl+D | Add Selection To Next Find Match | editor.action.addSelectionToNextFindMatch |
Ctrl+K Ctrl+D | Move Last Selection To Next Find Match | editor.action.moveSelectionToNextFindMatch |
Ctrl+U | Undo last cursor operation | cursorUndo |
Shift+Alt+I | Insert cursor at end of each line selected | editor.action.insertCursorAtEndOfEachLineSelected |
Ctrl+Shift+L | Select all occurrences of current selection | editor.action.selectHighlights |
Ctrl+F2 | Select all occurrences of current word | editor.action.changeAll |
Ctrl+I | Select current line | expandLineSelection |
Ctrl+Alt+Down | Insert Cursor Below | editor.action.insertCursorBelow |
Ctrl+Alt+Up | Insert Cursor Above | editor.action.insertCursorAbove |
Ctrl+Shift+\ | Jump to matching bracket | editor.action.jumpToBracket |
Ctrl+] | Indent Line | editor.action.indentLines |
Ctrl+[ | Outdent Line | editor.action.outdentLines |
Home | Go to Beginning of Line | cursorHome |
End | Go to End of Line | cursorEnd |
Ctrl+End | Go to End of File | cursorBottom |
Ctrl+Home | Go to Beginning of File | cursorTop |
Ctrl+Down | Scroll Line Down | scrollLineDown |
Ctrl+Up | Scroll Line Up | scrollLineUp |
Alt+PageDown | Scroll Page Down | scrollPageDown |
Alt+PageUp | Scroll Page Up | scrollPageUp |
Ctrl+Shift+[ | Fold (collapse) region | editor.fold |
Ctrl+Shift+] | Unfold (uncollapse) region | editor.unfold |
Ctrl+K Ctrl+[ | Fold (collapse) all subregions | editor.foldRecursively |
Ctrl+K Ctrl+] | Unfold (uncollapse) all subregions | editor.unfoldRecursively |
Ctrl+K Ctrl+0 | Fold (collapse) all regions | editor.foldAll |
Ctrl+K Ctrl+J | Unfold (uncollapse) all regions | editor.unfoldAll |
Ctrl+K Ctrl+C | Add Line Comment | editor.action.addCommentLine |
Ctrl+K Ctrl+U | Remove Line Comment | editor.action.removeCommentLine |
Ctrl+/ | Toggle Line Comment | editor.action.commentLine |
Shift+Alt+A | Toggle Block Comment | editor.action.blockComment |
Ctrl+F | Find | actions.find |
Ctrl+H | Replace | editor.action.startFindReplaceAction |
F3 | Find Next | editor.action.nextMatchFindAction |
Shift+F3 | Find Previous | editor.action.previousMatchFindAction |
Alt+Enter | Select All Occurences of Find Match | editor.action.selectAllMatches |
Alt+C | Toggle Find Case Sensitive | toggleFindCaseSensitive |
Alt+R | Toggle Find Regex | toggleFindRegex |
Alt+W | Toggle Find Whole Word | toggleFindWholeWord |
Ctrl+M | Toggle Use of Tab Key for Setting Focus | editor.action.toggleTabFocusMode |
unassigned | Toggle Render Whitespace | toggleRenderWhitespace |
Rich Languages Editing
Key | Command | Command id |
---|---|---|
Ctrl+Space | Trigger Suggest | editor.action.triggerSuggest |
Ctrl+Shift+Space | Trigger Parameter Hints | editor.action.triggerParameterHints |
Shift+Alt+F | Format Code | editor.action.format |
F12 | Go to Definition | editor.action.goToDeclaration |
Alt+F12 | Peek Definition | editor.action.previewDeclaration |
Ctrl+K F12 | Open Definition to the Side | editor.action.openDeclarationToTheSide |
Ctrl+. | Quick Fix | editor.action.quickFix |
Shift+F12 | Show References | editor.action.referenceSearch.trigger |
F2 | Rename Symbol | editor.action.rename |
Ctrl+Shift+. | Replace with Next Value | editor.action.inPlaceReplace.down |
Ctrl+Shift+, | Replace with Previous Value | editor.action.inPlaceReplace.up |
Shift+Alt+Right | Expand AST Select | editor.action.smartSelect.grow |
Shift+Alt+Left | Shrink AST Select | editor.action.smartSelect.shrink |
Ctrl+K Ctrl+X | Trim Trailing Whitespace | editor.action.trimTrailingWhitespace |
Ctrl+K M | Change Language Mode | workbench.action.editor.changeLanguageMode |
Navigation
Key | Command | Command id |
---|---|---|
Ctrl+T | Show All Symbols | workbench.action.showAllSymbols |
Ctrl+G | Go to Line... | workbench.action.gotoLine |
Ctrl+P | Go to File..., Quick Open | workbench.action.quickOpen |
Ctrl+Shift+O | Go to Symbol... | workbench.action.gotoSymbol |
Ctrl+Shift+M | Show Problems | workbench.actions.view.problems |
F8 | Go to Next Error or Warning | editor.action.marker.next |
Shift+F8 | Go to Previous Error or Warning | editor.action.marker.prev |
Ctrl+Shift+P | Show All Commands | workbench.action.showCommands |
Ctrl+Shift+Tab | Navigate Editor Group History | workbench.action.openPreviousRecentlyUsedEditorInGroup |
Alt+Left | Go Back | workbench.action.navigateBack |
Alt+Right | Go Forward | workbench.action.navigateForward |
Editor/Window Management
Key | Command | Command id |
---|---|---|
Ctrl+Shift+N | New Window | workbench.action.newWindow |
Ctrl+W | Close Window | workbench.action.closeWindow |
Ctrl+F4 | Close Editor | workbench.action.closeActiveEditor |
Ctrl+K F | Close Folder | workbench.action.closeFolder |
unassigned | Cycle Between Editor Groups | workbench.action.navigateEditorGroups |
Ctrl+\ | Split Editor | workbench.action.splitEditor |
Ctrl+1 | Focus into Left Editor Group | workbench.action.focusFirstEditorGroup |
Ctrl+2 | Focus into Side Editor Group | workbench.action.focusSecondEditorGroup |
Ctrl+3 | Focus into Right Editor Group | workbench.action.focusThirdEditorGroup |
Ctrl+K Ctrl+Left | Focus into Editor Group on the Left | workbench.action.focusPreviousGroup |
Ctrl+K Ctrl+Right | Focus into Editor Group on the Right | workbench.action.focusNextGroup |
Ctrl+K Left | Move Active Editor Group Left | workbench.action.moveActiveEditorGroupLeft |
Ctrl+K Right | Move Active Editor Group Right | workbench.action.moveActiveEditorGroupRight |
File Management
Key | Command | Command id |
---|---|---|
Ctrl+N | New File | workbench.action.files.newUntitledFile |
Ctrl+O | Open File... | workbench.action.files.openFile |
Ctrl+S | Save | workbench.action.files.save |
unassigned | Save All | workbench.action.files.saveAll |
Ctrl+Shift+S | Save As... | workbench.action.files.saveAs |
Ctrl+F4 | Close | workbench.action.closeActiveEditor |
unassigned | Close Others | workbench.action.closeOtherEditors |
Ctrl+K W | Close Group | workbench.action.closeEditorsInGroup |
unassigned | Close Other Groups | workbench.action.closeEditorsInOtherGroups |
unassigned | Close Group to Left | workbench.action.closeEditorsToTheLeft |
unassigned | Close Group to Right | workbench.action.closeEditorsToTheRight |
Ctrl+K Ctrl+W | Close All | workbench.action.closeAllEditors |
Ctrl+K Enter | Keep Open | workbench.action.keepEditor |
Ctrl+Tab | Open Next | workbench.action.openNextRecentlyUsedEditorInGroup |
Ctrl+Shift+Tab | Open Previous | workbench.action.openPreviousRecentlyUsedEditorInGroup |
Ctrl+K P | Copy Path of Active File | workbench.action.files.copyPathOfActiveFile |
Ctrl+K R | Reveal Active File in Windows | workbench.action.files.revealActiveFileInWindows |
Ctrl+K O | Show Opened File in New Window | workbench.action.files.showOpenedFileInNewWindow |
unassigned | Compare Opened File With | workbench.files.action.compareFileWith |
Display
Key | Command | Command id |
---|---|---|
F11 | Toggle Full Screen | workbench.action.toggleFullScreen |
Ctrl+= | Zoom in | workbench.action.zoomIn |
Ctrl+- | Zoom out | workbench.action.zoomOut |
unassigned | Reset Zoom | workbench.action.zoomReset |
Ctrl+B | Toggle Sidebar Visibility | workbench.action.toggleSidebarVisibility |
Ctrl+Shift+D | Show Debug | workbench.view.debug |
Ctrl+Shift+E | Show Explorer / Toggle Focus | workbench.view.explorer |
Ctrl+Shift+G | Show Git | workbench.view.git |
Ctrl+Shift+F | Show Search | workbench.view.search |
Ctrl+Shift+H | Replace in Files | workbench.action.replaceInFiles |
Ctrl+Shift+X | Show Extensions | workbench.view.extensions |
Ctrl+Shift+J | Toggle Search Details | workbench.action.search.toggleQueryDetails |
Ctrl+Shift+C | Open New Command Prompt | workbench.action.terminal.openNativeConsole |
Ctrl+Shift+U | Show Output | workbench.action.output.toggleOutput |
Ctrl+Shift+V | Toggle Markdown Preview | markdown.showPreview |
Ctrl+K V | Open Preview to the Side | markdown.showPreviewToSide |
Ctrl+` | Toggle Integrated Terminal | workbench.action.terminal.toggleTerminal |
Preferences
Key | Command | Command id |
---|---|---|
unassigned | Open User Settings | workbench.action.openGlobalSettings |
unassigned | Open Workspace Settings | workbench.action.openWorkspaceSettings |
unassigned | Open Keyboard Shortcuts | workbench.action.openGlobalKeybindings |
unassigned | Open User Snippets | workbench.action.openSnippets |
unassigned | Select Color Theme | workbench.action.selectTheme |
unassigned | Configure Display Language | workbench.action.configureLocale |
Debug
Key | Command | Command id |
---|---|---|
F9 | Toggle Breakpoint | editor.debug.action.toggleBreakpoint |
F5 | Continue | workbench.action.debug.continue |
F5 | Pause | workbench.action.debug.start |
F11 | Step Into | workbench.action.debug.stepInto |
Shift+F11 | Step Out | workbench.action.debug.stepOut |
F10 | Step Over | workbench.action.debug.stepOver |
Shift+F5 | Stop | workbench.action.debug.stop |
Ctrl+K Ctrl+I | Show Hover | editor.action.showHover |
Tasks
Key | Command | Command id |
---|---|---|
Ctrl+Shift+B | Run Build Task | workbench.action.tasks.build |
unassigned | Run Test Task | workbench.action.tasks.test |
Extensions
Key | Command | Command id |
---|---|---|
unassigned | Install Extension | workbench.extensions.action.installExtension |
unassigned | Show Installed Extensions | workbench.extensions.action.showInstalledExtensions |
unassigned | Show Outdated Extensions | workbench.extensions.action.listOutdatedExtensions |
unassigned | Show Recommended Extensions | workbench.extensions.action.showRecommendedExtensions |
unassigned | Show Popular Extensions | workbench.extensions.action.showPopularExtensions |
Customizing Shortcuts
All keyboard shortcuts in VS Code can be customized via the User/keybindings.json
file.
- To configure keyboard shortcuts the way you want, go to the menu under File > Preferences > Keyboard Shortcuts. (Code > Preferences > Keyboard Shortcuts on Mac)
- This will open the
Default Keyboard Shortcuts
on the left and yourUser/keybindings.json
file where you can overwrite the default bindings on the right.
Keyboard Rules
The keyboard shortcuts dispatching is done by analyzing a list of rules that are expressed in JSON. Here are some examples:
// Keybindings that are active when the focus is in the editor
{ "key": "home", "command": "cursorHome", "when": "editorTextFocus" },
{ "key": "shift+home", "command": "cursorHomeSelect", "when": "editorTextFocus" },
// Keybindings that are complementary
{ "key": "f5", "command": "workbench.action.debug.continue", "when": "inDebugMode" },
{ "key": "f5", "command": "workbench.action.debug.start", "when": "!inDebugMode" },
// Global keybindings
{ "key": "ctrl+f", "command": "actions.find" },
{ "key": "alt+left", "command": "workbench.action.navigateBack" },
{ "key": "alt+right", "command": "workbench.action.navigateForward" },
// Global keybindings using chords (two separate keypress actions)
{ "key": "ctrl+k enter", "command": "workbench.action.keepEditor" },
{ "key": "ctrl+k ctrl+w", "command": "workbench.action.closeAllEditors" },
Each rule consists of:
- a
key
that describes the pressed keys. - a
command
containing the identifier of the command to execute. - an optional
when
clause containing a boolean expression that will be evaluated depending on the current context.
Chords (two separate keypress actions) are described by separating the two keypresses with a space. E.g.: ctrl+k ctrl+c.
When a key is pressed:
- the rules are evaluated from bottom to top.
- the first rule that matches, both the
key
and in terms ofwhen
, is accepted. - no more rules are processed.
- if a rule is found and has a
command
set, thecommand
is executed.
The additional User/keybindings.json
rules are appended at runtime to the bottom of the default rules, thus allowing them to overwrite the default rules. The User/keybindings.json
file is watched by VS Code so editing it while VS Code is running will update the rules at runtime.
Accepted keys
The key
is made up of modifiers and the key itself.
The following modifiers are accepted:
OS | Modifiers |
---|---|
OS X | ctrl+, shift+, alt+, cmd+ |
Windows | ctrl+, shift+, alt+, win+ |
Linux | ctrl+, shift+, alt+, meta+ |
The following keys are accepted:
- f1-f19, a-z, 0-9
- `, -, =, [, ], \, ;, ', ,, ., /
- left, up, right, down, pageup, pagedown, end, home
- tab, enter, escape, space, backspace, delete
- pausebreak, capslock, insert
- numpad0-numpad9, numpad_multiply, numpad_add, nupad_separator
- numpad_subtract, numpad_decimal, numpad_divide
when Clause Contexts
VS Code gives you fine control over when your key bindings are enabled through the optional when
clause. If you key binding doesn't have a when
clause, the key binding is globally available at all times.
Below are the some of the possible when
clause contexts which evaluate to Boolean true/false:
Context name | True when |
---|---|
Editor contexts | |
editorFocus | An editor has focus, either the text or a widget. |
editorTextFocus | The text in an editor has focus (cursor is blinking). |
editorHasSelection | Text is selected in the editor. |
editorHasMultipleSelections | Multiple regions of text are selected (multiple cursors). |
editorReadOnly | The editor is read only. |
editorLangId | True when the editor's associated language Id matches. Example: "editorLangId == typescript" . |
Mode contexts | |
inDebugMode | A debug session is running. |
inSnippetMode | The editor is in snippet mode. |
inQuickOpen | The Quick Open dropdown has focus. |
Editor widget contexts | |
findWidgetVisible | Editor Find widget is visible. |
suggestWidgetVisible | Suggestion widget (IntelliSense) is visible. |
suggestWidgetMultipleSuggestions | Multiple suggestions are displayed. |
renameInputVisible | Rename input text box is visible. |
referenceSearchVisible | Find All References peek window is open. |
inReferenceSearchEditor | The Find All References peek window editor has focus. |
config.editor.stablePeek | Keep peek editors open (controlled by editor.stablePeek setting). |
quickFixWidgetVisible | Quick Fix widget is visible. |
parameterHintsVisible | Parameter hints are visible (controlled by editor.parameterHints setting). |
parameterHintsMultipleSignatures | Multiple parameter hints are displayed. |
Integrated terminal contexts | |
terminalFocus | An integrated terminal has focus. |
Global UI contexts | |
resourceLangId | True when the Explorer or editor title language Id matches. Example: "resourceLangId == markdown" |
globalMessageVisible | Message box is visible at the top of VS Code. |
searchViewletVisible | Search view is open. |
replaceActive | Search view Replace text box is open. |
The list above isn't exhaustive and you may see some when
contexts for specific VS Code UI in the Default Keyboard Shortcuts
.
Removing a specific key binding rule
You can write a key binding rule that targets the removal of a specific default key binding. With the keybindings.json
, it was always possible to redefine all the key bindings of VS Code, but it can be very difficult to make a small tweak, especially around overloaded keys, such as Tab or Escape. To remove a specific key binding, simply add a -
to the command
and the rule will be a removal rule.
Here is an example:
// In Default Keyboard Shortcuts
...
{ "key": "tab", "command": "tab", "when": ... },
{ "key": "tab", "command": "editor.emmet.action.expandAbbreviation", "when": ... },
{ "key": "tab", "command": "jumpToNextSnippetPlaceholder", "when": ... },
{ "key": "tab", "command": "acceptQuickFixSuggestion", "when": ... },
{ "key": "tab", "command": "acceptSelectedSuggestion", "when": ... },
...
// To remove the second rule, for example, add in keybindings.json:
{ "key": "tab", "command": "-editor.emmet.action.expandAbbreviation" }