Add Vim replace mode to the TUI composer (#42194)

## What changed

- Add Vim Replace mode, entered with `R`, which overwrites graphemes and appends at the end of a line.
- Restore overwritten text with Backspace and record replace edits for undo and dot-repeat.
- Preserve composer behavior for attachments, completions, paste bursts, history previews, and external editor imports while replacing text.
- Expose `vim_normal.enter_replace_mode` in the configurable TUI keymap.

## Testing

- Add coverage for grapheme replacement, Backspace recovery, dot-repeat, custom bindings, atomic attachments, completions, paste handling, and history interactions.

GitOrigin-RevId: cb04e3adcce013c1eb7b82c994b00e944310c481
This commit is contained in:
Benjamin Carlsson authored and copyberry committed 2026-09-02 03:35:41 +00:00
1 parent 02f47d3fb3
commit 5a0419edb5
22 files changed
+634 -53

No files matched your search

+10
View File
@@ -3927,6 +3927,7 @@
"delete_char": null,
"delete_to_line_end": null,
"enter_insert": null,
"enter_replace_mode": null,
"find_backward": null,
"find_forward": null,
"insert_line_start": null,
@@ -4755,6 +4756,7 @@
"delete_char": null,
"delete_to_line_end": null,
"enter_insert": null,
"enter_replace_mode": null,
"find_backward": null,
"find_forward": null,
"insert_line_start": null,
@@ -5100,6 +5102,14 @@
],
"description": "Enter insert mode at cursor (`i`)."
},
"enter_replace_mode": {
"allOf": [
{
"$ref": "#/definitions/KeybindingsSpec"
}
],
"description": "Enter replace mode and overwrite characters under the cursor (`R`)."
},
"find_backward": {
"allOf": [
{