How to arrange multiple terminal windows on a Mac
Use splits for terminals you need to see together, tabs for ones you check occasionally, and separate windows when they belong next to other apps. iTerm2, Ghostty, WezTerm and kitty all split a window into panes with real separate shells; Terminal.app's split only shows two views of the same session. Past three or four visible terminals, a window manager does a better job than splits.
Tabs, splits or windows?
| Good for | Downside | |
|---|---|---|
| Tabs | Sessions you glance at now and then | Only one visible at a time |
| Splits (panes) | Two to four sessions you watch together | Panes get small; the terminal app owns the layout |
| Windows | Sessions that sit beside other apps (a server log next to the browser) | They overlap unless something arranges them |
Splits in each terminal
| Terminal | Split right | Split down | Notes |
|---|---|---|---|
| iTerm2 | ⌘D | ⌘⇧D | Move between panes with ⌘⌥ plus an arrow |
| Ghostty | ⌘D | ⌘⇧D | Native Mac app, splits and tabs built in |
| WezTerm | Configurable | Configurable | Splits and layouts set in its Lua config |
| kitty | Configurable | Configurable | Layouts such as tall and grid in its config file |
| Terminal.app | ⌘D | — | Splits the view of the same session, for scrolling back; not a second shell |
So if you're on Terminal.app and want two shells side by side, use two windows or two tabs, or switch terminals.
Many terminals at once
Some jobs need more than four: a dev server, a test watcher, logs from two services, a database shell, and these days several AI coding agents each working in their own repo or worktree. Splits stop working at that point; each pane is too small to read, and resizing one shrinks the others.
Options:
- One window per job, on a big monitor, tiled with macOS 15's Fn⌃ arrows or a tiling window manager.
- tmux with a session per project, so you can detach and reattach. See tmux or a window manager.
- A scrolling window manager, where each terminal window gets its own column at a readable width, and you scroll to the rest.
Terminals on a strip
Ribbon puts every window in a column on a horizontal strip that's wider than the screen. For terminal-heavy work:
- One window per agent or service. Each gets a column at a readable width, say a third of the screen. Open a fifth and it becomes a fifth column, not a fifth sliver.
- Stack related terminals in one column with ⌃⌥]: the server above its log. ⌃⌥⇧= / - sets their heights.
- Tab a column with ⌃⌥⇧T to keep several terminals in one column, one visible at a time.
- Jump straight to one with ⌃⌥1–9, or move along with ⌃⌥H / L.
- Script it: Ribbon has a
ribbon://URL scheme and a command-line tool.
The strip indicator shows an icon per window, so you can see how many sessions are running and where. Try the strip in the live demo; Ribbon is $9.99 once.
Small things that help
- Title your tabs and windows by job (most terminals let you rename a tab, or set the title from the shell) so switchers show "api server" instead of "zsh".
- Different colours per profile for production shells, so you never confuse them.
- Keep the font size readable rather than squeezing in more panes; more columns you can scroll to beats more panes you can't read.
FAQ
How do I split the terminal on a Mac?
In iTerm2 and Ghostty, ⌘D splits right and ⌘⇧D splits down. Terminal.app's ⌘D only splits the view of one session.
How do I see several terminal windows at once on a Mac?
Tile them with macOS 15's Fn-Control arrows, use splits inside one terminal, or use a window manager that keeps each window in its own column.
What's a good setup for running several AI coding agents?
One terminal window per agent, each in its own worktree or repo, at a readable width. A scrolling window manager keeps them side by side without shrinking them as you add more.