Add dot-repeat to Vim mode (#40521)

## What changed

- Bind `.` in Vim normal mode to repeat the last complete edit.
- Record semantic delete, change, replace, paste, and insert-mode actions so repeats preserve motions, text objects, inserted text, and editor actions across keymap changes.
- Expose `vim_normal.repeat_last_change` in the configurable keymap and keymap picker, including conflict handling for existing custom bindings.

## Testing

- Add coverage for repeating deletes, replacements, complete changes, pasted and literal text, insert-mode editor actions, custom bindings, unavailable motions, and cleared buffers.

GitOrigin-RevId: 3213df964811e7902377ff1d93641e59f4037914
This commit is contained in:
Benjamin Carlsson authored and copyberry committed 2026-08-25 02:34:04 +00:00
1 parent cbfd999db7
commit c1db22a3cd
16 files changed
+658 -71

No files matched your search

+2
View File
@@ -239,6 +239,8 @@ pub struct TuiVimNormalKeymap {
pub delete_char: Option<KeybindingsSpec>,
/// Replace the character under the cursor (`r`).
pub replace_char: Option<KeybindingsSpec>,
/// Repeat the last complete edit (`.`).
pub repeat_last_change: Option<KeybindingsSpec>,
/// Delete character under cursor and enter insert mode (`s`).
pub substitute_char: Option<KeybindingsSpec>,
/// Delete from cursor to end of line (`D`).