mirror of
https://github.com/vim/vim
synced 2025-07-16 01:01:58 +00:00
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:
1
.gitignore
vendored
1
.gitignore
vendored
@ -85,6 +85,7 @@ src/testdir/messages
|
|||||||
src/testdir/viminfo
|
src/testdir/viminfo
|
||||||
src/testdir/opt_test.vim
|
src/testdir/opt_test.vim
|
||||||
src/testdir/failed
|
src/testdir/failed
|
||||||
|
src/testdir/starttime
|
||||||
runtime/indent/testdir/*.out
|
runtime/indent/testdir/*.out
|
||||||
runtime/indent/testdir/*.fail
|
runtime/indent/testdir/*.fail
|
||||||
src/memfile_test
|
src/memfile_test
|
||||||
|
@ -249,7 +249,8 @@ g8 Print the hex values of the bytes used in the
|
|||||||
|
|
||||||
*:!cmd* *:!*
|
*:!cmd* *:!*
|
||||||
:!{cmd} Execute {cmd} with the shell. See also the 'shell'
|
:!{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*
|
*E34*
|
||||||
Any '!' in {cmd} is replaced with the previous
|
Any '!' in {cmd} is replaced with the previous
|
||||||
external command (see also 'cpoptions'). But not when
|
external command (see also 'cpoptions'). But not when
|
||||||
|
@ -957,6 +957,11 @@ do_bang(
|
|||||||
}
|
}
|
||||||
} while (trailarg != NULL);
|
} 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);
|
vim_free(prevcmd);
|
||||||
prevcmd = newcmd;
|
prevcmd = newcmd;
|
||||||
|
|
||||||
|
@ -251,4 +251,35 @@ func Test_set_shell()
|
|||||||
call delete('Xtestout')
|
call delete('Xtestout')
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
783,
|
||||||
/**/
|
/**/
|
||||||
782,
|
782,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user