diff src/ex_cmds.c @ 16698:23af483c4ceb v8.1.1351

patch 8.1.1351: text property wrong after :substitute commit https://github.com/vim/vim/commit/338dfdad3844ebb1ce1d56c421d1f698c086eb0c Author: Bram Moolenaar <Bram@vim.org> Date: Sun May 19 15:19:57 2019 +0200 patch 8.1.1351: text property wrong after :substitute Problem: Text property wrong after :substitute. Solution: Save for undo before changing any text properties.
author Bram Moolenaar <Bram@vim.org>
date Sun, 19 May 2019 15:30:07 +0200
parents 6ea3f93b4428
children 77bcb5055fec
line wrap: on
line diff
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -5187,6 +5187,9 @@ do_sub(exarg_T *eap)
 	    int		do_again;	/* do it again after joining lines */
 	    int		skip_match = FALSE;
 	    linenr_T	sub_firstlnum;	/* nr of first sub line */
+#ifdef FEAT_TEXT_PROP
+	    int		save_for_undo = TRUE;
+#endif
 
 	    /*
 	     * The new text is build up step by step, to avoid too much
@@ -5603,9 +5606,14 @@ do_sub(exarg_T *eap)
 		    p1 = sub_firstline;
 #ifdef FEAT_TEXT_PROP
 		    if (curbuf->b_has_textprop)
-			adjust_prop_columns(lnum, regmatch.startpos[0].col,
+		    {
+			// When text properties are changed, need to save for
+			// undo first, unless done already.
+			if (adjust_prop_columns(lnum, regmatch.startpos[0].col,
 			      sublen - 1 - (regmatch.endpos[0].col
-						  - regmatch.startpos[0].col));
+				   - regmatch.startpos[0].col), save_for_undo))
+			    save_for_undo = FALSE;
+		    }
 #endif
 		}
 		else