Splits
Divide a tab into multiple terminal surfaces side by side or stacked, navigate between them, resize them, and zoom one to fullscreen.
Splits let you carve a tab into multiple terminal surfaces that share the window. Each split is a full terminal with its own shell, working directory, and title. Splits live inside tabs, so you can mix horizontal, vertical, and stacked layouts within a single window.
Like tabs, splits use native UI primitives: WinUI 3 on Windows, and GTK 4 on Linux.
A new split is created with the
new_split action, which
takes a direction argument:
| Argument | Resulting split |
|---|---|
right | New surface to the right |
left | New surface to the left (no effect on Windows) |
down | New surface below |
up | New surface above (no effect on Windows) |
auto | Split along the larger axis of the current surface |
keybind = ctrl+shift+d=new_split:right
keybind = ctrl+shift+e=new_split:down
keybind = ctrl+shift+a=new_split:auto
Note
The Windows app only implements
rightanddown. The config parser acceptsnew_split:leftandnew_split:up, but the app drops those two directions when the action arrives, so the keybind does nothing at all. Useright,down, orautoon Windows.autois unaffected, since it resolves torightordownbefore dispatch.
auto is a good default: if the current surface is wider than it is
tall, it creates a left/right split; otherwise it creates a top/bottom
split. This keeps newly created splits readable without you having to
think about the current geometry.
A new split inherits the working directory of the surface it was created from when shell integration is active.
Move focus between splits with
goto_split. It takes
either a direction or a sequential token:
| Argument | Behavior |
|---|---|
right, left, up, down | Focus the adjacent split in that geometric direction |
previous, next | Focus the previous or next split in layout-tree order |
keybind = ctrl+alt+h=goto_split:left
keybind = ctrl+alt+j=goto_split:down
keybind = ctrl+alt+k=goto_split:up
keybind = ctrl+alt+l=goto_split:right
Directional navigation uses the spatial layout: pressing goto_split:right
focuses the split whose left edge is closest to the right edge of the
currently focused split.
previous and next walk the split tree instead, visiting the splits
depth-first from left to right rather than in the order you created
them. Both wrap, so repeatedly pressing next cycles through every
split in the tab and returns to where it started. Unlike the directional
arguments, they always move somewhere, even when no split lies in the
direction you wanted.
Use resize_split to grow
or shrink the current split by a pixel amount. The argument is a
direction and a pixel count, joined by a comma:
keybind = ctrl+shift+left=resize_split:left,10
keybind = ctrl+shift+right=resize_split:right,10
keybind = ctrl+shift+up=resize_split:up,10
keybind = ctrl+shift+down=resize_split:down,10
A resize_split:right,10 grows the current split 10 pixels to the right,
shrinking the neighboring split on that side by the same amount.
equalize_splits
restores every split in the current tab to equal size. There's no
argument:
keybind = ctrl+shift+equal=equalize_splits
This is handy after a series of resizes or after closing a split has left the layout uneven.
toggle_split_zoom
expands the focused split to fill the entire tab, hiding the other
splits temporarily. Toggling it again restores the previous layout.
keybind = ctrl+shift+enter=toggle_split_zoom
On Windows, a restore button appears in the top right corner of the zoomed split itself so you don't lose track of the fact that other splits are hidden. Clicking it unzooms. The tab strip is left unchanged.
By default, anything that moves focus or changes the layout unzooms the
split again. Set
split-preserve-zoom to
navigation if you'd rather keep the zoom while navigating, in which
case the newly focused split becomes the zoomed one.
Use close_surface to
close just the focused split. The surrounding splits expand to reclaim
the freed space.
keybind = ctrl+shift+x=close_surface
Closing the last split in a tab closes the tab. On Linux,
confirm-close-surface
makes splits with a running process trigger a confirmation dialog
first. The Windows app does not read that option, so it has no effect
there; the only prompt Windows shows is when a tab holding more than
one split is closed outright.
On Windows, the bar between splits is a drag handle. Click and drag the
separator to resize splits with the mouse. This is implemented by
Splitter.cs in the Windows port. The same is true on Linux via its
native split view.
| Option | Purpose |
|---|---|
split-divider-color | Color of the separator between splits |
unfocused-split-opacity | Fade unfocused splits to draw attention to the focused one |
unfocused-split-fill | Color overlay applied to unfocused splits |
split-preserve-zoom | Keep a split zoomed while navigating between splits (off by default) |
split-inherit-working-directory | New splits inherit the source surface's working directory |
window-inherit-font-size | New splits inherit the source surface's adjusted font size |
confirm-close-surface | Confirm before closing a split with a running process. Not read by the Windows app |
| Action | Purpose |
|---|---|
new_split | Create a new split (right, left, up, down, auto; left and up have no effect on Windows) |
goto_split | Focus an adjacent split |
resize_split | Resize the current split by a pixel amount |
equalize_splits | Restore all splits to equal size |
toggle_split_zoom | Expand the current split to fill the tab |
close_surface | Close the focused split |
A quick mental model:
- A window is the OS-level window. New windows are independent and can live on different displays.
- A tab lives inside a window and gets its own entry in the tab bar. Only one tab in a window is visible at a time.
- A split lives inside a tab and shares screen real estate with other splits in the same tab. All splits in a tab are visible at once (unless one is zoomed).
If you mostly want to alt-tab between sessions, use tabs. If you want to see multiple sessions at the same time, use splits. The two compose: each tab can have its own split layout.