Vim Shortcuts in Chrome: Vimium vs Surfingkeys (2026)

Vim style navigation in Chrome means driving the browser the way Vim drives text: j/k to scroll, f to put a letter label on every link and type the label to click it, o to open a URL, x to close a tab. Chrome ships none of this — you get it from an extension, and in 2026 the three serious options are Vimium, Vimium C and Surfingkeys.

I loaded all three sources, read their default keymaps straight from the code, and ran Vimium 2.4.2 on Chrome 156 to measure link hints and find the pages where vim shortcuts in Chrome simply stop working. If you want the broader keyboard-only setup (omnibox, extension hotkeys, drills), that lives in building a keyboard driven browser workflow; this post is only about the vim layer.

Test setup: macOS, Chrome 156.0.8078.48 for the store data, Chrome for Testing 156.0.8078.47 for the hands-on runs (branded Chrome ignores the --load-extension switch, so an unpacked build had to run in the testing build of the same release). Vimium was the v2.4.2 tag from its GitHub repo — the same version as the Web Store listing.

Vimium vs Vimium C vs Surfingkeys at a Glance

Numbers from the Chrome Web Store on 27 October 2026; hint characters and permissions from each project's source.

VimiumVimium CSurfingkeys
Store version2.4.22.12.21.19.3
Last store updateMar 10, 2026Apr 16, 2025Oct 19, 2026
Users500,00080,00030,000
Rating4.8 (4.6K ratings)4.8 (224 ratings)4.4 (291 ratings)
Link hint characterssadfjklewcmpgh (14)sadjklewcmpgh (13)asdfgqwertzxcvb (15)
Configurationmap/unmap lines in optionsmap/unmap + many advanced optionsJavaScript settings file
Extra permissions beyond the basicsbookmarks, history, searchclipboard, tab groups; bookmarks/downloads/cookies optionalclipboard, downloads, top sites, native messaging
Best forClassic keymap, least setupVimium users who want more knobsPower users who want to script it

All three need access to every site (<all_urls>). That is not sloppiness: drawing link hints means injecting a script into every page you visit. It is also the main thing to weigh before installing any of them — see the safety FAQ below.

A note on Tridactyl, which shows up in every "vim browser" thread: it is a Firefox extension. There is no Chrome version, so it is out of scope here.

Link Hints: The Feature That Justifies the Install

Scrolling with j and k is nice. Link hints are the reason people stay. Press f and every clickable element gets a short yellow label; type the label and Vimium clicks it.

Vim style navigation in Chrome: Vimium link hints labelling every link on the Wikipedia Vim article after pressing f, tested on Chrome 156

How many keys does that really take? I pressed f on three busy pages and counted the hint labels Vimium generated:

PageClickable targets hinted1-letter labels2-letter labelsMax keystrokes to click
Wikipedia — Vim (text editor)1037963 (f + 2)
GitHub — philc/vimium repo1027953
Hacker News front page16021583

With 14 hint characters, two letters cover up to 196 targets, so on almost any normal page you are never more than three keystrokes from any link — and your hands never leave home row. On a small test page with four links, every label was a single letter, and typing it navigated immediately (f, f followed the second link in my run).

Variants worth learning on day one:

  • F — open the link in a new tab
  • yf — copy a link's URL instead of opening it
  • Alt+f — open several links in a row in background tabs
  • gi — jump straight to the first text field on the page

The Default Keymaps, Side by Side

This is where the three extensions quietly diverge. Vimium C keeps almost all of Vimium's bindings; Surfingkeys reuses familiar letters for different actions, which bites anyone who switches.

