Skip to content

Keyboard Shortcuts

Quick reference for all custom keybindings across tmux, zsh ZLE widgets, and fzf.

For deep dives: tmux keybindings · tmux themes · fzf · tv · tv vs fzf


Unix Shell (Readline / Zsh ZLE)

These work at any bash/zsh prompt (and most Unix CLI apps that embed readline).

Cursor Movement

Binding Action
Ctrl+A Beginning of line
Ctrl+E End of line
Alt+F Move forward one word
Alt+B Move backward one word
Ctrl+F Move forward one character
Ctrl+B Move backward one character
Ctrl+XX Toggle between current position and beginning of line

Edit / Delete

Binding Action
Ctrl+W Delete word backward (to previous whitespace)
Alt+D Delete word forward
Ctrl+K Kill (cut) from cursor to end of line
Ctrl+U Kill from cursor to beginning of line
Ctrl+Y Yank (paste) last killed text
Alt+Y Rotate kill-ring and yank previous kill
Ctrl+D Delete character under cursor (or EOF if line is empty)
Ctrl+H Delete character before cursor (same as Backspace)
Ctrl+T Transpose characters around cursor
Alt+T Transpose words around cursor (zsh: overridden by tools-picker)
Alt+U Uppercase word from cursor
Alt+L Lowercase word from cursor
Alt+C Capitalize word from cursor (zsh: overridden by fzf cd)

History

Binding Action
Ctrl+R Reverse incremental search (zsh: opens fzf history picker)
Ctrl+S Forward incremental search (may be intercepted by terminal flow control)
Ctrl+P Previous command (same as Up arrow)
Ctrl+N Next command (same as Down arrow)
Alt+. Insert last argument of previous command (repeat to cycle)
!! Expand to last command
!$ Expand to last argument of last command

Process Control

Binding Action
Ctrl+C Send SIGINT — interrupt/cancel current process
Ctrl+Z Send SIGTSTP — suspend process (resume with fg)
Ctrl+D Send EOF — exit shell or end input stream
Ctrl+L Clear screen (keep current line)
Ctrl+S Pause terminal output (XOFF)
Ctrl+Q Resume terminal output (XON)

zsh overrides in this config: Ctrl+R → fzf history, Ctrl+T → fzf file picker, Alt+C → fzf cd, Alt+T → tools-picker, Alt+S → sesh-sessions. The readline defaults are shadowed by these ZLE widgets.


tmux

Prefix key: Ctrl+B

Panes & Windows

Binding Action
Ctrl+1..9 Switch to window 1–9 (no prefix, requires CSI-u terminal)
Ctrl+0 Jump to git root session via sesh (no prefix, CSI-u)
Ctrl+h/j/k/l Move across panes and Neovim splits seamlessly
prefix + h/j/k/l Navigate panes (vim-style fallback)
prefix + H/J/K/L Resize pane (5 cells)
prefix + M-h/j/k/l Fine-resize pane (1 cell)
prefix + \| Split left/right
prefix + - Split top/bottom
prefix + + Set pane to 75% width
prefix + z Zoom/unzoom pane
prefix + x Kill pane
prefix + c New window
prefix + X Kill session (confirm)
prefix + N New session (prompted)

Copy Mode (enter with prefix + [)

Key Action
v / V Begin char / line selection
C-v Rectangle selection
y Yank to clipboard
/ / ? Search forward / backward
g / G Jump to top / bottom
C-u / C-d Half-page up / down
q Exit copy mode

Clipboard Helpers

Binding Action
prefix + y Copy visible pane to clipboard
prefix + Y Copy full scrollback to clipboard
prefix + C-y fzf line picker from scrollback

URL & Sessions

Binding Action
prefix + u fzf URL picker (tmux-fzf-url)
prefix + g Sesh session picker (fzf popup)
prefix + T Sesh picker via tv (television popup)
prefix + O Sesh built-in picker popup
prefix + W Sesh window picker (fzf)
prefix + S Switch to last session
prefix + 9 Jump to git root session
prefix + U CLI tools picker (tv tools popup)

Themes & Config

Binding Action
prefix + M-c Switch to Catppuccin theme (top status bar)
prefix + M-t Switch to tmux2k theme (bottom status bar)
prefix + R Reload tmux config

Script-driven (~/.config/tmux/menu.sh), height-aware, with submenus. Top menu accelerator letters match the standalone bindings above.

Key Action
Tab / P Last window / last pane
w / s Choose window / session tree
q Show pane numbers
g / G Sesh picker / Lazygit popup
c / \| / - / z New window / split / split / zoom (height ≥ 22)
→ Layouts (L) Submenu: even/main/tiled, pane nav, swap
→ Session (S) Submenu: rename / new / move / break / link / kill
→ Sesh+ (E) Submenu: TV / built-in / windows / last / root / CLI tools
→ Popups (o) Submenu: Lazygit / Shell / Floax
→ Theme (T) Submenu: Catppuccin / tmux2k
→ System (Y) Submenu: reload / TPM install/update / detach / clock
? / / Cheatsheet (glow) / tmux-fzf keybinding picker

Ctrl+Space is intentionally unbound — reserved for input method switching.


Zsh ZLE Widgets

Interactive pickers that open at the shell prompt without leaving the current line.

Binding Widget Behavior
Alt+T tools-picker CLI tools list; Enter pastes invocation to buffer, Ctrl+E executes
Alt+S sesh-sessions Sesh session switcher (same as prefix + g but in-shell)
Alt+C fzf cd Fuzzy cd into a directory (built-in fzf)
Ctrl+T fzf file Insert fuzzy-matched file path at cursor
Ctrl+R fzf history Fuzzy search shell history

Inside tools-picker (Alt+T)

Key Action
Enter Paste invocation to buffer (safe — runs when you press Enter again)
Ctrl+E Execute tool directly (for safe TUI tools: btop, lazygit, etc.)
Ctrl+/ Toggle preview (tldr or --help)

Inside sesh-sessions (Alt+S)

Key Action
Ctrl+A/T/G/X/F Filter: all / tmux / configured / zoxide / find
Ctrl+D Kill selected tmux session

tv (Television)

Command Binding Action
tv tools prefix + U (tmux) CLI tools picker; Enter executes, preview shows tldr
tv sesh prefix + T (tmux) Sesh session picker; Enter connects
tv git-ops Alt+I (zsh) VSCode/GitLens Git command palette; Enter pastes to prompt, Ctrl+Y copies, Alt+E confirms + execs
tv aliases Alt+A (zsh) All runtime aliases & functions
tv files Alt+P (zsh) File/path picker
tv git-log Alt+G (zsh) Git log browser
tv env Alt+E (zsh) Environment variables
tv shell history Alt+R (zsh) tv-style history search (complements Ctrl+R fzf)

Inside any tv picker

Key Action
Tab / Shift+Tab Navigate results
Ctrl+P / Ctrl+N Move up / down
Ctrl+D Kill session (sesh channel only)

Zellij

Default mode is locked — all keys pass through to inner apps.

Binding Action
Ctrl+G Unlock Zellij command mode

On first launch, select "Unlock-First (non-colliding)" preset to avoid conflicts with Neovim and coding agents.


macOS Notes

  • M- bindings (e.g. M-c, M-t, Alt+T) require your terminal to send Option as Meta/Esc+.
  • Ghostty / cmux: macos-option-as-alt = left (managed in dot_config/ghostty/config)
  • iTerm2: Preferences → Profiles → Keys → Left Option: Esc+
  • Ctrl+1..9 and Ctrl+0 require CSI-u terminal support (Ghostty, cmux, Alacritty, Kitty).