⌥+⌃AltPlusCtrl

Ghostty Keyboard Shortcuts

Ghostty makes a point of using each platform's native conventions rather than imposing one keymap everywhere, which means its shortcuts genuinely differ between macOS and Linux rather than being the same combination with a substituted modifier. On macOS the bindings look like a Mac application: Cmd+T for a tab, Cmd+D for a split, Cmd+W to close. On Linux they follow the terminal convention that has held since the days when plain Ctrl+C had to stay available to the program running inside — Ctrl+Shift+T, Ctrl+Shift+O, Ctrl+Shift+W. Neither set is a translation of the other, and the split bindings in particular have no obvious correspondence. That design choice explains most of the confusion people bring from other terminals. A cheat sheet written by a Mac user is close to useless on Linux and vice versa, and a fair number of the published Ghostty references do not say which platform they are describing. The table below gives both. The more useful thing to know is that Ghostty treats its keymap as configuration rather than as a fixed set. Every binding lives in ~/.config/ghostty/config using the form `keybind = trigger=action`, any default can be replaced, and any default can be removed outright with `keybind = ctrl+shift+n=unbind` — which matters when a Ghostty default collides with something you use inside the terminal, such as a tmux prefix or an editor binding. Because the file is plain text it travels with the rest of your dotfiles, so the keymap is reproducible across machines in a way a GUI preferences panel is not. Two commands make the configuration approach practical. `ghostty +list-keybinds` prints the bindings currently in force, including your customisations, and `ghostty +list-keybinds --default` prints the shipped defaults. Between them you can see exactly what you have changed. Both are worth running after any config edit, because a keybind line with a typo is silently ignored rather than reported as an error. One thing Ghostty deliberately does not do is manage persistent sessions. It is a terminal emulator, not a multiplexer — closing the window ends what was running in it. If you want sessions that survive disconnection, that remains tmux's job, and the two are commonly used together.

Tabs Splits

ActionWindowsMacDescription
New tabNot supportedCmd+TOpens a new tab in the current window, starting a fresh shell in the working directory Ghostty is configured to inherit. Tabs are a window-level construct here, distinct from splits, which divide a single tab.
Close the current tab or splitNot supportedCmd+WCloses whichever surface has focus — a split if you are in one, otherwise the tab. Ghostty calls both a surface, which is why one binding covers what other terminals separate into two.
Split rightNot supportedCmd+DDivides the current surface vertically, placing a new shell to the right. This is the binding with the least obvious cross-platform correspondence — Cmd+D on macOS, Ctrl+Shift+O on Linux — so it has to be learned per platform.
Split downNot supportedCmd+Shift+DDivides the current surface horizontally, placing a new shell beneath. Splits nest, so a horizontal split inside a vertical one produces the usual three-pane arrangement without any layout command.
Move focus between splitsNot supportedCmd+Option+ArrowMoves focus in the direction of the arrow, based on the splits' physical arrangement rather than their creation order. Directional movement is more predictable than cycling once a layout has more than two panes.
Cycle through splitsNot supportedCmd+Shift+[ / Cmd+Shift+]Steps forward and back through the splits in the current tab. The bracket pattern mirrors tab cycling with braces, which is one of the few places the two platforms line up neatly.
Cycle through tabsNot supportedCmd+Shift+{ / Cmd+Shift+}Moves to the previous or next tab. Note the braces rather than brackets — the shifted characters distinguish tab cycling from split cycling, a distinction that only becomes intuitive after using both.
Jump to a tab by numberNot supportedCmd+1 through Cmd+9Selects a tab by position. The Linux binding uses Alt rather than Ctrl+Shift, which is worth noting because it breaks the pattern the rest of the Linux keymap follows.

Navigation Scrollback

ActionWindowsMacDescription
Jump to previous / next promptNot supportedCmd+Up / Cmd+DownSkips through scrollback by shell prompt rather than by line, landing on command boundaries. Requires shell integration to be active, since Ghostty needs the shell to mark where each prompt began.
Scroll by pageNot supportedCmd+Page Up / Cmd+Page DownMoves through scrollback a screen at a time. Distinct from the program running inside the terminal receiving Page Up — Ghostty intercepts the modified form and passes the unmodified key through.
Search the scrollbackNot supportedCmd+FSearches the buffer for text, added in Ghostty 1.3 after being one of the most requested gaps in the terminal's first releases. Older references predating that version state, incorrectly for current builds, that Ghostty has no scrollback search.
Copy / pasteNot supportedCmd+C / Cmd+VThe Linux bindings use Shift because unmodified Ctrl+C must remain available to interrupt the running program. On macOS no such conflict exists, so the ordinary application shortcuts are used.
Clear the screen and scrollbackNot supportedCmd+KClears the visible screen and discards the scrollback buffer. Stronger than the shell's own clear command, which usually only scrolls the screen and leaves history retrievable.

