updated for version 7.3.1303
Problem: Undo is synced whenever CTRL-R = is called, breaking some plugins.
Solution: Only break undo when calling setline() or append().
diff --git a/src/eval.c b/src/eval.c
index 5cac7b4..2a2817e 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -8742,6 +8742,14 @@
typval_T *tv;
long added = 0;
+ /* When coming here from Insert mode, sync undo, so that this can be
+ * undone separately from what was previously inserted. */
+ if (u_sync_once == 2)
+ {
+ u_sync_once = 1; /* notify that u_sync() was called */
+ u_sync(TRUE);
+ }
+
lnum = get_tv_lnum(argvars);
if (lnum >= 0
&& lnum <= curbuf->b_ml.ml_line_count
@@ -16408,6 +16416,15 @@
rettv->vval.v_number = 1; /* FAIL */
if (line == NULL || lnum < 1 || lnum > curbuf->b_ml.ml_line_count + 1)
break;
+
+ /* When coming here from Insert mode, sync undo, so that this can be
+ * undone separately from what was previously inserted. */
+ if (u_sync_once == 2)
+ {
+ u_sync_once = 1; /* notify that u_sync() was called */
+ u_sync(TRUE);
+ }
+
if (lnum <= curbuf->b_ml.ml_line_count)
{
/* existing line, replace it */