Split panes
Split the window to see up to four pages side by side. Each page in the split is a pane, and tmux's keys after ctrl+b move between them.
Pane keys
| To | Press |
|---|---|
| Split right / down | ctrl+b v / ctrl+b - |
| Split along the longer side (a spiral, as in Hyprland) | ctrl+b enter |
| Rearrange into the next layout preset | ctrl+b space, or :layout tiled |
| Move to the pane left / below / above / right | ctrl+b h j k l, or ctrl+w h … in normal mode |
| Zoom the pane to the whole window, and back | ctrl+b z |
| Close the pane (its tab stays open) | ctrl+b x |
| Swap with the pane left / below / above / right | ctrl+b shift+h j k l |
| Resize | ctrl+b r, then h j k l; Esc when done |
What to expect
- A new pane opens the start page with the URL bar focused: type where it should go.
- The focused pane has a coloured border, and the status bar says
pane 2/2. Page keys such as j, H and r act on it. Clicking a pane focuses it too. - Closing a pane keeps its tab: it is still in the workspace, and ctrl+b g finds it.
- Four panes at most. Change that with
[panes] maxin config.toml. - Each workspace keeps its own split, and a restart brings it back as you left it.
Tiling layouts
As in tmux, ctrl+b space moves the panes you have into the next preset: even-horizontal, even-vertical, main-vertical, main-horizontal, tiled and dwindle. The status bar names the one you get. No page reloads: each keeps its scroll position, form text and history. In the main-* presets the focused pane is the big one, and each workspace remembers its last preset.
Resizing
ctrl+b r enters resize mode (the badge says RESIZE). l makes the pane wider, h narrower, j taller and k shorter, 5 % at a time; 4l is four steps. Esc, Enter or q leave. Without the mode, ctrl+w >, ctrl+w <, ctrl+w + and ctrl+w - resize one step, as in Vim.
All the keys for this page
The default bindings, as Vimma's own ctrl+b ? overlay lists them. Name is the action's name, which you use to remap it or to run it as a : command. Every key is on the keys page.
Panes (27)
| Action | Keys | Name |
|---|---|---|
| Split right | ctrl+b v | split_vertical |
| Split down | ctrl+b - | split_horizontal |
| Focus pane to the left | ctrl+b hctrl+w h | focus_pane_left |
| Focus pane below | ctrl+b jctrl+w j | focus_pane_down |
| Focus pane above | ctrl+b kctrl+w k | focus_pane_up |
| Focus pane to the right | ctrl+b lctrl+w l | focus_pane_right |
| Swap with pane to the left | ctrl+b shift+hctrl+w H | swap_pane_left |
| Swap with pane below | ctrl+b shift+jctrl+w J | swap_pane_down |
| Swap with pane above | ctrl+b shift+kctrl+w K | swap_pane_up |
| Swap with pane to the right | ctrl+b shift+lctrl+w L | swap_pane_right |
| Zoom pane | ctrl+b zctrl+w o | zoom |
| Close pane; the last pane closes the tab | ctrl+b x | close_pane |
| Resize mode | ctrl+b r | resize_mode |
| Leave resize mode | escresizeenterresizeqresize | resize_exit |
| Make pane narrower | ctrl+w <hresizeleftresize<resize | resize_narrower |
| Make pane wider | ctrl+w >lresizerightresize>resize | resize_wider |
| Make pane taller | ctrl+w +jresizedownresize+resize | resize_taller |
| Make pane shorter | ctrl+w -kresizeupresize-resize | resize_shorter |
| New pane, along the longer side | ctrl+b enter | new_pane |
| Next layout | ctrl+b space | next_layout |
| Apply a layout preset by name (:layout name) | no default key | select_layout |
| Layout: all side by side | no default key | layout_even_horizontal |
| Layout: all stacked | no default key | layout_even_vertical |
| Layout: main pane left, rest stacked | no default key | layout_main_vertical |
| Layout: main pane on top, rest below | no default key | layout_main_horizontal |
| Layout: a grid | no default key | layout_tiled |
| Layout: a spiral (dwindle) | no default key | layout_dwindle |
Details
Everything below is Vimma's own user guide for this topic, in full: every edge case and exception. You do not need it to get started.
Panes and tabs
Clicking into a pane focuses it, as ctrl+b h/j/k/l would. So does selecting a pane's tab any other way (the ctrl+b g picker, ctrl+tab, alt+1..9): the status bar's pane n/m and the URL bar follow, and a zoom ends, as it does when a pane key moves. Selecting a tab that no pane shows (the picker, ctrl+tab, alt+1..9, ctrl+t, a link opened in a new foreground tab) shows it in the focused pane: the split stays, and the tab that pane showed stays open in the workspace. A pinned tab shows alone; selecting a pane's tab brings the split back.
A split made outside Vimma (Firefox's own split-view command, an extension, or a restored Firefox session) becomes the workspace's panes: its tabs side by side in its order, at the widths Firefox gave them, with the selected tab's pane focused. The pane keys then work on it, and the workspace keeps it like any other split. If such a split's tabs are in different workspaces, or the workspace already has a split, Vimma separates its tabs again and the status bar says why; the tabs stay in their workspaces. Separating a split outside Vimma closes its panes.
Resize mode
With two panes or more, ctrl+b r enters resize mode and the status bar says RESIZE. Each key moves the focused pane's nearest divider by 5 % of its split: l (or →, >) makes the pane wider, h (←, <) narrower, j (↓, +) taller, k (↑, -) shorter. A count repeats the step: 4l is 20 %. Growing borrows from the nearest neighbour first, then the next one; no pane gets smaller than 10 % of its split. Esc, Enter or q leave the mode. The mode is modal like the bindings overlay: the page sees none of its keys, and other keys do nothing. ctrl+b keys still work in it. With one pane, ctrl+b r says so and does nothing.
Without the mode, ctrl+w >, ctrl+w <, ctrl+w + and ctrl+w - resize by one step in normal mode (3 ctrl+w > by three), as in Vim. A config can rebind the mode's keys in [modal.resize].
Layouts
Panes tile as in tmux, with one idea from Hyprland. ctrl+b enter is tmux's split-window without a direction to choose: it splits the focused pane along its longer side, so a wide pane gets a neighbour on its right and a tall one a neighbour below. From one pane, three presses make a spiral: side by side, then the right half stacked, then its lower quarter side by side. The new pane opens the start page and has focus; past [panes] max it is refused with the usual notice. ctrl+b v and ctrl+b - still split right and down.
ctrl+b space is tmux's next-layout: it rearranges the panes you have into the next preset, and the status bar shows its name for a moment (layout: tiled):
| Preset | The panes |
|---|---|
even-horizontal | all side by side, equal widths |
even-vertical | all stacked, equal heights |
main-vertical | the focused pane large on the left, the others stacked on the right |
main-horizontal | the focused pane large on top, the others side by side below |
tiled | a grid: 2×2 at four panes, two over one at three |
dwindle | a spiral: each pane takes half of what is left, along the longer side |
After dwindle it starts again at even-horizontal. Each workspace remembers the last preset it used, across a switch and a restart, so ctrl+b space goes on from there; splitting, closing, swapping or resizing panes afterwards keeps that name, as tmux does.
Pages stay as they are. A preset moves the pages you have into new places; none is reloaded, and each keeps its scroll position, form text and history.
Focus and zoom: the focused pane keeps focus, and its page has the keys afterwards. A zoomed pane is unzoomed first, as in tmux. The main pane of
main-*is the focused one (tmux uses the first): focus a pane and pickmain-verticalto make it the big one. The other panes keep their order after it.Sizes: presets share space equally, except the main pane, which takes 60 % (
[panes] main_size). Resize mode andctrl+w < > + -work on the result as on any split.By name:
:layout tiledpicks a preset (Tab completes the names), and:layoutalone isctrl+b space. Each preset is also an action to bind inconfig.toml, unbound by default:layout_even_horizontal,layout_even_vertical,layout_main_vertical,layout_main_horizontal,layout_tiled,layout_dwindle:[keys] layout_tiled = ["prefix+alt+t"] layout_main_vertical = ["prefix+alt+m"]
- With one pane there is nothing to arrange:
ctrl+b spacesays so. With more than 10 panes ([panes] maxup to 16) the even presets would make panes narrower than a tenth and are refused with the reason;tiledanddwindlealways fit. - **
[panes] layout** sets whatctrl+b enterdoes:"dwindle"(the default) as above, or"manual", where it splits right likectrl+b vand the tree changes only the way you say. Presets work the same either way.
Known limits
Vimma is pre-alpha. What does not work yet, or works with a catch, is listed on the known limits page:
The guide at the top is written for this site; the details are built from Vimma's docs/guide.md and bindings.md at 1050bcc (2026-10-10).