Windows Terminal Cheat Sheet

Sidebar

Programming · Windows Terminal Cheat Sheet

Windows Terminal: default key bindings, the settings in settings.json, profiles, actions and the wt command line. Checked against the 1.24 release's schema and default settings, the documentation, and the copy installed here (1.24.11911.0). Not a VS Code sheet, but it sits well beside the VS Code terminal sheet.

Getting Around & Settings Files

Ctrl+,Open the Settings page (the graphical settings)
Ctrl+Shift+,Open settings.json (the file you edit by hand)
Ctrl+Alt+,Open defaults.json: read-only list of every default setting and key binding
Ctrl+Shift+PCommand palette: run any action by name
Ctrl+Shift+SpaceOpen the new-tab dropdown (all your profiles)
Alt+Enter or F11Full screen on and off
Win+` (backtick)Quake mode: a drop-down terminal window from the top of the screen
Alt+SpaceThe window's system menu
settings.json location%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json for the Store version (found on this machine; version 1.24)
"$schema"The first lines of settings.json point to https://aka.ms/terminal-profiles-schema, which gives VS Code completion and checking when you edit the file

Tabs & Windows (default keys)

Ctrl+Shift+TNew tab with the default profile
Ctrl+Shift+1 … 9New tab with the 1st … 9th profile in the dropdown
Ctrl+Shift+DDuplicate the current tab
Ctrl+Tab / Ctrl+Shift+TabNext / previous tab
Ctrl+Alt+1 … 8Switch to tab 1 … 8; Ctrl+Alt+9 goes to the last tab
Ctrl+Shift+NNew window
Ctrl+Shift+WClose the current pane (the tab closes with its last pane)
Alt+F4Close the window

Panes (default keys)

Alt+Shift+-Split the pane, duplicating it, with the new pane below
Alt+Shift++Split the pane, duplicating it, with the new pane to the right
Alt+Shift+DSplit in the best direction: not a default; it is the key bound in your settings.json (action Terminal.DuplicatePaneAuto)
Alt+Arrow keysMove focus to the pane up, down, left or right
Ctrl+Alt+LeftMove focus to the previous pane
Alt+Shift+Arrow keysResize the focused pane

Copy, Paste & Selection

Ctrl+Shift+C / Ctrl+Insert / EnterCopy the selection (Enter works only while text is selected)
Ctrl+Shift+V / Shift+InsertPaste
Ctrl+C and Ctrl+VRebound to copy and paste in your settings.json; Ctrl+C copies only when text is selected, otherwise it still interrupts a running program
Ctrl+Shift+ASelect all
Ctrl+Shift+MMark mode: select text with the keyboard
copyOnSelecttrue copies as soon as you select (default false)
copyFormattingCopy colours and fonts too (default true; yours is set to none)
trimPaste / trimBlockSelectionRemove trailing spaces when pasting / from a block selection (default true)
warning.multiLinePaste / warning.largePasteAsk before pasting several lines / more than 5 KiB (default true)
wordDelimitersCharacters that end a word on double-click
Menu keyShows the context menu; right-click pastes or copies unless experimental.rightClickContextMenu is on

Scrolling, Search & Zoom

Ctrl+Shift+FFind text in the output
Ctrl+Shift+Up / DownScroll a line up / down
Ctrl+Shift+PgUp / PgDnScroll a page up / down
Ctrl+Shift+Home / EndScroll to the top / bottom
Ctrl+Shift+KClear the whole buffer
Ctrl+Plus / Ctrl+Minus / Ctrl+0Make the font larger / smaller / reset it
historySizeLines of scroll-back (default 9001)
snapOnInputJump to the bottom when you type (default true)
scrollbarStatevisible (default), hidden, always
experimental.scrollToZoomCtrl + mouse wheel changes the font size (default true)
experimental.scrollToChangeOpacityCtrl + Shift + mouse wheel changes the opacity (default true)

Startup & Window (global settings)

defaultProfileThe profile for new tabs: its GUID or its name
launchModedefault, maximized, fullscreen, focus, maximizedFocus
initialCols / initialRowsWindow size in characters (default 120 and 30)
initialPosition / centerOnLaunchWhere the window opens, e.g. "200,100" / centre it (default false)
firstWindowPreferencedefaultProfile (default), persistedWindowLayout, persistedLayoutAndContent
windowingBehavioruseNew (default), useExisting, useAnyExisting: whether wt opens a new window or a new tab
startupActionsActions to run at start, in command-line style, e.g. "new-tab ; split-pane"
newTabPositionafterLastTab (default) or afterCurrentTab
alwaysOnTopKeep the window above others (default false)
minimizeToNotificationArea / alwaysShowNotificationIconHide from the taskbar when minimised / always show the tray icon (default false)
warning.confirmCloseAllTabsAsk before closing a window with several tabs (default true)
showAdminShieldShow a shield on the tab row when running as administrator (default true)

Look of the Window (global settings)

themedark (default), light, system or the name of a theme in themes
showTabsInTitlebarPut the tabs in the title bar (default true)
alwaysShowTabsShow the tab row even with one tab (default true)
tabWidthModeequal (default), compact, titleLength
tabSwitcherModeinOrder (default), mru, disabled: how Ctrl+Tab behaves
useAcrylicInTabRowFrosted-glass tab row (default false)
disableAnimationsTurn off visual animations (default false)
focusFollowMouseFocus the pane under the mouse (default false)
snapToGridOnResizeResize the window in whole character steps (default false)
autoHideWindowHide the window when it loses focus (default false)
languageInterface language as a BCP-47 tag such as en-GB (default: the system's)

Profiles: What Starts When You Open a Tab

profiles.listOne entry per shell; profiles.defaults holds settings applied to every profile
name / guidThe label in the dropdown / its unique ID ({…})
commandlineThe program to run, e.g. %SystemRoot%\System32\cmd.exe
startingDirectoryFolder the shell starts in (default: the profile's own default)
sourceMarks a profile generated automatically (such as WSL distributions or Azure Cloud Shell)
hiddenHide a profile from the dropdown (default false)
elevateAlways open this profile as administrator (default false)
closeOnExitautomatic (default), graceful, always, never
tabTitle / suppressApplicationTitleFixed tab name; with suppressApplicationTitle on, programs cannot change it
tabColor / iconColour of the tab / its icon
environmentExtra environment variables, e.g. { "EDITOR": "vim" }
pathTranslationStylenone (default), wsl, cygwin, msys2, mingw: convert paths when you drag a file in
Your profilesWindows PowerShell, Command Prompt, Azure Cloud Shell, and the WSL distributions Ubuntu and Debian (found on this machine)

Profile Appearance

colorSchemeName of a scheme from schemes (default Campbell)
font{ "face": "Cascadia Mono", "size": 12, "weight": "normal" } (these are the defaults)
font.features / font.axesOpenType features and variable-font axes, e.g. { "liga": 1 }
font.cellWidth / font.cellHeightAdjust spacing between characters / lines
cursorShapebar (default), underscore, doubleUnderscore, filledBox, emptyBox, vintage
cursorHeight / cursorColorHeight in percent for vintage (default 25) / cursor colour
opacity / useAcrylicWindow transparency 0 to 100 (default 100) / frosted-glass effect (default false)
paddingSpace around the text (default 8, 8, 8, 8)
background / foregroundOverride the scheme's colours with #rrggbb values
backgroundImageA picture behind the text; with backgroundImageOpacity (default 1.0), backgroundImageStretchMode (default uniformToFill) and backgroundImageAlignment (default center)
intenseTextStylebright (default), bold, all, none
adjustIndistinguishableColorsnever (default), indexed, always: make hard-to-read colour pairs readable
antialiasingModegrayscale (default), cleartype, aliased
bellStyleaudible (default), or window, taskbar, all, none
unfocusedAppearanceA set of appearance settings used while the pane is not focused

Actions & Key Bindings (settings.json)

"keybindings": [ … ]Each entry: { "id": "Terminal.CopyToClipboard", "keys": "ctrl+c" }; the id names an action
"actions": [ … ]Define your own action: { "command": { "action": "sendInput", "input": "git status\r" }, "id": "User.gitStatus" }
Key namesctrl, alt, shift, win joined by +, then a key such as t, f11, up, pgdn, period
Remove a default keyBind the key to the action unbound
Common actionsnewTab, splitPane, closePane, copy, paste, find, moveFocus, resizePane, switchToTab, renameTab, setTabColor, togglePaneZoom, toggleFocusMode, scrollToMark, setColorScheme, sendInput, wt
splitPane{ "action": "splitPane", "split": "auto", "splitMode": "duplicate", "size": 0.5 }
newTab with a profile{ "action": "newTab", "profile": "Debian" }
multipleActionsRun several actions with one key

The wt Command Line

wtStart Windows Terminal from any shell; wt -h lists the help
wt -p "Debian"Open a profile by name
wt -d C:\pathStart in a folder
new-tab (nt) split-pane (sp)Subcommands; options include -p profile, -d folder, --title, --tabColor, --colorScheme
sp -H / sp -VSplit horizontally / vertically; -s .4 sets the new pane's share; -D duplicates the pane
focus-tab -t 1Focus a tab by its number (starting from 0); also move-focus, move-pane, swap-pane
wt -w 0 ntNew tab in the most recently used window; -w -1 new window; -w name a named window
-M -F -fStart maximised / full screen / in focus mode; also --pos x,y and --size c,r
; (semicolon)Separates commands in one line. In PowerShell write `; (backtick, semicolon) or put --% after wt
Dev layout examplewt -p "Debian" ; sp -V -p "Windows PowerShell" ; nt -d C:\ --title Build (cmd syntax)

