mirror of https://github.com/vim/vim.git
patch 9.0.0783: ":!" doesn't do anything but does update the previous command
Problem: ":!" doesn't do anything but does update the previous command. Solution: Do not have ":!" change the previous command. (Martin Tournoij, closes #11372)
This commit is contained in:
parent
4bf67ec52e
commit
8107a2a8af
|
@ -85,6 +85,7 @@ src/testdir/messages
|
|||
src/testdir/viminfo
|
||||
src/testdir/opt_test.vim
|
||||
src/testdir/failed
|
||||
src/testdir/starttime
|
||||
runtime/indent/testdir/*.out
|
||||
runtime/indent/testdir/*.fail
|
||||
src/memfile_test
|
||||
|
|
|
@ -249,7 +249,8 @@ g8 Print the hex values of the bytes used in the
|
|||
|
||||
*:!cmd* *:!*
|
||||
:!{cmd} Execute {cmd} with the shell. See also the 'shell'
|
||||
and 'shelltype' option.
|
||||
and 'shelltype' option. `:!` without a {cmd} is a no-op,
|
||||
it does nothing.
|
||||
*E34*
|
||||
Any '!' in {cmd} is replaced with the previous
|
||||
external command (see also 'cpoptions'). But not when
|
||||
|
|
|
@ -957,6 +957,11 @@ 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)
|
||||
return;
|
||||
|
||||
vim_free(prevcmd);
|
||||
prevcmd = newcmd;
|
||||
|
||||
|
|
|
@ -251,4 +251,35 @@ func Test_set_shell()
|
|||
call delete('Xtestout')
|
||||
endfunc
|
||||
|
||||
func Test_shell_repeat()
|
||||
CheckUnix
|
||||
|
||||
let save_shell = &shell
|
||||
|
||||
call writefile(['#!/bin/sh', 'echo "Cmd: [$*]" > Xlog'], 'Xtestshell', 'D')
|
||||
call setfperm('Xtestshell', "r-x------")
|
||||
set shell=./Xtestshell
|
||||
defer delete('Xlog')
|
||||
|
||||
call feedkeys(":!echo coconut\<CR>", 'xt') " Run command
|
||||
call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog'))
|
||||
|
||||
call feedkeys(":!!\<CR>", 'xt') " Re-run previous
|
||||
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') " :! doesn't clear previous command
|
||||
call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog'))
|
||||
|
||||
call feedkeys(":!echo banana\<CR>", 'xt') " Make sure setting previous command keeps working after a :! no-op
|
||||
call assert_equal(['Cmd: [-c echo banana]'], readfile('Xlog'))
|
||||
call feedkeys(":!!\<CR>", 'xt')
|
||||
call assert_equal(['Cmd: [-c echo banana]'], readfile('Xlog'))
|
||||
|
||||
let &shell = save_shell
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
|
|
@ -695,6 +695,8 @@ static char *(features[]) =
|
|||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
783,
|
||||
/**/
|
||||
782,
|
||||
/**/
|
||||
|
|
Loading…
Reference in New Issue