Configuration

ActionWindowsMacDescription
Reload the configurationNot supportedCmd+Shift+,Re-reads ~/.config/ghostty/config without restarting, applying changes to existing windows where possible. The fastest way to iterate on a keybind or theme, since the alternative is closing everything you had open.
Open the configuration fileNot supportedCmd+,Opens the config in your default editor. Ghostty has no settings dialog at all — the file is the interface, which is why this binding follows the platform's preferences convention.
List active keybindsNot supportedghostty +list-keybindsPrints the bindings currently in force including your customisations; adding --default prints the shipped set instead. Worth running after any config change, since a malformed keybind line is ignored silently rather than reported.

Frequently Asked Questions

Why are the macOS and Linux shortcuts completely different?

Because Ghostty follows each platform's native conventions rather than imposing one keymap across both. On macOS, Cmd is free for application commands, so Ghostty uses Cmd+T, Cmd+D and Cmd+W like any Mac app. On Linux there is no equivalent free modifier: plain Ctrl+C, Ctrl+D and Ctrl+Z must reach the program running inside the terminal, so terminal emulators there have long used Ctrl+Shift for their own commands. The result is two genuinely different keymaps rather than one with a substituted modifier, which is why a cheat sheet that does not name its platform is close to useless.

How do I change or remove a Ghostty keybinding?

Add a line to ~/.config/ghostty/config in the form `keybind = trigger=action`, for example `keybind = ctrl+shift+n=new_window`. To remove a default rather than replace it, bind it to unbind: `keybind = ctrl+shift+n=unbind`. That second form matters more than it sounds, because Ghostty's defaults occasionally collide with something you use inside the terminal — a tmux prefix, an editor binding — and unbinding is how you hand the keystroke through.

Does Ghostty work on Windows?

Not natively. Ghostty targets macOS and Linux, and Windows support has not shipped. Running it inside WSL with an X or Wayland server is possible in the way any Linux GUI application is, but that is a workaround rather than a supported configuration. For a native Windows terminal with comparable features, Windows Terminal is the established option.

What does 'jump to prompt' need in order to work?

Shell integration. Ghostty has to know where each prompt began in order to skip between command boundaries rather than scrolling by line, and it learns that from marks the shell emits. Ghostty can inject the integration automatically for bash, zsh, fish and elvish, or you can source it manually. When prompt jumping does nothing, missing or failed shell integration is almost always the reason — and it also disables working-directory inheritance for new tabs, which is a useful symptom to check.

Is Ghostty a replacement for tmux?

No, and it does not try to be. Ghostty has tabs and splits, which covers the layout half of what people use tmux for, but it has no persistent sessions — closing the window ends what was running. tmux's real value is that a session survives the terminal disconnecting, which is what makes it indispensable over SSH. The two are complementary and commonly used together, with Ghostty providing the rendering and tmux the persistence.

Why did my keybind change do nothing?

Most likely the line is malformed and was ignored — Ghostty does not report a syntax error in a keybind, it simply skips it. Running `ghostty +list-keybinds` shows what is actually in force, which immediately reveals whether your binding took. The other common cause is that the configuration was not reloaded; Cmd+Shift+, or Ctrl+Shift+, re-reads the file without restarting.

Can Ghostty search its scrollback?

Yes, since version 1.3, on Cmd+F or Ctrl+Shift+F. This is worth stating explicitly because scrollback search was absent from Ghostty's first releases and was among the most-cited gaps at the time, so a fair amount of published commentary still says it cannot. That commentary is simply out of date. The same release also added native scrollbars.

Where does Ghostty's configuration file live?

At ~/.config/ghostty/config on Linux, and on macOS under Application Support with the same ~/.config path also honoured — which is what most people use, since it keeps the file with the rest of their dotfiles. There is no settings dialog of any kind; the file is the entire configuration interface, and Cmd+, or Ctrl+, opens it in your default editor.