Workspaces as containers
A workspace is a set of tabs with its own cookies and logins, like a separate browser profile one key away. Keep work in one and personal browsing in another: signing in to a site in one does not sign you in to it in the other.
Under the hood each workspace is a Firefox container. ctrl+b ( and ctrl+b ) step through them, as tmux's session keys do. A window shows one workspace at a time; the others' tabs are hidden, not closed, and everything comes back after a restart.
Make your first workspace
- Press ctrl+b shift+n. The command line opens with
:wsnewtyped for you. - Type a name, such as
work, and press Enter. You are now in it: the status bar shows● 2:work. - Sign in to something. Press ctrl+b ( to go back to
main: you are not signed in there. - ctrl+b ) takes you forward to
workagain.
Workspace keys
| To | Press |
|---|---|
| Next / previous workspace | ctrl+b ) / ctrl+b ( |
| Pick from a list | ctrl+b w |
| Back to the previous workspace, and again to toggle | ctrl+^ or ctrl+6, as Vim's alternate buffer |
| Next / previous, Vim style | ]w / [w, or :wn / :wp |
| Go to one by name or number | :ws work, :ws 2, :ws # (the previous one) |
| New workspace | ctrl+b shift+n |
| Rename this workspace | ctrl+b shift+w |
| Close this workspace | ctrl+b shift+d |
| Move this tab to another workspace | :wsmove work, or m in the ctrl+b w list |
Good to know
- Closing a workspace you made deletes its cookies, logins and site data. Vimma asks first; press y to close it, anything else to keep it.
- Moving a tab reopens it in the other workspace: it keeps its address, but loses its back/forward history and anything typed into forms.
- New tabs open in the workspace you are in. A link you click opens in the page's own workspace, even in a new tab.
- Tab numbers, ctrl+b n / ctrl+b p and closing tabs stay within the workspace; ctrl+b g lists every workspace's tabs.
- If you think of a workspace as a Vim buffer, the keys follow:
:waadds one,:wdcloses one, as:baddand:bddo. On layouts where ^ is a dead key, use ctrl+6. - Each workspace has its own bookmarks folder.
- You can declare workspaces in config.toml, and send sites or apps to one automatically: see Routing.
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.
Workspaces (10)
| Action | Keys | Name |
|---|---|---|
| Next workspace | ctrl+b )]w | next_workspace |
| Previous workspace | ctrl+b ([w | previous_workspace |
| Previous workspace you were in; again toggles back (Vim's ctrl+^) | ctrl+b ^ctrl+b ctrl+6ctrl+^ctrl+6 | last_workspace |
| Switch to a workspace by name or number | no default key | switch_workspace |
| Workspace picker | ctrl+b w | workspace_picker |
| New workspace | ctrl+b shift+n | new_workspace |
| Rename workspace | ctrl+b shift+w | rename_workspace |
| Close workspace | ctrl+b shift+d | close_workspace |
| Move the tab to another workspace (reopens it there) | no default key | move_to_workspace |
| Routing rules: list them; :route add [workspace], :route move | no default key | route_rules |
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.
Workspaces
Workspaces keep the different parts of your day apart. Every tab lives in a workspace, and every workspace is a Firefox container of its own: a site you are signed in to in one workspace sees none of its cookies or storage in another. A new profile has one workspace, main; you make more as you need them (see Managing workspaces).
ctrl+b )/ctrl+b ((or]w/[w,:wsnext/:wsprev) go to the next / previous workspace in workspace order ([workspaces]inconfig.toml, then the ones you made), wrapping around, as tmux's session keys do, from every mode;:workspace workor:workspace 2goes to one by name or number. The status bar shows where you are (● 2:work).(and)are matched by the character they type, not the key:shift+9/shift+0on a US keyboard,shift+8/shift+9on a Finnish one. (ctrl+i/ctrl+uwere these keys before; they are vim's jump-forward and half-page-up keys in normal mode now.)ctrl+^(orctrl+6,ctrl+b ^) goes back to the workspace you were in before, and again toggles back (Workspaces as Vim buffers).ctrl+b w(or:workspacewith no name) opens the workspace picker.ctrl+b bor:sidebaropens the side panel: the current workspace's tabs down the left of the window.- A window shows one workspace at a time: the other workspaces' tabs are hidden, not closed. Coming back selects the tab you left, and a split comes back with its panes laid out as before, the same pane focused and its page ready for keys. Each workspace keeps its own split: splitting in one leaves the others' layouts alone. A workspace with no tabs gets a start-page tab when you switch to it.
ctrl+b 1..9,ctrl+b n/p,gt,ctrl+taband closing a tab stay within the workspace. The goto picker (ctrl+b g) is the exception: it lists every workspace's tabs, and picking one from another workspace switches there.- New tabs (
ctrl+b c,t,ctrl+t, a bookmark, a link from another app) open in the current workspace and its container. A link opened from a page keeps that page's container and so its workspace: opened in the background into another workspace, it waits there, hidden, and the status bar says where it went (opened in "work"). - A tab in a container that belongs to no workspace (Firefox's own containers, "no container", an extension's) joins the workspace you are in as a
foreigntab: it does not share that workspace's cookies and logins. The workspace picker counts it (3 tabs, 1 foreign). - A restart restores them. Each window comes back with its workspaces, their tabs, the workspace you were in, the tab you had selected in each, every workspace's split panes laid out as you left them with the same pane focused, your tab names and each page's scroll position. Tabs of other workspaces are not loaded until you first go to them; their scroll position comes back then. The same happens with "Restore previous session" and reopening a closed window.
- Pinned tabs belong to no workspace and show in every one. Vimma has no key to pin; an extension or an old session can still pin.
- Each window has its own current workspace; the workspaces themselves are shared by all windows.
Workspaces as Vim buffers
If you think of a workspace as a Vim buffer, the keys are the ones your fingers already know:
| Vim | Vimma | What it does |
|---|---|---|
ctrl+^ | ctrl+^, ctrl+6, ctrl+b ^ | Back to the workspace you were in before; toggles. |
]b / [b (unimpaired) | ]w / [w | Next / previous workspace, as ctrl+b ) / (. |
:b name, :b 2, :b# | :ws name, :ws 2, :ws # | Go to a workspace by name, number, or the previous one. |
:bn / :bp | :wn / :wp | Next / previous workspace. |
:bd [name] | :wd [name] | Close this (or the named) workspace; asks y/N. |
:badd name | :wa name | New workspace; you switch to it. |
:ls | :workspaces, ctrl+b w | The workspace picker. |
- The previous workspace is the one this window showed before the current one, however you left it (a key, a command, the picker, or selecting one of its tabs). Pressing
ctrl+^again goes back, so two presses toggle between two workspaces, as Vim's alternate buffer does; tmux users can think of it asprefix+L, the last session. Each window has its own, it is saved with the window's session (a restart or "Restore previous session" brings it back), and a window that has shown only one workspace saysno previous workspace in this window. Closing the previous workspace forgets it. ctrl+^andctrl+6work in normal mode; in a text field they are the page's.ctrl+b ^andctrl+b ctrl+6work in every mode, insert mode too.- **
^as a dead key.** On Finnish, German, French and other layouts^is a dead key: it waits for the next key to put an accent on. GTK then reports the key asDead, not^(with or withoutctrl), soctrl+^andctrl+b ^never arrive. Usectrl+6andctrl+b ctrl+6there, as Vim users on those layouts already do.]and[areAltGr+9/AltGr+8on a Finnish keyboard;]wand[wmatch them (Keyboard layouts). ]wand[ware normal-mode keys;]then waits for the next key, asgdoes.Tabafter:ws,:wdor:wsmovecompletes workspace names.- Every one of these keys can be changed in
config.toml:last_workspace,next_workspaceandprevious_workspaceunder[keys], and"<C-^>","<C-6>","]w","[w"under[modal.normal]. Thectrl+b ?overlay shows the keys you have.
Managing workspaces
| Keys | Command | What it does |
|---|---|---|
ctrl+b shift+n | :wsnew shop, :wa shop | New workspace, with a container of its own; you switch to it. |
ctrl+b shift+w | :wsrename market | Rename the current workspace (and its container). |
ctrl+b shift+d | :wsdelete [shop], :wd [shop] | Close the current (or the named) workspace, after a y/N question. |
:wsmove work / :wsmove 2 | Move the current tab to another workspace, by name or number. |
- The keys open the command line with the command typed for you (
ctrl+b shift+wwith the current name to edit). - Closing asks first, at the foot of the window:
ycloses, any other key (n,Esc,Enter) keeps it. Closing a workspace you made deletes its container, and with it its cookies, logins and site data; the question says so. A workspace from[workspaces]inconfig.tomlcannot go while it is there: closing it closes its tabs only, and it keeps its logins. Renaming one is done inconfig.tomltoo. The last workspace cannot be closed. If the workspace changes between the question and youry(sayconfig.tomlwas reloaded), nothing is closed. If you renamed its container in Firefox's Settings, its tabs and site data are kept, and the status bar says so. - A workspace name cannot be only digits: in
:wsmove 2and:workspace 2a number means the workspace's place in workspace order.config.tomlcan still name one2in[workspaces]; then2means that workspace, by name, and the workspace at place 2 is reached by its name. - Moving a tab reopens it in the other workspace's container, as Firefox's "Reopen in Container" does: its address, name and mute come along, but not its back/forward history, what you typed into forms, its scroll position, or a form submission (the page is loaded again, signed in as that workspace). A tab in a split leaves the split first. You stay in the workspace you were in.
- A workspace's container deleted outside Vimma (Firefox's Settings → Containers, or an extension) is replaced at once by a new, empty one: the workspace stays, its new tabs open in the new container, and the status bar says so. Its cookies and logins went with the old container, so its sites need a new sign-in. Tabs an extension left open in the deleted container stay in the workspace, marked
foreign. - Containers turned off (
privacy.userContext.enabled=falseinabout:config) at startup: the status bar shows a lasting error, and Vimma runs without workspaces (tabs open as in Firefox, without containers) until you set it back totrueand restart. Vimma does not turn it back on for you.
Workspace picker
ctrl+b w lists the window's workspaces over the page, in workspace order: each with its number, its name and how many tabs it has here; the one you are in says current and is selected.
| Key | What it does |
|---|---|
j / k, arrows | Move down / up. |
/ | Search: type to filter by name; Esc goes back to j/k. |
Enter | Switch to the selected workspace. |
m | Move the current tab to the selected workspace (asks first). |
Esc / q | Close the picker. |
m asks Move this tab to "work"? … y/N at the foot of the window, because a moved tab is reopened and loses its back/forward history and form data (see Managing workspaces): y moves it, any other key keeps it. If the tab or the workspace changes before your y (another tab selected, the workspace renamed or closed), nothing is moved. m on the workspace the tab is already in says so and asks nothing. To create, rename or close a workspace, use ctrl+b shift+n, shift+w and shift+d.
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).