Files
Gregor Lohaus 281c3d02f2
All checks were successful
Publish codemirror-helix / publish (push) Successful in 2m19s
scope codemirror-helix
2026-06-19 17:15:51 +02:00
..
2026-06-19 17:07:18 +02:00
2026-06-19 17:15:51 +02:00
2026-06-19 17:15:51 +02:00

@gregorlohaus/codemirror-helix

Helix-style modal editing for CodeMirror 6.

Selection-first editing with multiple selections, Normal/Insert/Select modes, goto & match modes, textobjects, surround, registers, counts, and search.

A core motions subset — broad coverage of everyday Helix keys, not full parity. No tree-sitter textobjects, LSP gotos, macros, or jumplist.

Install

bun add @gregorlohaus/codemirror-helix
# peers: @codemirror/{state,view,commands,language,search}

Usage

import { EditorView, basicSetup } from "codemirror";
import { helix } from "@gregorlohaus/codemirror-helix";

new EditorView({
  doc: "hello world",
  extensions: [basicSetup, helix()],
  parent: document.body,
});

helix() needs a selection drawer for multi-cursor rendering — basicSetup (or drawSelection()) covers it.

Options

helix({
  startInInsert: false, // start in Normal mode (default)
  statusBar: true,      // show the bottom mode line
  // Let an open autocomplete popup eat the first Escape instead of leaving Insert:
  escapeGuard: (state) => completionStatus(state) === "active",
});

Keys

Starts in Normal mode. The status line shows the mode, pending count, register, and selection count.

Group Keys
Modes i/a insert before/after, I/A line start/end, o/O open line, v select (extend), Esc normal
Motion h j k l, w W b B e E, f t F T {char}, Alt-. repeat find, Home/End, counts (3w)
Goto g gg/Ng line, ge end, gh/gl line ends, gs first non-blank, gt/gc/gb view top/center/bottom
Select x line (repeat extends), X line bounds, % all, ; collapse, Alt-; flip, Alt-: forward, , keep primary, Alt-, remove primary, (/) rotate, _ trim
Multi s select regex, S split, K/Alt-K keep/remove, C copy selection below, Alt-C above
Match m mm matching bracket, mi{o}/ma{o} inside/around (w W p ( [ { < " ' \ m), ms{c}surround,md{c}delete,mr{c}{c}` replace
Edit d delete, c change, y yank, p/P paste, R replace w/ register, r{c} replace char, ~/`/Alt-`` `` case, J join, >/< indent, u/U undo/redo
Registers "{c} select register for the next yank/delete/paste
Search / ? search, n/N next/prev, * search selection
View zz/zt/zb center/top/bottom, Ctrl-d/Ctrl-u half page, Ctrl-f/Ctrl-b page
Clipboard space y copy, space p/space P paste (system clipboard)

s/S/K/Alt-K open a prompt and preview live as you type the regex; Enter commits, Esc restores the original selection.

License

MIT