Skip to content

Hotkey Reference — Emulators, Multiplexers, Shells

S2 · Pattern ✓ Stable 2026-04-18

Keybindings for each layer of the terminal stack, plus an onboarding path that doesn’t require memorizing everything day one.

Layer precedence: keystrokes flow emulator → multiplexer → shell/app, first-claim-wins. See terminal emulator stack research for the full layer model.


Free, pre-installed on modern Windows. Reconfigure in Settings → Actions or settings.json.

ActionKey
New tab (default profile)Ctrl+Shift+T
New tab from profile 1–9Ctrl+Shift+1..9
Close tab / paneCtrl+Shift+W
Next / prev tabCtrl+Tab / Ctrl+Shift+Tab
Jump to tab NCtrl+Alt+1..9
ActionKey
Split horizontalAlt+Shift+- (minus)
Split verticalAlt+Shift+= (plus)
Move between panesAlt+Arrow
Resize paneAlt+Shift+Arrow
ActionKey
New windowCtrl+Shift+N
Command palette (searchable)Ctrl+Shift+P
Settings (GUI)Ctrl+,
Settings (JSON file)Ctrl+Shift+,
Zoom in / outCtrl++ / Ctrl+-
FullscreenF11
ActionKey
Copy / pasteCtrl+Shift+C / Ctrl+Shift+V
Find in scrollbackCtrl+Shift+F

Limitations for agentic work:

  • No “clone tab at current remote SSH cwd” equivalent.
  • OSC 52 clipboard bridge from WSL → Windows is limited.
  • Keybinding customization is JSON-only; no scripting.

Highly configurable via ~/.wezterm.lua (or %USERPROFILE%\.wezterm.lua on Windows). See profiles/wezterm/ in this repo for my config.

ActionDefault keyNotes
New tabCtrl+Shift+T
Close tabCtrl+Shift+W
Next / prev tabCtrl+Tab / Ctrl+Shift+Tab
Jump to tab NCtrl+Shift+1..9Slower than my custom Alt+1..9
Show tab navigator (fuzzy pick)Ctrl+Shift+Space (custom)Very handy when you have many tabs

Panes (built-in, but most people use a multiplexer instead)

Section titled “Panes (built-in, but most people use a multiplexer instead)”
ActionDefault key
Split horizontalCtrl+Shift+Alt+"
Split verticalCtrl+Shift+Alt+%
Move between panesCtrl+Shift+Arrow
Close paneCtrl+Shift+W
ActionKey
Command palette (searchable, all bindings)Ctrl+Shift+P
Launcher menu (profiles + custom entries)Ctrl+Shift+L
Show debug overlayCtrl+Shift+L + debug mode
Copy mode (vim-like selection)Ctrl+Shift+X
Quick select (grab URLs / hashes with one keystroke)Ctrl+Shift+Space
Reload configCtrl+Shift+R
ActionKey
Copy / pasteCtrl+Shift+C / Ctrl+Shift+V

Agentic-workflow value-adds (via Lua config)

Section titled “Agentic-workflow value-adds (via Lua config)”

These aren’t defaults — they require config, but they’re why WezTerm wins for this use case:

ActionSuggested bindingWhat it does
Bootstrap SSH + paCtrl+Shift+Dssh -t desktop pa in a new tab
Clone tab at remote cwdCtrl+Shift+EnterRe-SSHes and cds to the pane’s OSC-7 reported path
Named workspace launchCtrl+Shift+L → pickLaunch menu entry per workspace

See the profiles/wezterm/wezterm.lua config for implementations.


Best keyboard-first emulator, but Windows/WSL story is weaker. Configuration via ~/.config/kitty/kitty.conf.

