]> granicus.if.org Git - vim/commitdiff
patch 9.0.0815 v9.0.0814436e5d395f v9.0.0815
authorMartin Tournoij <martin@arp242.net>
Sat, 22 Oct 2022 08:02:56 +0000 (09:02 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 22 Oct 2022 08:02:56 +0000 (09:02 +0100)
src/ex_cmds.c
src/testdir/test_shell.vim
src/version.c

index 93f9dd700c64bfe2d86c71e107b590189de5bdd9..676ab704b3d79027bd7f761215c13a6ce2cc8558 100644 (file)
@@ -929,6 +929,8 @@ do_bang(
            STRCAT(t, newcmd);
        if (ins_prevcmd)
            STRCAT(t, prevcmd);
+       else
+           vim_free(t);
        p = t + STRLEN(t);
        STRCAT(t, trailarg);
        vim_free(newcmd);
@@ -957,17 +959,13 @@ do_bang(
        }
     } while (trailarg != NULL);
 
-    // Don't do anything if there is no command as there isn't really anything
-    // useful in running "sh -c ''".  Avoids changing "prevcmd".
-    if (STRLEN(newcmd) == 0)
+    // Don't clear "prevcmd" if there is no command to run.
+    if (STRLEN(newcmd) > 0)
     {
-       vim_free(newcmd);
-       return;
+       vim_free(prevcmd);
+       prevcmd = newcmd;
     }
 
-    vim_free(prevcmd);
-    prevcmd = newcmd;
-
     if (bangredo)          // put cmd in redo buffer for ! command
     {
        // If % or # appears in the command, it must have been escaped.
index 1b4b1f98095a2787ec0eb623995af25b35dd91a4..3ac4681e315149aab14dcba38566aaad74f8bbf2 100644 (file)
@@ -268,8 +268,8 @@ func Test_shell_repeat()
   call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog'))
 
   call writefile(['empty'], 'Xlog')
-  call feedkeys(":!\<CR>", 'xt')               " :! is a no-op
-  call assert_equal(['empty'], readfile('Xlog'))
+  call feedkeys(":!\<CR>", 'xt')               " :!
+  call assert_equal(['Cmd: [-c ]'], readfile('Xlog'))
 
   call feedkeys(":!!\<CR>", 'xt')              " :! doesn't clear previous command
   call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog'))
index 690a1973a74b4c5f9926bd21e2c445bc24449c01..237cd7c40a1688df822278068c11e6b16e8c21d1 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    815,
 /**/
     814,
 /**/