patch 9.0.1036: undo misbehaves when writing from an insert mode mapping
Problem: Undo misbehaves when writing from an insert mode mapping.
Solution: Sync undo when writing. (closes #11674)
diff --git a/src/edit.c b/src/edit.c
index 43f7d9a..9e8346d 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -1049,12 +1049,19 @@
case K_COMMAND: // <Cmd>command<CR>
case K_SCRIPT_COMMAND: // <ScriptCmd>command<CR>
- do_cmdkey_command(c, 0);
+ {
+ do_cmdkey_command(c, 0);
+
#ifdef FEAT_TERMINAL
- if (term_use_loop())
- // Started a terminal that gets the input, exit Insert mode.
- goto doESCkey;
+ if (term_use_loop())
+ // Started a terminal that gets the input, exit Insert mode.
+ goto doESCkey;
#endif
+ if (curbuf->b_u_synced)
+ // The command caused undo to be synced. Need to save the
+ // line for undo before inserting the next char.
+ ins_need_undo = TRUE;
+ }
break;
case K_CURSORHOLD: // Didn't type something for a while.