Firefox's shortcuts
A key in Vimma means one thing. Where Firefox had a shortcut on a key Vim uses, such as ctrl+w or ctrl+d, Vimma switches Firefox's off, so you never close a tab when you meant to delete a word.
What moved where
| Firefox's key | Is now | Firefox's action is on |
|---|---|---|
| ctrl+w close tab | Pane keys; delete a word in a text field | x, ctrl+b shift+x, :q |
| ctrl+u page source | Half a page up; delete to the line's start when typing | gf |
| ctrl+d bookmark | Half a page down | ctrl+b a |
| ctrl+o open file, ctrl+i page info | Back / forward, as Vim's jump list | :open file:///path; the context menu's page info |
| ctrl+h history | Backspace when typing | ctrl+shift+h |
| ctrl+k web search | Free for you | I, then type the search |
| ctrl+b bookmarks sidebar | Vimma's prefix | ctrl+b shift+b |
Everything else works as in Firefox: ctrl+t, ctrl+shift+t, ctrl+l, ctrl+f, ctrl+tab, alt+1…alt+9, ctrl+q and the rest.
Vim's keys in text fields
While you type, in a page's field, the URL bar, the : line or a filter, ctrl+w deletes the word before the caret, ctrl+u the rest of the line before it, and ctrl+h one character. ctrl+z undoes them. A page with its own use for the key, such as a web terminal, keeps it. Turn them off with insert_editing = false under [modal].
Choose your own
The list is yours in config.toml. Give a shortcut back to Firefox, or switch off every Firefox shortcut except a few:
[firefox] enable = ["ctrl+w"] # ctrl+w closes the tab again, even in a text field # or: only ctrl+t, ctrl+l (and ctrl+q) stay Firefox's # disable = "all" # enable = ["ctrl+t", "ctrl+l"]
about:vimma lists every Firefox shortcut that is off right now.
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.
Firefox's own shortcuts
Firefox binds some of the keys Vimma and Vim use. So that the two never overlap, those Firefox shortcuts are off in every mode: in insert mode, in the URL bar, and when Vimma lets a key pass (ctrl+w with one pane).
| Key | Firefox's action, now off | Why it is off | Where it is now |
|---|---|---|---|
ctrl+w | close tab | ctrl+w h/j/k/l panes; delete a word when typing | x, ctrl+b shift+x, :q |
ctrl+u | view page source | half page up; delete to the line's start | gf |
ctrl+h | history sidebar | backspace when typing | ctrl+shift+h (the Library's history) |
ctrl+d | bookmark this page | half page down | ctrl+b a |
ctrl+o | open a file | history back | :open file:///path, the File menu |
ctrl+i | page info | history forward | the page's context menu, View Page Info |
ctrl+k | web search | Vim's insert ctrl+k, readline's kill to the end | I, then type the search |
ctrl+b | bookmarks sidebar | Vimma's prefix | ctrl+b shift+b (Vimma's bookmarks panel) |
ctrl+e and ctrl+y (scroll a step) are on the list too; Firefox binds neither on Linux (its second web-search key is ctrl+j there, and downloads is ctrl+shift+y), so nothing changes. Every other Firefox shortcut works as before: ctrl+t, ctrl+shift+t, ctrl+n, ctrl+l, ctrl+f, ctrl+tab, alt+1..9, ctrl+plus, ctrl+q, F5, and so on.
Vimma turns them off at startup by disabling Firefox's own <key> elements (#mainKeyset), with no change to Firefox's code; about:vimma lists each one that is off (key, Firefox's id and command) under "Firefox shortcuts off", and the chords on the list that Firefox does not bind. Change the list in config.toml:
schema = 2
[firefox]
disable = ["ctrl+b", "ctrl+d", "ctrl+e", "ctrl+h", "ctrl+i", "ctrl+k", "ctrl+o", "ctrl+u", "ctrl+w", "ctrl+y"]
enable = []
- **
disable** is a list of keys, which replaces the default list (disable = []gives every shortcut back), or"all": every Firefox shortcut withctrl,altormetaexceptctrl+q(quit;cmd+qon macOS)."all"leaves plain keys (F5,F11,F3,Escto stop loading) and the text keys the field itself runs (ctrl+c,ctrl+v,ctrl+z,ctrl+a). It also leaves what is not one of the window's shortcuts: tab switching (ctrl+tab,ctrl+pagedown) and the developer tools' keys. - **
enable** is a list of keys that stay Firefox's whateverdisablesays:disable = "all"withenable = ["ctrl+t", "ctrl+l"]keeps just those two (andctrl+q). A Firefox shortcut you enable on a text-field key wins over it:enable = ["ctrl+w"]closes the tab from a text field again. - A key must have
ctrl,altormeta, or be a function key (f5); anything else, or a key that does not parse, is an error at its line.
Keyboard layouts
A binding names a character, and the character counts, not the keys that type it. On a Finnish or German layout { is AltGr+7 on Linux and Windows and Option+shift+8 on a Mac, and it matches a { binding (copy mode's { and }) the same as on a US layout. Vimma treats a character typed with AltGr or Option as that character, the way shift is already part of ? or G. A real alt chord stays one: alt+1 is still alt+1, and a ctrl or ctrl+alt chord on a key that types its own character (ctrl+w, ctrl+alt+] on a US layout) keeps its modifiers. Windows' ctrl+alt stand-in for AltGr counts as AltGr when it types another character.
A dead key (^, ¨, ´ on a Finnish layout) types nothing by itself, so it matches no binding: GTK reports it as Dead. Bindings that use one have a second key for those layouts, such as ctrl+6 for ctrl+^ (Workspaces as Vim buffers).
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).