changeset 25020:91f396f149d5 v8.2.3047

patch 8.2.3047: increment and decrement don't allow for next command Commit: https://github.com/vim/vim/commit/f3d30842dcc8ef4134da462bd4197ae2e2c6c0c1 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jun 25 19:29:30 2021 +0200 patch 8.2.3047: increment and decrement don't allow for next command Problem: Increment and decrement don't allow for next command. Solution: Allow for comment and next command. (closes https://github.com/vim/vim/issues/8442)
author Bram Moolenaar <Bram@vim.org>
date Fri, 25 Jun 2021 19:30:03 +0200
parents 78657f6a1e06
children bff757c48ad5
files src/ex_cmds.h src/testdir/test_vim9_assign.vim src/version.c src/vim9script.c
diffstat 4 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -1875,10 +1875,10 @@ EXCMD(CMD_X,		"X",		ex_X,
 
 // Commands that are recognized only in find_ex_command().
 EXCMD(CMD_increment,	"++",		ex_incdec,
-	EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
+	EX_EXTRA|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
 	ADDR_NONE),
 EXCMD(CMD_decrement,	"--",		ex_incdec,
-	EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
+	EX_EXTRA|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
 	ADDR_NONE),
 
 #undef EXCMD
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1889,6 +1889,10 @@ def Test_inc_dec()
       assert_equal(8, nr)
       --nr
       assert_equal(7, nr)
+      ++nr | ++nr
+      assert_equal(9, nr)
+      ++nr # comment
+      assert_equal(10, nr)
 
       var ll = [1, 2]
       --ll[0]
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3047,
+/**/
     3046,
 /**/
     3045,
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -166,19 +166,23 @@ vim9_comment_start(char_u *p)
 ex_incdec(exarg_T *eap)
 {
     char_u	*cmd = eap->cmd;
-    size_t	len = STRLEN(eap->cmd) + 6;
+    char_u	*nextcmd = eap->nextcmd;
+    size_t	len = STRLEN(eap->cmd) + 8;
 
     // This works like "nr += 1" or "nr -= 1".
+    // Add a '|' to avoid looking in the next line.
     eap->cmd = alloc(len);
     if (eap->cmd == NULL)
 	return;
-    vim_snprintf((char *)eap->cmd, len, "%s %c= 1", cmd + 2,
+    vim_snprintf((char *)eap->cmd, len, "%s %c= 1 |", cmd + 2,
 				     eap->cmdidx == CMD_increment ? '+' : '-');
     eap->arg = eap->cmd;
     eap->cmdidx = CMD_var;
+    eap->nextcmd = NULL;
     ex_let(eap);
     vim_free(eap->cmd);
     eap->cmd = cmd;
+    eap->nextcmd = nextcmd;
 }
 
 /*