Tabs 10
Ghostty writes the Mac Command key as super: that is the name its keybind output uses, while cmd and command are aliases the config file accepts.
| Action | Linux | Mac |
|---|---|---|
| New tab | Ctrl+Shift+T | Cmd+T |
| Close tabCloses the current tab with every split inside it; a confirmation can appear, depending on confirm-close-surface. | Ctrl+Shift+W | Cmd+Option+W |
| Previous tabOne of two tab bindings that are identical on Linux and macOS. | Ctrl+Shift+Tab | Ctrl+Shift+Tab |
| Next tabWorks unchanged on both systems, beside the platform binding listed below. | Ctrl+Tab | Ctrl+Tab |
| Previous tabThe Linux binding is performable: when the action cannot run, the key goes to the program in the terminal. | Ctrl+Shift+Left | Cmd+Shift+[ |
| Next tab | Ctrl+Shift+Right | Cmd+Shift+] |
| Previous tabLinux-only alternative; the macOS defaults have no Page Up tab binding. | Ctrl+Page Up | — |
| Next tab | Ctrl+Page Down | — |
| Go to tab by numberA number higher than the count of open tabs selects the final one. | Alt+1-8 | Cmd+1-8 |
| Go to last tabSelects the final tab regardless of how many tabs are open. | Alt+9 | Cmd+9 |
Windows and application 5
| Action | Linux | Mac |
|---|---|---|
| New windowAlso brings Ghostty to the front when the application is not focused. | Ctrl+Shift+N | Cmd+N |
| Close windowCloses the window together with all of its tabs and splits. | Alt+F4 | Cmd+Shift+W |
| Quit Ghostty | Ctrl+Shift+Q | Cmd+Q |
| Toggle fullscreenApplies to the current window; macOS has a second binding, listed under Mac only. | Ctrl+Enter | Cmd+Return |
| Toggle command paletteOpens a searchable list of actions with their key bindings; on Linux it needs libadwaita 1.5 or newer. | Ctrl+Shift+P | Cmd+Shift+P |
Splits 13
| Action | Linux | Mac |
|---|---|---|
| Split rightCreates a new terminal to the right of the focused one. | Ctrl+Shift+O | Cmd+D |
| Split downCreates a new terminal below the focused one. | Ctrl+Shift+E | Cmd+Shift+D |
| Focus previous splitMoves through the splits in the order they were created. | Super+Ctrl+[ | Cmd+[ |
| Focus next splitFollows creation order, not the position on screen. | Super+Ctrl+] | Cmd+] |
| Focus split aboveHas an effect only when a split exists in that direction. | Ctrl+Alt+Up | Cmd+Option+Up |
| Focus split below | Ctrl+Alt+Down | Cmd+Option+Down |
| Focus split to the left | Ctrl+Alt+Left | Cmd+Option+Left |
| Focus split to the right | Ctrl+Alt+Right | Cmd+Option+Right |
| Resize split upwardEach press moves the divider by 10 pixels; the Linux binding adds Shift to the Mac one. | Super+Ctrl+Shift+Up | Cmd+Ctrl+Up |
| Resize split downward | Super+Ctrl+Shift+Down | Cmd+Ctrl+Down |
| Resize split leftward | Super+Ctrl+Shift+Left | Cmd+Ctrl+Left |
| Resize split rightward | Super+Ctrl+Shift+Right | Cmd+Ctrl+Right |
| Toggle split zoomThe zoomed split fills the whole tab and hides the others until the key is pressed again. | Ctrl+Shift+Enter | Cmd+Shift+Return |
Clipboard and selection 9
Keyboards with dedicated Copy and Paste keys trigger the same two clipboard actions on both systems.
| Action | Linux | Mac |
|---|---|---|
| Copy to clipboardPerformable: with nothing selected the key is not consumed and reaches the running program. | Ctrl+Shift+C | Cmd+C |
| Paste from clipboard | Ctrl+Shift+V | Cmd+V |
| Copy to clipboardAlternative copy binding offered on desktops other than macOS. | Ctrl+Insert | — |
| Paste from selectionPastes the contents of the selection clipboard rather than the default one. | Shift+Insert | Cmd+Shift+V |
| Select all | Ctrl+Shift+A | Cmd+A |
| Extend selection leftMoves the edge of an existing selection by one cell; it never starts a selection. | Shift+Left | Shift+Left |
| Extend selection right | Shift+Right | Shift+Right |
| Extend selection upMoves the edge of the selection one line upwards. | Shift+Up | Shift+Up |
| Extend selection down | Shift+Down | Shift+Down |
Scrollback and search 11
Shift with Home, End, Page Up or Page Down scrolls on Linux only; on a Mac those four keys extend an existing selection and scrolling uses Cmd.
| Action | Linux | Mac |
|---|---|---|
| Scroll to topOn macOS the Shift form of this key extends a selection instead of scrolling. | Shift+Home | Cmd+Home |
| Scroll to bottom | Shift+End | Cmd+End |
| Scroll page up | Shift+Page Up | Cmd+Page Up |
| Scroll page down | Shift+Page Down | Cmd+Page Down |
| Jump to previous promptNeeds shell integration, which marks where each prompt begins. | Ctrl+Shift+Page Up | Cmd+Up |
| Jump to next promptMoves the viewport forward by one shell prompt, skipping the output in between. | Ctrl+Shift+Page Down | Cmd+Down |
| Start searchOpens the search bar without setting a search term; scrollback search arrived in release 1.3.0. | Ctrl+Shift+F | Cmd+F |
| End searchHides the search bar; performable, so Esc reaches the program when no search is open. | Esc | Esc |
| Write screen to file, paste pathSaves the screen contents to a temporary file and types the file path at the cursor. | Ctrl+Shift+J | Cmd+Shift+J |
| Write screen to file, copy pathPuts the path of the temporary file on the clipboard instead of typing it. | Super+Ctrl+Shift+J | Cmd+Ctrl+Shift+J |
| Write screen to file and openOpens the temporary file in the default text editor, through xdg-open on Linux and open on macOS. | Ctrl+Alt+Shift+J | Cmd+Option+Shift+J |
Font size and configuration 6
| Action | Linux | Mac |
|---|---|---|
| Increase font sizeGrows the font by one point; the plus form serves keyboards with a dedicated plus key. | Ctrl+=orCtrl++ | Cmd+=orCmd++ |
| Decrease font sizeShrinks the font by one point per press. | Ctrl+- | Cmd+- |
| Reset font sizeReturns to the size set in the configuration. | Ctrl+0 | Cmd+0 |
| Reload configRe-reads the configuration file and applies whatever can change at runtime. | Ctrl+Shift+, | Cmd+Shift+, |
| Open configOpens the configuration file in the default editor of the operating system. | Ctrl+, | Cmd+, |
| Toggle inspectorShows or hides the terminal inspector; the binding mirrors the Chromium developer tools key. | Ctrl+Shift+I | Cmd+Option+I |
Mac only 23
| Action | Linux | Mac |
|---|---|---|
| Close surfaceCloses whatever has focus: a split, a tab or a window. | — | Cmd+W |
| Toggle fullscreenSecond fullscreen binding, the one common to Mac programs. | — | Cmd+Ctrl+F |
| Equalize splitsGives every split in the window the same size; Linux has no default key for it. | — | Cmd+Ctrl+= |
| Clear screenEmpties the scrollback as well as the visible screen. | — | Cmd+K |
| Undo last actionRestores a tab, window or split closed moments ago, within the undo-timeout period. | — | Cmd+Z |
| Undo last actionSame undo on a second key; undo and redo are implemented on macOS only. | — | Cmd+Shift+T |
| Redo last action | — | Cmd+Shift+Z |
| Scroll to selectionBrings the selected text back into view. | — | Cmd+J |
| Jump to previous promptSecond default for this jump; the Cmd-only form matches Terminal.app. | — | Cmd+Shift+Up |
| Jump to next prompt | — | Cmd+Shift+Down |
| Search selectionSearches for the selected text, or swaps the terms of a search that is already open. | — | Cmd+E |
| Next search resultWorks only while a search is active. | — | Cmd+G |
| Previous search result | — | Cmd+Shift+G |
| End searchCloses the search bar from the keyboard, as Esc does. | — | Cmd+Shift+F |
| Extend selection page up | — | Shift+Page Up |
| Extend selection page down | — | Shift+Page Down |
| Extend selection to topStretches the selection to the top-left corner of the screen; on Linux this key scrolls. | — | Shift+Home |
| Extend selection to endStretches the selection to the bottom-right corner of the screen. | — | Shift+End |
| Send Ctrl-E (line end)A natural text editing default; shells with Emacs-style editing jump to the end of the line. | — | Cmd+Right |
| Send Ctrl-A (line start)Sent as the byte 0x01, which Emacs-style line editing reads as start of line. | — | Cmd+Left |
| Send Ctrl-U (erase line)Sent as the byte 0x15; Backspace is the key that Mac keyboards label Delete. | — | Cmd+Backspace |
| Send Esc B (word back)Sends the escape sequence Esc b in place of the modified arrow key encoding. | — | Option+Left |
| Send Esc F (word forward) | — | Option+Right |
Keybind configuration syntax 19
The global: prefix needs the Accessibility permission on macOS; on Linux it works only where the desktop implements the Global Shortcuts portal.
| Action | Linux | Mac |
|---|---|---|
| Bind a trigger to an actionOne line of the config file; a later line with the same trigger replaces the earlier one. | keybind = trigger=action | keybind = trigger=action |
| Bind a key sequencePress the first chord, release it, then the next key; Ghostty waits for it without a timeout. | keybind = ctrl+a>n=new_window | keybind = ctrl+a>n=new_window |
| Pass a keybind on the command lineQuote the value, because most shells treat the > character specially. | ghostty --keybind='ctrl+a>n=new_window' | ghostty --keybind='ctrl+a>n=new_window' |
| Bind a Unicode character keyFires when a keypress produces that character, which helps on keyboard layouts other than US. | keybind = ctrl+ö=action | keybind = ctrl+ö=action |
| Match any unbound keyA trigger that fires for every key pressed with Ctrl that has no binding of its own. | ctrl+catch_all | ctrl+catch_all |
| Bind only when the action appliesWithout a selection Ghostty acts as if the keybind were not set, and the program receives the key. | keybind = performable:ctrl+c=copy_to_clipboard | keybind = performable:ctrl+c=copy_to_clipboard |
| Run action and pass key onThe prefix lets the program in the terminal receive the encoded key as well. | unconsumed:ctrl+a=reload_config | unconsumed:ctrl+a=reload_config |
| Apply keybind to every surfaceTrigger prefix that runs a surface-specific action in each terminal, not only the focused one. | all: | all: |
| Toggle quick terminal from anywhereQuick terminal has no default key; the global: prefix makes this one work while another application is focused. | keybind = global:cmd+backquote=toggle_quick_terminal | keybind = global:cmd+backquote=toggle_quick_terminal |
| Combine trigger prefixesSeveral prefixes can stand in front of one trigger, each ending in a colon. | global:unconsumed:ctrl+a=reload_config | global:unconsumed:ctrl+a=reload_config |
| Chain another actionAppends an action to the keybind defined just before it; chains exist since release 1.3.0. | keybind = chain=goto_split:left | keybind = chain=goto_split:left |
| Bind inside a key tablePuts the binding in a table named foo, which works only while that table is activated. | foo/ctrl+a=new_window | foo/ctrl+a=new_window |
| Remove all keybindsWipes every binding set before this line, the defaults included. | keybind=clear | keybind=clear |
| Remove one bindingAction value that drops the trigger, so a printable key is sent through to the program again. | unbind | unbind |
| Swallow a keyAction value that makes the key do nothing and send no encoding. | ignore | ignore |
| Send a stringAction value in Zig string literal syntax; this example sends Ctrl-U. | text:\x15 | text:\x15 |
| Send a CSI sequenceAction value written without the CSI header; this example moves the cursor up. | csi:A | csi:A |
| Send an escape sequenceThis example erases the remainder of the word right of the cursor. | esc:d | esc:d |
| Remap a modifier keyMakes the physical Ctrl key act as Super inside Ghostty only; the Super key itself is unchanged. | key-remap = ctrl=super | key-remap = ctrl=super |
Command-line actions 4
| Action | Linux | Mac |
|---|---|---|
| List default keybindsThe flag limits the list to the defaults; without it the command lists all available keybinds. | ghostty +list-keybinds --default | ghostty +list-keybinds --default |
| List bindable actionsPrints every action name that a keybind line accepts. | ghostty +list-actions | ghostty +list-actions |
| List available themesShows the theme names that the theme option accepts. | ghostty +list-themes | ghostty +list-themes |
| Print default config with docsWrites the whole default configuration and its documentation to standard output, so pipe it into a pager. | ghostty +show-config --default --docs | ghostty +show-config --default --docs |
No row on this page matches that filter.
Notes
Tabs, windows, surfaces
On Linux Ctrl + Shift + T opens a tab and Ctrl + Shift + N a window; the Mac equivalents are Cmd + T and Cmd + N. Closing differs between the two systems. On a Mac Cmd + W closes the current surface, Ghostty's word for whichever split, tab or window has focus, while Cmd + Option + W closes the tab and Cmd + Shift + W the window. On Linux, in release 1.3.1, Ctrl + Shift + W closes the current tab with all of its splits and Alt + F4 the window. Ctrl + Tab and Ctrl + Shift + Tab move between tabs on both systems, and Ctrl + Shift + Q or Cmd + Q quits.
Splits
Ctrl + Shift + O splits to the right and Ctrl + Shift + E downward (Cmd + D and Cmd + Shift + D on a Mac). Focus moves by direction with Ctrl, Alt and an arrow key on Linux, for example Ctrl + Alt + Left, and with Cmd and Option on a Mac. Resizing takes Super + Ctrl + Shift + Up and its three siblings on Linux, Cmd + Ctrl + Up on a Mac, 10 pixels per press. Ctrl + Shift + Enter (Cmd + Shift + Return) zooms one split to fill the tab and back. Equalizing has a default key only on macOS, Cmd + Ctrl + =; on Linux bind the equalize_splits action yourself.
Scrollback, search and config
Ctrl + Shift + J writes the screen contents to a temporary file and types the path at the prompt; Ctrl + Alt + Shift + J opens the file instead. Ctrl + Shift + Page Up and Ctrl + Shift + Page Down jump between shell prompts when shell integration is enabled. Scrollback search arrived in release 1.3.0: Ctrl + Shift + F on Linux, Cmd + F on a Mac. After editing the config file, Ctrl + Shift + , reloads it without a restart and Ctrl + , opens it. From a shell, ghostty +list-keybinds --default prints the default bindings of the installed build and ghostty +list-actions every action that can be bound.
Questions
How do I see Ghostty's actual default keybinds on my machine?
Run ghostty +list-keybinds --default. It prints the defaults compiled into the installed build, so a Mac lists super bindings and Linux the Ctrl and Shift ones.
What is a "surface"?
Ghostty's term for a terminal area, whether it sits in a window, a tab or a split. On a Mac Cmd + W closes whichever surface has focus; the Linux default Ctrl + Shift + W closes the current tab.
Why does Ctrl + Shift + Page Down do nothing?
Jump to prompt requires shell integration, which marks the prompts. The shell-integration option controls it: detect chooses by the shell's file name among bash, elvish, fish, nushell and zsh, and none leaves the setup to you.
Do I need to restart after changing the config?
No. Ctrl + Shift + , on Linux or Cmd + Shift + , on a Mac reloads the configuration in place, although not every option can be applied at runtime.
Is there a default key for the quick terminal?
No. The default keybind set of release 1.3.1 has no binding for toggle_quick_terminal; add one yourself, for example keybind = global:cmd+backquote=toggle_quick_terminal, the line the documentation gives for macOS.
Why does Ghostty print super where a Mac keyboard says Cmd?
super is the modifier's own name in Ghostty; cmd and command are aliases that the config file accepts, and output such as the keybind list always uses the non-aliased name.
Sources and checks
- Ghostty source code — src/config/Config.zig, the default keybind set (release 1.3.1) Every default binding in the Linux and Mac columns
- Ghostty documentation — Configuration reference (keybind, key-remap, theme) Keybind syntax: prefixes, chains, key tables, catch_all, modifier names
- Ghostty documentation — Custom Keybindings Basic keybind form, the performable example, common actions, the list-keybinds command
- Ghostty documentation — Trigger Sequences Key sequences and the command-line form
- Ghostty documentation — Keybinding Action Reference The quick terminal binding example
- Ghostty documentation — Configuration The show-config command
- Ghostty documentation — 1.3.0 release notes Scrollback search in release 1.3.0 and its macOS binding, written with cmd
Every row on this page was matched to a line in the documentation above on . A binding that could not be found there is not listed.
Found a wrong or missing key? Tell us and it gets checked against the source. How we verify describes the process and its limits.