ActionKey
New tabCtrl+Shift+T
Close tabCtrl+Shift+Q
Next / prev tabCtrl+Shift+] / Ctrl+Shift+[
Jump to tab NCtrl+Shift+1..9
Rename tabCtrl+Shift+Alt+T

Windows (Kitty’s term for splits within a tab)

Section titled “Windows (Kitty’s term for splits within a tab)”
ActionKey
New windowCtrl+Shift+Enter
Close windowCtrl+Shift+W
Next / prev windowCtrl+Shift+. / Ctrl+Shift+,
Jump to window NCtrl+Shift+N+1..9
Terminal window
# From any kitty-hosted shell:
kitty @ new-tab --cwd=current # clones tab at the CURRENT directory, even over SSH
kitty @ launch --type=tab vim # opens vim in a new tab
kitty @ ls # lists all tabs/windows as JSON

Set allow_remote_control yes in kitty.conf. Over SSH, Kitty multiplexes its control protocol through the same connection — no extra SSH needed.

ActionKey
Show actions (searchable)Ctrl+Shift+F2
Search scrollbackCtrl+Shift+F
Copy modeCtrl+Shift+H

Newest of the bunch. Opinionated, minimal config. Configuration via ~/.config/ghostty/config.

ActionKey (macOS / Linux)
New tabCmd+T / Ctrl+Shift+T
Close tabCmd+W / Ctrl+Shift+W
Next / prev tabCmd+Shift+] / Cmd+Shift+[
Jump to tab NCmd+1..9 / Ctrl+1..9
ActionKey
Split right / downCmd+D / Cmd+Shift+D
Navigate between splitsCmd+Alt+Arrow
Resize splitCmd+Shift+Arrow
ActionKey
New windowCmd+N / Ctrl+Shift+N
FullscreenCmd+Ctrl+F
Quick terminal (drop-down)Cmd+Shift+Space
  • Windows support still nascent; Mac + Linux solid.
  • No Lua. Config is a flat key = value file. Simpler, less flexible than WezTerm.

Discoverable keybindings — the status bar at the bottom always shows available keys for the current mode. Configuration in ~/.config/zellij/config.kdl.

Zellij groups keybindings by mode. You enter a mode, then press a single-letter action, then Enter/Esc.

ModeEnter withWhat it does
Normal(default)Type into the shell
PaneCtrl+PSplit / move / close panes
TabCtrl+TCreate / navigate tabs
ResizeCtrl+NResize panes
ScrollCtrl+SPage up/down scrollback
SessionCtrl+OSession list / detach / quit
MoveCtrl+HMove panes/tabs around
SearchCtrl+FSearch scrollback
ActionKeyNotes
Detach (keep session alive)Ctrl+OdSurvives SSH disconnect
Kill sessionCtrl+Ow → selectNuke it
Split horizontal / verticalCtrl+Pd / r
New tabCtrl+Tn
Next / prev tabCtrl+Tl / hVim-like
Zoom pane (full screen)Ctrl+Pf

Zellij also has direct combos for very common actions:

ActionKey
DetachCtrl+O d
Close focused paneCtrl+P x
Toggle zoomAlt+F
Next paneAlt+[/] (configurable)
Terminal window
zellij ls # list sessions
zellij attach <name> # attach existing
zellij attach -c <name> # attach or create
zellij kill-session <name> # kill

Prefix-key-based. Press Ctrl+B (the prefix), let go, then press the action key. Configuration in ~/.tmux.conf.

ActionKey
New windowCtrl+B c
Close windowCtrl+B & (prompt)
Next / prev windowCtrl+B n / p
Jump to window NCtrl+B 1..9
List windowsCtrl+B w
Rename windowCtrl+B ,
ActionKey
Split verticalCtrl+B %
Split horizontalCtrl+B "
Navigate panesCtrl+B Arrow
Close paneCtrl+B x
Toggle zoomCtrl+B z
Show pane numbersCtrl+B q
ActionKey / command
DetachCtrl+B d
List sessionsCtrl+B s or tmux ls
Attachtmux attach -t <name>
New sessiontmux new -s <name>
ActionKey
Enter copy modeCtrl+B [
Exitq
SearchCtrl+S (forward) / Ctrl+R (back)

Common reconfiguration: most people rebind prefix from Ctrl+B to Ctrl+A or Ctrl+Space for speed. Add to ~/.tmux.conf:

unbind C-b
set -g prefix C-a
bind C-a send-prefix

Shell-level bindings that survive through emulator + multiplexer. These conflict easily with multiplexer bindings if you’re not careful.

ActionKey
Start / end of lineCtrl+A / Ctrl+E
Kill to end / start of lineCtrl+K / Ctrl+U
Kill word backward / forwardCtrl+W / Alt+D
Search historyCtrl+R
History prev / nextCtrl+P / Ctrl+N (or arrows)
Move by wordAlt+B / Alt+F
Clear screenCtrl+L
Paste yankedCtrl+Y
UndoCtrl+_
Cancel lineCtrl+C
EOF / exitCtrl+D

You don’t need to memorize 150 keybindings. Learn in layers, expand as friction points appear.

Emulator:

  • Ctrl+Shift+T — new tab
  • Ctrl+Tab — next tab
  • Ctrl+Shift+Pcommand palette (your cheat sheet is always here)
  • Ctrl+Shift+C / Ctrl+Shift+V — copy / paste

Multiplexer (Zellij specifically — it literally tells you the keys):

  • Ctrl+P — enter pane mode, then the status bar shows you what each key does
  • Ctrl+O d — detach (crucial for SSH workflows)
  • Ctrl+T n — new tab

Shell:

  • Ctrl+R — search history (life-changing)
  • Ctrl+A / Ctrl+E — line nav
  • Ctrl+L — clear screen

That’s twelve keys. Drive with just these for a week.

  • Alt+1..9 in emulator (if configured) — jump to tab by number
  • Ctrl+Shift+Space (WezTerm) — fuzzy tab picker
  • Ctrl+W (bash) — delete last word
  • Zellij: learn Alt+F (toggle zoom pane) and Alt+[ / ] (cycle panes)

The big ergonomic wins are custom, not defaults:

  • Ctrl+Shift+Dssh -t desktop pa (bootstrap in one key)
  • Ctrl+Shift+Enter → clone tab at current remote cwd
  • Launch menu entries per workspace

See profiles/wezterm/wezterm.lua for reference implementations.

Ongoing — use the command palette as your cheat sheet

Section titled “Ongoing — use the command palette as your cheat sheet”

Every modern emulator has one (Ctrl+Shift+P in WezTerm, Windows Terminal, most editors). Type what you want to do, it shows you the binding. You learn keys by encountering them in context, not by memorizing tables.


SymptomFix
”Which layer is eating my keys?”Remember: emulator → mux → shell. First claim wins. Unbind from the wrong layer.
”I forgot the key for X”Command palette (Ctrl+Shift+P). Or look up this page.
”Same key does different things depending on mode”Zellij modes. Check the status bar; it shows the current mode’s keys.
”Nothing works when I’m in Claude / vim”The app is claiming the key. Send through with an escape layer key, or use the emulator’s escape-passthrough config.
”My bindings vanish over SSH”The emulator only sees local keys. Anything inside SSH is handled by the remote mux + shell.