From ab1c353f65efe8741b9a4d1aaef065af0aee885a Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Mon, 28 Sep 2026 15:54:41 -0300 Subject: The two regex waivers are gone: s and S already match helix there s and S search each line as its own haystack, so ^ and $ hold at every line and . never takes a newline, which is helix's multi_line regex. The waivers for the old difference, sel-regex-caret and sel-regex-dot-newline, had gone stale, and --strict stopped on the first before printing its summary. Co-Authored-By: Claude Opus 5.5 --- docs/helix-keys.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'docs') diff --git a/docs/helix-keys.md b/docs/helix-keys.md index dc0f3647..972ef0d2 100644 --- a/docs/helix-keys.md +++ b/docs/helix-keys.md @@ -261,8 +261,8 @@ keeps the matches it found so far. | `S` Enter | split each range on its matches | helix `split_on_matches`; the pieces BETWEEN the matches, including the empty one a leading match produces | helix-verified | | `s`/`S` then Esc | back to the selection the prompt opened on | the empty pattern applies nothing, so cancelling IS the restore — one path, not a second one | helix-verified | | an all-lowercase pattern | matches case-blind | helix's smart-case. mvzr has no such flag, so the surface is lowercased instead (ASCII folding is byte-for-byte, so the offsets are identical) | helix-verified | -| `^` and `$` | assert at the SCAN position, not at a line | helix compiles with `multi_line(true)`, so its `^` is every line start. Waived (`sel-regex-caret`) | waived | -| `.` | matches a newline like any other byte | the Rust regex crate excludes `\n` by default; mvzr does not. `[^\n]` is the workaround and agrees in both. Waived (`sel-regex-dot-newline`) | waived | +| `^` and `$` | hold at every line's start and end | helix compiles with `multi_line(true)`; pardes gets the same by searching each line as its own haystack (`src/regexp.zig`) | helix-verified | +| `.` | never matches a newline | as the Rust regex crate: a pattern without `\n` searches line by line, and one that names `\n` has its `.`s made `[^\n]` (`src/regexp.zig`) | helix-verified | | more than 64 matches | the ones past `MAX_SELS` are dropped | the ceiling the whole selection model has, not this key's | | `K` / `Alt-K` | keep / remove ranges matching a regex | **skipped**: the same prompt, filtering instead of splitting — worth adding next | @@ -388,13 +388,12 @@ Files (all in `test/hxcases/`): (runs the `hx-harness` binary from the helix checkout; override with `$HX_HARNESS`). Only needed when cases change — the diff itself runs offline. -- `waivers.jsonl` — named exemptions, each with a reason. Six live ones: +- `waivers.jsonl` — named exemptions, each with a reason. Four live ones: `wiX-edit-drops-sel` and `msel-append` (helix maps selections through insert-mode edits, pardes does not), `alt-c-window-op` (the pardes - window op deliberately shadows helix change-noyank), `msel-yank-paste` - (one yank register, not one value per range), and `sel-regex-caret` / - `sel-regex-dot-newline` (mvzr is not the Rust regex crate: no - multi-line `^`/`$`, and `.` matches a newline). + window op deliberately shadows helix change-noyank) and `msel-yank-paste` + (one yank register, not one value per range). `sel-regex-caret` and + `sel-regex-dot-newline` went when `s`/`S` began searching line by line. - `parity.jsonl` — 80 further cases, used only by the parity gate below. - `parity-waivers.jsonl` — 14 named exemptions for the parity gate, in three classes: one deliberate pardes binding (`ctrl-b-page`, since `Ctrl-b` IS the -- cgit v1.3