ActionVimiumVimium CSurfingkeys
Scroll down / upj / kj / kj / k
Half page down / upd / ud / ud / e (also u)
Top / bottom of pagegg / Ggg / Ggg / G
Link hints (current tab)fff
Link hints (new tab)FFaf (active) / gf (background)
Copy current URLyyyyyy
Copy a link URL via hintsyfyfya
Open URL / bookmark / historyo (O new tab)o (O new tab)go (t new tab)
Search open tabsTTT
Back / forwardH / LH / LS / D
Previous / next tabJ / K (gT / gt)J / K (gT / gt)E / R
New tabtton
Close / restore tabx / Xx / Xx / X
Find on page/, then n / N/, then n / N/, then n / N
Show all bindings???

Three traps if you move between them:

  1. F in Surfingkeys is not "open in new tab". It goes forward in the tab's history. Your Vimium muscle memory opens the wrong thing.
  2. yf in Surfingkeys copies form data as JSON, not a link URL. The link-copy command there is ya.
  3. t in Surfingkeys opens the URL bar, not a blank tab. A new tab is on.

The ? key is the fastest way to learn any of them — it opens an overlay listing every active binding, including your custom ones:

Vimium help dialog opened with the question mark key, listing default key bindings for scrolling, the Vomnibar, find, history and tab commands

The Vomnibar: A Second Address Bar With Tab Search

Vimium's o opens the Vomnibar, an overlay that searches your history, bookmarks and open tabs at once. T restricts it to open tabs, b to bookmarks. Typing "vim" below pulled matching open tabs and history entries into one list, with each result labelled by source.

Vimium Vomnibar after typing vim, showing matching open tabs and history entries labelled tab and history

It overlaps with Chrome's own @tabs and @history scopes and with tab search (Ctrl+Shift+A), covered in Chrome keyboard shortcuts for 2026. The difference is that the Vomnibar opens without moving focus to the browser chrome, so your next keystroke still goes to Vimium. Surfingkeys has the equivalent "Omnibar" (t, go, b) plus a : command palette that Vimium lacks.

Where Vim Shortcuts in Chrome Stop Working

Every vim extension runs as a content script, and Chrome refuses to inject content scripts into its own pages. I opened twelve kinds of pages with Vimium enabled, pressed f, and counted the hints:

