In Helix normal mode escape runs `vim::SwitchToHelixNormalMode`, which
only switches the mode, so the diagnostic shown by `] d`, a hunk expanded
with `g o`, a hover popover and the like stayed open. Vim mode closes them
because escape there is `editor::Cancel`. Binding Helix to `Cancel` isn't
an option, since once nothing is open it collapses the selections.
Pull the part of `Editor::cancel` that runs before it touches the
selections into `Editor::dismiss_overlays`, and call it when escape is
pressed in Helix normal mode. Selections are kept as before.
Closes#55197
`cs"` and `ds"` did nothing when the line was soft wrapped and the quotes
ended up on different display rows. Quote objects only match on a single
line, and the surround code checked that by comparing display rows of
the cursor and the found pair, so a soft wrapped line looked like several.
The pair itself is found in the buffer text and was already correct.
Compare buffer rows instead, in both `ds` and `cs`. This also covers
`AnyQuotes` and `MiniQuotes`, which go through the same check.
Closes#43069
With vim or helix mode on, searching the command palette for "split
selection" showed only a `:split selection` entry and hid
`editor: split selection into lines`. The vim interceptor reads the query
as `:split <file>`, and its filename completions were marked exclusive,
which drops every regular match. The same happens for other searches
that start with a filename command, like "edit prediction".
Return the completions as non-exclusive, like every other intercepted
command. They are still listed first, so `:sp foo` + enter behaves the
same.
Closes#64431