Keyboard shortcuts
Every default binding, the command id behind it, and what it does.
Every shortcut on this page is a default, and every one of them is
rebindable — menu items and the terminal’s own keys alike. Settings ▸
Keyboard Shortcuts (⌘,) lists them with their command ids and
writes your changes to keybindings.json; see
keybindings.json for the file’s format.
The Command id column is the name you use in that file. The groups below are the groups the app itself uses, in its own order.
Where the Keys column says Ghostty’s own, the command has no key of its
own: it takes whatever Ghostty binds the action to, which means your
~/.config/ghostty/config decides. Settings shows the key in force.
Overterm
| Keys | Command id | What it does |
|---|---|---|
| ⌘, | app.settings |
Opens Settings as a tab. Ghostty’s open_config too. |
| ⌥⌘O | app.changelog |
View Latest Changelog — what the installed build added |
| ⌘H | app.hide |
Hide Overterm |
| ⌥⌘H | app.hideOthers |
Hide Others |
| ⌘Q | app.quit |
Quit Overterm |
Tabs
| Keys | Command id | What it does |
|---|---|---|
| ⌘T | tabs.new |
New tab, in the current tab’s folder |
| ⌥⌘C | tabs.newClaude |
New Claude tab here |
| ⌥⌘X | tabs.newCodex |
New Codex tab here |
| ⇧⌘N | tasks.new |
New Task — a worktree, a branch and an agent |
| ⌘W | tabs.close |
Closes the pane when the tab is split, else the tab |
| ⇧⌘] | tabs.next |
Show next tab |
| ⇧⌘[ | tabs.previous |
Show previous tab |
| ⌃⌘I | tabs.info |
Tab Info — processes, ports, branch, Claude session, disk |
| ⌘I | inbox.show |
Agent Inbox |
| ⌥⌘↓ | tabs.nextAttention |
Next failure or tab that needs you |
| ⇧⌘E | tabs.peek |
Tab Peek — every tab’s terminal, live |
| ⇧⌘A | agents.overview |
Agent Overview — every tab as a card, by state |
Groups
| Keys | Command id | What it does |
|---|---|---|
| ⌃⌘N | groups.new |
Group the selected tabs |
| ⌃⌘G | groups.switcher |
Group switcher |
| ⌃⌘F | groups.focus |
Focus on this group |
| ⌃⌘S | groups.stash |
Stash the group (its tabs keep running) |
| ⌃⌘B | groups.broadcast |
Broadcast input to the group… |
| ⌃⌘1 | groups.goto1 |
Go to group 1 |
| ⌃⌘2 | groups.goto2 |
Go to group 2 |
| ⌃⌘3 | groups.goto3 |
Go to group 3 |
| ⌃⌘4 | groups.goto4 |
Go to group 4 |
| ⌃⌘5 | groups.goto5 |
Go to group 5 |
| ⌃⌘6 | groups.goto6 |
Go to group 6 |
| ⌃⌘7 | groups.goto7 |
Go to group 7 |
| ⌃⌘8 | groups.goto8 |
Go to group 8 |
| ⌃⌘9 | groups.goto9 |
Go to group 9 |
The group keys live on ⌃⌘ rather than the ⌃ the designs drew, because ⌃2 and ⌃6 are real control characters a terminal has to pass through.
Panes
| Keys | Command id | What it does |
|---|---|---|
| ⌘D | splits.right |
Split right |
| ⇧⌘D | splits.down |
Split down |
| ⌘] | splits.next |
Next pane |
| ⌘[ | splits.previous |
Previous pane |
| ⇧⌘↩ | splits.zoom |
Zoom the pane, and back |
| ⌃⌘= | splits.equalize |
Equalize panes |
| Ghostty’s own | splits.left |
Pane to the left |
| Ghostty’s own | splits.rightPane |
Pane to the right |
| Ghostty’s own | splits.up |
Pane above |
| Ghostty’s own | splits.below |
Pane below |
Panels
| Keys | Command id | What it does |
|---|---|---|
| ⌘K | palette.show |
Command palette |
| ⌘B | sidebar.toggle |
Toggle the sidebar |
| ⌥⌘G | overgit.show |
Overgit — history, branches, worktrees |
| ⌥⌘D | changes.toggle |
Changes |
| ⇧⌘B | browser.toggle |
Browser |
| ⌥⌘U | usage.show |
Usage |
| ⌘F | search.terminal |
Search the terminal and the checkout’s files |
Editing
| Keys | Command id | What it does |
|---|---|---|
| ⌘C | edit.copy |
Copy |
| ⌘V | edit.paste |
Paste |
| ⌘A | edit.selectAll |
Select all |
| ⌘L | agents.askSelection |
Ask an agent about the selection |
| ⌘F | edit.find |
Find in the editor |
| ⌘S | file.save |
Save the file open in the editor |
⌘F is deliberately two commands: the editor’s find bar while the editor has the keyboard, and the terminal’s search overlay in the terminal. Settings does not treat that as a clash.
Terminal
| Keys | Command id | What it does |
|---|---|---|
| ⇧⌘K | terminal.clear |
Clear the screen |
| Ghostty’s own | terminal.fontBigger |
Bigger text |
| Ghostty’s own | terminal.fontSmaller |
Smaller text |
| Ghostty’s own | terminal.fontReset |
Text size back |
| ⌘↑ | terminal.promptPrevious |
Previous prompt |
| ⌘↓ | terminal.promptNext |
Next prompt |
| ⇧⌘C | terminal.copyOutput |
Copy the last command’s output |
| ⌘R | terminal.rerun |
Run the last command again |
| Ghostty’s own | terminal.scrollTop |
Scroll to the top |
| Ghostty’s own | terminal.scrollBottom |
Scroll to the bottom |
Clearing the screen is ⇧⌘K because ⌘K is the palette; Overterm writes the unbind for Ghostty’s own ⌘K so the key is not silently eaten in the terminal.
Window
| Keys | Command id | What it does |
|---|---|---|
| ⇧⌘W | window.close |
Close window |
| ⌘M | window.minimize |
Minimize |
Editor
These apply only while the editor has the keyboard, as a scope of their own, and they are never menu key equivalents. That is what lets ⌘D add the next match in the editor and still split a pane in the terminal. They are Zed’s defaults, which are VS Code’s.
| Keys | Command id | What it does |
|---|---|---|
| ⌃G | editor.goToLine |
Go to line… |
| ⇧⌘O | editor.goToSymbol |
Go to symbol in file… |
| F12 | editor.goToDefinition |
Go to definition |
| ⇧F12 | editor.findReferences |
Find all references |
| ⌃- | editor.goBack |
Go back |
| ⌃⇧- | editor.goForward |
Go forward |
| F8 | editor.nextProblem |
Next problem |
| ⇧F8 | editor.previousProblem |
Previous problem |
| ⌥F1 | editor.showHover |
Show hover |
| ⌃Space | editor.complete |
Show completions |
| ⌥⇧F | editor.format |
Format document |
| ⌘/ | editor.toggleComment |
Toggle line comment |
| ⌥↑ | editor.moveLineUp |
Move line up |
| ⌥↓ | editor.moveLineDown |
Move line down |
| ⌥⇧↑ | editor.duplicateLineUp |
Duplicate line up |
| ⌥⇧↓ | editor.duplicateLineDown |
Duplicate line down |
| ⇧⌘K | editor.deleteLine |
Delete line |
| ⌘↩ | editor.insertLineBelow |
Insert line below |
| ⇧⌘↩ | editor.insertLineAbove |
Insert line above |
| ⌘D | editor.selectNext |
Add next match to selection |
| ⇧⌘L | editor.selectAll |
Select all matches |
| ⌃J | editor.joinLines |
Join lines |
| ⌘] | editor.indent |
Indent |
| ⌘[ | editor.outdent |
Outdent |
| ⌥Z | editor.toggleSoftWrap |
Toggle soft wrap |
| ⇧⎋ | editor.toggleZoom |
Zoom the editor, and back |
| ⇧⌘V | editor.markdownPreview |
Toggle Markdown preview |
| ⌘W | editor.closeFile |
Close the file |
| ⌥⌘→ | editor.nextFile |
Next file |
| ⌥⌘← | editor.previousFile |
Previous file |
Not a shortcut, but worth knowing
- ⌘-click on a printed
path:lineopens that file in the editor at that line. See Search. - Three fingers down the trackpad opens Tab Peek, in stages. Settings ▸ General changes the finger count or switches it off.
- ⌥ while dropping files on a terminal forces plain shell-quoted paths, even where Claude Code is running. See Snippets and drag and drop.
- J / K move the highlight in the Agent Inbox once you have clicked into it.
- Some menu items deliberately have no key: Clean Up Merged Worktrees…,
Pin / Unpin Tab, Pull Request, Search Terminal & Files…,
Check for Updates… and About Overterm. Bind them yourself if you
want — they are commands like any other, except the two that are not
(
Pull RequestandCheck for Updates…have no command id).
Ghostty’s own bindings still reach Overterm where the action maps onto
something Overterm has: ⇧⌘P opens the palette (Ghostty’s
toggle_command_palette), ⌥⌘W closes the tab, and
⌥⇧⌘W closes the window. Ghostty’s split and tab keys drive
Overterm’s own splits and tabs.
Shortcuts that are not wired up
These appear in the designs, in older internal documents, or in other terminals, and they do nothing in Overterm. Listed so you are not left hunting.
| What you may have seen | What is actually bound |
|---|---|
| ⌘P for the palette | The palette is ⌘K. ⇧⌘P also works, via Ghostty. |
| ⌘I for Tab Info | ⌘I is the Agent Inbox; Tab Info is ⌃⌘I. |
| ⇧⌘G / ⌥⌘I for groups | Ghostty v1.3.1 binds both and eats them before the menu, so the group commands live on ⌃⌘. |
| ⌃1…⌃9 for groups | ⌃⌘1…⌃⌘9. |
| ⇧⌘↓ for Tab Peek | Tab Peek is ⇧⌘E. ⇧⌘↓ would never arrive — Ghostty’s jump_to_prompt takes it first. |
| ⌘N for a new window | Nothing. Overterm is one process and one window. |
| ⌘E for a search selection | Ghostty’s own search_selection; Overterm adds nothing to it. |
There is also no overterm command-line tool, no URL scheme and no plugin
system, so nothing is bound to them either.