mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 03:48:18 +00:00
vim-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 vim/vim#11372)
8107a2a8af
Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
@@ -248,6 +248,7 @@ g8 Print the hex values of the bytes used in the
|
|||||||
<
|
<
|
||||||
*:!cmd* *:!*
|
*:!cmd* *:!*
|
||||||
:!{cmd} Execute {cmd} with 'shell'. See also |:terminal|.
|
:!{cmd} Execute {cmd} with 'shell'. See also |:terminal|.
|
||||||
|
`:!` without a {cmd} is a no-op, it does nothing.
|
||||||
|
|
||||||
The command runs in a non-interactive shell connected
|
The command runs in a non-interactive shell connected
|
||||||
to a pipe (not a terminal). Use |:terminal| to run an
|
to a pipe (not a terminal). Use |:terminal| to run an
|
||||||
|
@@ -1012,6 +1012,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
|
||||||
|
// useful in running "sh -c ''". Avoids changing "prevcmd".
|
||||||
|
if (strlen(newcmd) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
xfree(prevcmd);
|
xfree(prevcmd);
|
||||||
prevcmd = newcmd;
|
prevcmd = newcmd;
|
||||||
|
|
||||||
|
@@ -206,4 +206,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
|
||||||
|
Reference in New Issue
Block a user