vim-patch:9.0.0815

9c50eeb401

Co-authored-by: Martin Tournoij <martin@arp242.net>
This commit is contained in:
zeertzjq 2023-04-18 14:23:09 +08:00
parent 5b77dde8dd
commit 187ba3efce
2 changed files with 8 additions and 10 deletions

View File

@ -988,6 +988,8 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit, bool do_in, bool do_out
} }
if (ins_prevcmd) { if (ins_prevcmd) {
STRCAT(t, prevcmd); STRCAT(t, prevcmd);
} else {
xfree(t);
} }
p = t + strlen(t); p = t + strlen(t);
STRCAT(t, trailarg); STRCAT(t, trailarg);
@ -1012,16 +1014,12 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit, bool do_in, bool do_out
} }
} while (trailarg != NULL); } while (trailarg != NULL);
// Don't do anything if there is no command as there isn't really anything // Don't clear "prevcmd" if there is no command to run.
// useful in running "sh -c ''". Avoids changing "prevcmd". if (strlen(newcmd) > 0) {
if (strlen(newcmd) == 0) { xfree(prevcmd);
xfree(newcmd); prevcmd = newcmd;
return;
} }
xfree(prevcmd);
prevcmd = newcmd;
if (bangredo) { // put cmd in redo buffer for ! command if (bangredo) { // put cmd in redo buffer for ! command
// If % or # appears in the command, it must have been escaped. // If % or # appears in the command, it must have been escaped.
// Reescape them, so that redoing them does not substitute them by the // Reescape them, so that redoing them does not substitute them by the

View File

@ -223,8 +223,8 @@ func Test_shell_repeat()
call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog')) call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog'))
call writefile(['empty'], 'Xlog') call writefile(['empty'], 'Xlog')
call feedkeys(":!\<CR>", 'xt') " :! is a no-op call feedkeys(":!\<CR>", 'xt') " :!
call assert_equal(['empty'], readfile('Xlog')) call assert_equal(['Cmd: [-c ]'], readfile('Xlog'))
call feedkeys(":!!\<CR>", 'xt') " :! doesn't clear previous command call feedkeys(":!!\<CR>", 'xt') " :! doesn't clear previous command
call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog')) call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog'))