diff src/ex_docmd.c @ 22732:4c21a3a47707 v8.2.1914

patch 8.2.1914: Vim9: cannot put line break in expression for '=' register Commit: https://github.com/vim/vim/commit/b4bcea474d9006e4db1fa5d6828773e739af14bb Author: Bram Moolenaar <Bram@vim.org> Date: Wed Oct 28 13:53:50 2020 +0100 patch 8.2.1914: Vim9: cannot put line break in expression for '=' register Problem: Vim9: cannot put line break in expression for '=' register. Solution: Pass fgetline to set_expr_line(). (closes https://github.com/vim/vim/issues/7209)
author Bram Moolenaar <Bram@vim.org>
date Wed, 28 Oct 2020 14:00:04 +0100
parents 51bc501a13ca
children f945413264d7
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -1719,6 +1719,7 @@ do_one_cmd(
 #ifdef FEAT_EVAL
     int		may_have_range;
     int		vim9script = in_vim9script();
+    int		did_set_expr_line = FALSE;
 #endif
 
     CLEAR_FIELD(ea);
@@ -2315,8 +2316,9 @@ do_one_cmd(
 	    // for '=' register: accept the rest of the line as an expression
 	    if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
 	    {
-		set_expr_line(vim_strsave(ea.arg));
+		set_expr_line(vim_strsave(ea.arg), &ea);
 		ea.arg += STRLEN(ea.arg);
+		did_set_expr_line = TRUE;
 	    }
 #endif
 	    ea.arg = skipwhite(ea.arg);
@@ -2595,6 +2597,9 @@ doend:
     do_errthrow(cstack,
 	    (ea.cmdidx != CMD_SIZE && !IS_USER_CMDIDX(ea.cmdidx))
 			? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
+
+    if (did_set_expr_line)
+	set_expr_line(NULL, NULL);
 #endif
 
     undo_cmdmod(&cmdmod);