PageLink hints after fVim keys work?
Normal websites (Wikipedia, GitHub, Hacker News)102–160Yes
A file:// directory listing37Yes*
Chrome Web Store (chromewebstore.google.com)0No
chrome://settings, chrome://extensions0No
New tab page (chrome://newtab)0No
PDF in Chrome's built-in viewer0No
view-source: pages0No
about:blank and data: URLs0No

*Unpacked test build. A store install needs Allow access to file URLs switched on in the extension's details page.

The new tab page is the gap you notice most, because it is where every session starts. Vimium's workaround is its own blank new tab page (default for the t command, with an option to open the Vomnibar on load); its options page notes that making every new tab work needs a separate Vimium new tab extension. For PDFs, Surfingkeys has the better story: per its README it bundles a pdf.js-based viewer so its keys keep working in PDF files.

This is also why a vim layer never fully replaces native shortcuts. On these pages you fall back to Chrome's own bindings — the Chrome shortcuts cheat sheet (PDF) is the one-page version to keep nearby.

Conflicts With Web Apps — Measured

Vim extensions steal single-letter keys, and many web apps want those same keys. I wrote a test page that logged every keydown the page itself received, then typed with Vimium in normal mode:

  • j and k (Vimium commands) — never reached the page.
  • z (the first key of Vimium's zi/zo zoom commands) — swallowed while Vimium waited for the second key.
  • q and Q (no Vimium binding) — passed through to the page normally.
  • With a text field focused, typing jfk put "jfk" in the field — Vimium switches to insert mode automatically. Esc dropped focus back to the page so vim keys worked again.

So the rule is simple: any key Vimium binds, the site never sees. That is fine on a blog and painful in Gmail, Google Docs, Notion, Linear or Figma. Vimium's answer is exclusion rules — a URL pattern plus, optionally, only the keys to hand back to the page. It ships with exactly one rule out of the box: disabled on mail.google.com.

Vimium Options page in Chrome showing the default Gmail exclusion rule, custom key mappings, custom search engines and new tab URL settings

A practical setup: exclude your three most keyboard-heavy web apps entirely, or pass through just the keys they need (for example jk on a site that uses them for its own list navigation). Surfingkeys handles the same problem in its JavaScript config, which is more powerful and more work.

Remapping Keys Without Losing Your Mind

All three let you change bindings, but at different levels:

  • Vimium — a plain text box in Options. map <key> <command>, unmap <key>, unmapAll. The "See all available commands" link lists every command name.
  • Vimium C — the same syntax, plus a long list of advanced options (hint behaviour, Vomnibar style, per-command options).
  • Surfingkeys — a JavaScript file using api.map, api.mapkey and api.unmap, so you can write your own commands, not just move existing ones.

Two habits that save trouble:

  1. Keep Esc sacred. It is your way out of insert, visual and hint modes in all three.
  2. Don't remap Chrome's own shortcuts into the vim layer. Cmd+L, Cmd+T, Cmd+W still work everywhere, including the pages where vim keys don't. If you're on a Mac, the full native list is in Chrome shortcuts for Mac.

Browser-level hotkeys for other extensions are a separate system entirely, configured at chrome://extensions/shortcuts — see custom keyboard shortcuts in Chrome.

Which One Should You Install?

If you...Pick
Are new to vim style navigation in ChromeVimium — biggest user base, sane defaults, help overlay
Already use Vimium and want more optionsVimium C — same keys, more settings (note: last store update April 2025)
Want a scriptable config, a command palette, PDF supportSurfingkeys — accept the different keymap
Only want to copy URLs and switch tabs by keyboardNo vim extension — native shortcuts plus one single-purpose hotkey

That last row matters. Vim extensions ask for access to everything you browse. If what you actually miss is one or two actions, a narrow extension is the lower-risk fix. Copying the current URL is the classic example: yy in Vimium does it, but brings the whole all-sites permission set along. Ctrl+Shift+C does only that one job, as a Chrome keyboard command, with clipboard permission only.

Frequently Asked Questions

Can Chrome do vim style navigation without an extension? No. Chrome has no modal mode, no j/k scrolling and no link hints. You need an extension such as Vimium, Vimium C or Surfingkeys, all of which inject a content script into every page.

Which is better, Vimium or Surfingkeys? Vimium if you want the classic keymap and the least setup. Surfingkeys if you want a JavaScript config, a command palette and a vim editor for text fields, and you accept that several keys mean something different from Vimium.

Why does Vimium not work on some pages? Chrome does not let extensions inject scripts into chrome:// pages or the Chrome Web Store. In my Chrome 156 test Vimium showed zero link hints on chrome://settings, chrome://extensions, the new tab page, the Web Store, the built-in PDF viewer, view-source pages and about:blank.

How do I copy the current URL with Vimium? Press yy in normal mode. Vimium, Vimium C and Surfingkeys all use yy for copying the current page URL. In Vimium, yf copies a link URL through link hints.

How do I stop Vimium from breaking keyboard shortcuts on a website? Add an exclusion rule in Vimium Options with a URL pattern and, optionally, only the keys to pass through. Vimium ships with one rule already: it is disabled on Gmail by default.

Is Vimium safe? It is open source and widely used, but it requests access to all websites plus tabs, history, bookmarks and sessions, because it has to draw hints on every page and power its URL bar. Install it from the official store listing only.

Start With f, j, k and yy

You don't need the whole keymap. Install Vimium, learn f, j/k, yy and ? this week, add T and o next week, and exclude the web apps that fight you. That gets you most of what vim style navigation in Chrome offers, and the three-keystroke link click becomes a habit fast. And if all you wanted from yy was the URL, skip the all-sites permissions: install Ctrl+Shift+C, one shortcut, clipboard permission only, zero data collected.

Try Ctrl+Shift+C

Copy any URL with one keyboard shortcut. Free forever, no data collected.