Multi-cursor over the per-buffer :cursors/:primary fields (gap == cursors[primary], synced lazily, so movement code is untouched). insert-char/backspace/delete-char-forward batch over all cursors in descending offset order with cumulative remapping; a single cursor keeps the O(1) gap path. Line ops stay primary-only.
Placement is line-based and search-free: add-cursor-below/above (clamped same column), clear-cursors. Non-primary cursors render as :cursor-styled spans; the terminal cursor marks the primary. Bound C-d/C-u/C-g plus :add-cursor-below/:add-cursor-above/:clear-cursors.
TODO: movement moves primary only; per-cursor selections and gl/ga (next match, select all) wait on search.