The macOS Terminal shortcuts worth memorising are few: ⌘K clears
the screen, ⌘T opens a new tab, ⌃R searches your command history
backwards, ⌃A and ⌃E jump to the start and end of the line, and
⌃C stops whatever is running. Everything below is refinement on those five.
This is a reference you can skim once and come back to. It covers the built-in macOS Terminal.app bindings, the shell (readline/Emacs) bindings that work in any terminal, and how to rebind anything that does not suit you.
Terminal.app shortcuts (window, tab, and view)
These are handled by Terminal.app itself, so they work regardless of which shell you run.
| Shortcut | Action |
|---|---|
⌘N | New window |
⌘T | New tab in the current window |
⌘W | Close the current tab (or window) |
⌘K | Clear the screen and scrollback |
⌘+ / ⌘− / ⌘0 | Grow, shrink, or reset the font size |
⌃⌘F | Toggle full screen |
⌘⇧K | Clear the scrollback buffer only |
⌘, | Open Settings |
A common surprise: Terminal.app has no split panes. It gives you tabs and windows and stops there. If you want two shells visible at once, you need a different terminal app or a multiplexer — see how to split the terminal on macOS.
Shell shortcuts (line editing, history, process control)
These come from the shell's line editor, not the app. On macOS, zsh and
bash both ship with an Emacs-style keymap by default, so they work the same in
Terminal.app, iTerm2, and every other macOS terminal.
| Shortcut | What it does |
|---|---|
⌃A / ⌃E | Go to the start / end of the line |
⌃B / ⌃F | Move back / forward one character |
⌥B / ⌥F | Move back / forward one word |
⌃U / ⌃K | Delete from the cursor to the start / end of the line |
⌃W / ⌥⌫ | Delete the previous word |
⌃R | Reverse-search your command history |
⌃P / ⌃N | Previous / next command in history |
⌃L | Clear the screen (keeps scrollback, unlike ⌘K) |
⌃C / ⌃D | Cancel the running command / send end-of-file |
⌃Z | Suspend the foreground job (fg to resume) |
⌥. | Insert the last argument of the previous command |
Tab | Complete a path or command; press twice to list options |
Why Option-key shortcuts silently fail
If ⌥B types a special character instead of moving the cursor, your Option key is
being treated as a character composer rather than Meta. Fix it in
Terminal → Settings → Profiles → Keyboard and tick Use Option as Meta key.
This single checkbox is the most common reason people give up on word-jumping shortcuts.
History shortcuts beyond ⌃R
⌃R is the one to learn first: type a fragment, and zsh shows the most recent
matching command. Press ⌃R again to walk further back, Enter to run
it, or Esc to edit it before running. Beyond that:
!!— repeat the previous command (useful assudo !!).!$— the last argument of the previous command.!word— the most recent command starting withword.historythen!120— run entry 120 by number.
If you find yourself reaching for ⌃R constantly, consider a fuzzy history search
like fzf bound to ⌃R — it turns history recall into a live-filtered list.
Rebinding anything
App-level shortcuts are edited in System Settings → Keyboard → Keyboard Shortcuts → Terminal.
Shell-level bindings live in your ~/.zshrc via bindkey, for example:
# Make ⌥← and ⌥→ jump by word (many setups need this with zsh)
bindkey "^[[1;3D" backward-word
bindkey "^[[1;3C" forward-word
# Map ⌃Space to autosuggest-accept if you use zsh-autosuggestions
bindkey "^ " autosuggest-accept
The exact escape sequences differ between terminals, so the reliable way to find one is to press
⌃V followed by the key combination in your shell — zsh prints the literal sequence
to paste into bindkey.
Do you need to learn all of this?
No. Learn the five from the top of this page, then add one binding per week as the need appears. Shortcuts only pay off after they stop being conscious, and that takes repetition, not volume. If you are optimising the whole workflow rather than just the keyboard, the keyboard-first workflow guide covers the broader principles.