Stage 2 — Daily Driver
Stage 2 — Daily Driver
Section titled “Stage 2 — Daily Driver”You can survive in tmux. Now learn to live in it. This stage covers the day-to-day skills: organising work across windows, splitting panes deliberately, naming things sensibly, resizing on the fly, and scrolling through history with copy mode.
🎯 Goal
Section titled “🎯 Goal”After this stage you will be able to:
- Use windows as tabs to separate roles within a project (
dev,logs,db,git). - Split, navigate, zoom, and kill panes without thinking about it.
- Name sessions and windows so a glance at the status bar tells you where you are.
- Resize panes to taste, including with the mouse.
- Scroll through scrollback and copy text without leaving tmux.
📋 Prerequisites
Section titled “📋 Prerequisites”- Stage 1 complete — you can create sessions, split panes, and detach.
- Comfortable with the prefix-key pattern (
Ctrl+a, release, next key).
🪟 Windows — tabs for your session
Section titled “🪟 Windows — tabs for your session”A window is the tmux equivalent of a browser tab. One session, many windows, each running its own shells. The status bar shows the list at the bottom:
[nafbi] 1:dev* 2:logs 3:claude 4:gitThe asterisk marks the active window.
| Keystroke | Action |
|---|---|
Ctrl+a c | Create a new window |
Ctrl+a n | Switch to next window |
Ctrl+a p | Switch to previous window |
Ctrl+a 0–9 | Jump straight to window number |
Ctrl+a , | Rename current window |
Ctrl+a w | Show interactive window picker (nice for many sessions) |
Ctrl+a & | Kill current window (confirms first) |
Convention: use windows for roles
Section titled “Convention: use windows for roles”The pattern that scales: one session per project, multiple windows per role.
Session: nafbi (the project)├── 1:dev (editor, dev server)├── 2:logs (tail -f on whatever log)├── 3:db (psql shell or db tool)├── 4:git (git status, git log, commits)└── 5:claude (claude code running here)This keeps each window single-purpose and means switching roles is a single keystroke (Ctrl+a 2 to look at logs, Ctrl+a 1 to come back to the editor).
✂️ Panes — splits inside a window
Section titled “✂️ Panes — splits inside a window”Panes are for things you want to see at the same time. Editor next to a test runner. Server output next to a curl command. Use windows for things you switch between; use panes for things you watch together.
| Keystroke | Action |
|---|---|
Ctrl+a % | Split pane vertically (creates a left/right split) |
Ctrl+a " | Split pane horizontally (creates a top/bottom split) |
Ctrl+a arrow keys | Move focus to the pane in that direction |
Ctrl+a z | Toggle zoom — make the current pane fill the window, press again to restore |
Ctrl+a q | Briefly flash pane numbers (press the number while flashing to jump to that pane) |
Ctrl+a x | Kill current pane (confirms first) |
Ctrl+a { | Swap current pane with the previous one |
Ctrl+a } | Swap current pane with the next one |
Ctrl+a ! | Promote the current pane into its own window |
Zoom is your friend
Section titled “Zoom is your friend”When you’re in a 4-pane layout but need to focus on one for a moment — Ctrl+a z. The pane fills the window. Press again to come back to the layout. No re-splitting required.
🏷️ Naming — make the status bar useful
Section titled “🏷️ Naming — make the status bar useful”Default session and window names are numbers. That tells you nothing. Name them.
| Keystroke | Action |
|---|---|
Ctrl+a , | Rename the current window |
Ctrl+a $ | Rename the current session |
You can also create a session with a name from the start:
tmux new -s nafbiAnd rename windows from inside tmux’s command prompt:
Ctrl+a :Then type:
rename-window logsNaming conventions that work
Section titled “Naming conventions that work”- Sessions = project names.
nafbi,thrivesend,parallelself,ras-kruger. Lowercase, kebab-case, short. - Windows = roles.
dev,logs,db,git,claude,tests. One word. The window list is read at-a-glance, so brevity wins. - Avoid generic names.
session1,temp,work— fine for a one-off, terrible if you have three running at once.
📏 Resizing panes
Section titled “📏 Resizing panes”Default splits are 50/50. Most of the time you want something else — bigger editor, smaller log pane.
| Keystroke | Action |
|---|---|
Ctrl+a Alt+arrow | Resize current pane in that direction by 5 cells |
Ctrl+a Ctrl+arrow | Resize current pane in that direction by 1 cell (fine adjustment) |
Ctrl+a Space | Cycle through built-in layouts |
The built-in layouts (cycle with Ctrl+a Space):
even-horizontal— equal-width columnseven-vertical— equal-height rowsmain-horizontal— one big pane on top, equal panes belowmain-vertical— one big pane on the left, equal panes on the right (great for IDE-style coding)tiled— even grid
main-vertical is the IDE feel: editor on the left, stacked terminals on the right.
Mouse mode
Section titled “Mouse mode”If you enable mouse on (Stage 3 covers this), you can drag pane borders directly with the mouse, click panes to focus them, and scroll with the wheel. For pure terminal purists this is heresy. For everyone else, turn it on.
📋 Copy mode — scrollback and selection
Section titled “📋 Copy mode — scrollback and selection”Default tmux behaviour: the mouse wheel does nothing, you can’t scroll up. That’s because tmux owns the screen. To look at output that has scrolled off, you enter copy mode.
| Keystroke | Action |
|---|---|
Ctrl+a [ | Enter copy mode |
arrow keys / h j k l | Move the cursor |
Page Up / Page Down | Scroll a page at a time |
Ctrl+u / Ctrl+d | Scroll half a page |
g / G | Jump to top / bottom of scrollback |
/ | Search forward |
? | Search backward |
n / N | Next / previous match |
v | Start selection (vi-style) |
y | Copy selection (and exit copy mode) |
q or Esc | Exit copy mode without copying |
Ctrl+a ] | Paste the most recently copied buffer |
This tutorial assumes vi-style keys in copy mode, set via set -g mode-keys vi in ~/.tmux.conf — Stage 3 wires this up.
Mac clipboard integration
Section titled “Mac clipboard integration”By default the y keystroke copies to tmux’s internal buffer, not the macOS clipboard. To get the selection into your Mac clipboard so you can paste anywhere with Cmd+V, you need:
set -g set-clipboard onin~/.tmux.conf.- A terminal that supports OSC 52 — iTerm2, Ghostty, and modern Terminal.app all do.
Stage 3 sets this up.
🎯 A typical Stage-2 workflow
Section titled “🎯 A typical Stage-2 workflow”This is what a fluent tmux session looks like in practice, end to end:
# 1. Start the daytmux new -s nafbi
# Inside the session:# Window 1 named 'dev', split into two panes — editor + shellCtrl+a , # rename window to 'dev'Ctrl+a % # split vertically# (left pane runs 'nvim .', right pane runs the dev server)
# 2. Add a logs windowCtrl+a c # new windowCtrl+a , # rename to 'logs'tail -f /var/log/syslog
# 3. Add a git windowCtrl+a cCtrl+a , # rename to 'git'
# 4. Add a claude windowCtrl+a cCtrl+a , # rename to 'claude'claude
# 5. Switch back to devCtrl+a 1
# 6. End of day — just detachCtrl+a dTomorrow:
tmux attach -t nafbiEverything is exactly as you left it.
➡️ Next steps
Section titled “➡️ Next steps”You can drive tmux. Now make it yours. Stage 3 walks through ~/.tmux.conf, the recommended config additions, Mac terminal setup, multi-session workflow, and the iPad/Termius polish.
Continue to Stage 3 — Customisation.