Everything Vim — Chrome extension · Free · Open source

Navigate any page like Vim. Edit every text surface like Vim — text fields, Google Docs, and code editors — with a handoff you never feel.

Free · No signup · Press ? on any page for help

01 — Try it live

Don't read docs. Press keys.

Three live miniatures of the extension, running on this page. Pick a step, click in, and type.

demo / morning-readingHints

Click Show hints — or focus the page and press f — then press the highlighted letter.

Idle

Tip: this is a miniature web page. Hints work exactly like the extension.

f show hintsA–F followShift+F new tabEsc dismiss

02 — How it works

Three Vims. One router. Zero fights.

One capture-phase listener decides who owns each keystroke. Editor keys never leak into page scroll, and page keys never type into your buffer.

01Router owns the pageHints, Vomnibar, tabs, marks, find, history — retriggered per frame.
02Direct owns the fieldOperators and text objects run on the buffer itself. Esc is normal, i is insert.
03Synthetic + overlayDocs canvas through synthetic keys. Code editors in an exact surface, committed once.
handoff / who owns the keystrokeMatrix
FocusOwnerKeys
PageEverything Vimhjkl scroll · f hints · o vomnibar
TextareaDirectEsc normal · i insert · dw u .
Docs canvasSyntheticboots normal · tracks insert for .
Monaco / CMOverlayEsc opens · Esc saves · ^C drops

Editing keys are consumed with stopImmediatePropagation — navigation never sees them.

03 — Product

Built for hands that never leave home row.

Navigate

Everything Vim page control

Hinted links, Vomnibar, tabs, marks, find, and history — the full upstream binding set, retriggered per frame.

Edit

Modal editing in every field

Operators, text objects, visual modes, and dot-repeat — direct buffer surgery where the DOM allows it.

Docs

Google Docs, exactly

Canvas editing through synthetic keys and selection motion. Boots in normal mode, because Docs is always editing.

Code

Overlay for frameworks

CodeMirror, Monaco, and ProseMirror edit in our own exact surface, then commit once. No desync, ever.

Fast at document_start · zero fetch · remappable everything · per-URL exclusions

04 — Bindings

The core set.

help / core bindingsPress ?

Move

Navigate

h j k l
Scroll / move
f F
Hint links, new tab
o O
Vomnibar, new tab
gg G
Top / bottom
/ n N
Find, next, prev

Act

Operators

d c y
Delete, change, yank
iw i" a(
Text objects
x p P
Char, paste after/before
u ctrl+r
Undo, redo
. J ~
Repeat, join, case

Modes

Edit and select

Esc
Normal mode
i a o
Insert variants
v V
Visual, line visual
gi
Focus first input
ctrl+;
Force overlay editor

05 — Install

Up in a minute.

  1. 01

    Add it from the Chrome Web Store. One click, no signup, free forever.

  2. 02

    Press ? on any page. The help dialog lists every navigation binding.

  3. 03

    Click any text field, press Esc. You are in normal mode. i types again.

Esc

The only shortcut you need on day one.

Chrome Web Store · Everything Vim · MIT lineage

“Hints for links, real motions in every input, and Docs finally behaves. I uninstalled three extensions.”
Staff Engineer

06 — Questions

FAQ.

Which sites does it work on?

Every site. Page navigation runs on all URLs; text editing activates in any textarea, text input, contenteditable, Google Docs document, or supported code editor.

How does the handoff avoid conflicts?

One capture-phase router runs before page navigation. Editing keys are consumed so navigation never sees them; otherwise the router stays silent. Visible overlays always win, except the commit/discard overlay which owns the keyboard.

Why an overlay for code editors?

Framework editors own their document model — in-place key surgery desyncs it. Editing in an exact textarea and committing once is the only correct approach.

Can I remap keys or exclude sites?

Yes. Custom key mappings, the shared motions JSON, and per-pattern exclusion rules in Options.