Adding Your Own Shells (examples)

Git Bash profile (my knowledge){ "name": "Git Bash", "commandline": "C:\\Program Files\\Git\\bin\\bash.exe --login -i", "startingDirectory": "%USERPROFILE%" }
WSL starting in your Linux home (my knowledge)"commandline": "wsl.exe -d Debian --cd ~"
PowerShell 7 (my knowledge)Appears automatically as a profile once PowerShell 7 is installed
Hide profiles you never use"hidden": true
Same look everywherePut colorScheme and font in profiles.defaults instead of each profile

A Reasonable Starter Set (my suggestions, not defaults)

"profiles": { "defaults": { "font": { "face": "Cascadia Code", "size": 12 } } }One font for every shell (Cascadia Code ships with Windows Terminal)
"copyOnSelect": trueSelect to copy
"historySize": 20000More scroll-back for long builds
"newTabPosition": "afterCurrentTab"New tabs open beside the one you are in
"warning.multiLinePaste": trueKeep the safety prompt when pasting several lines (the default)
"defaultProfile": "Debian"If you live in WSL, make it the default
Edited settings.json and nothing changed?
Windows Terminal reloads settings.json when you save it, so look for an error message at the top of the window. A missing comma, a stray quote or a wrong value stops the new settings being applied. Because the file starts with the $schema line, VS Code underlines such mistakes when you open it there. If you are really stuck, the graphical Settings page (Ctrl+,) writes valid JSON for you.
Ctrl+C: copy or interrupt?
In a terminal Ctrl+C normally means stop the running program. With Ctrl+C bound to copy, as in your settings, it copies only when text is selected and otherwise still sends the interrupt, so you can use it both ways. Ctrl+Shift+C always copies, whatever the selection. In WSL and other Linux shells the same Ctrl+C interrupt applies.