diff options
-rw-r--r-- | src/ex_cmds.c | 8 | ||||
-rw-r--r-- | src/testdir/test_cmdline.vim | 47 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 54 insertions, 3 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 7bb7aa0380..3cf07e4825 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -899,11 +899,13 @@ do_bang( } /* - * Try to find an embedded bang, like in :!<cmd> ! [args] - * (:!! is indicated by the 'forceit' variable) + * Try to find an embedded bang, like in ":!<cmd> ! [args]" + * ":!!" is indicated by the 'forceit' variable. */ ins_prevcmd = forceit; - trailarg = arg; + + // Skip leading white space to avoid a strange error with some shells. + trailarg = skipwhite(arg); do { len = (int)STRLEN(trailarg) + 1; diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index f27b0918cc..ddc235d1e7 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -1653,6 +1653,53 @@ func Test_cmd_bang_E135() %bwipe! endfunc +func Test_cmd_bang_args() + new + :.! + call assert_equal(0, v:shell_error) + + " Note that below there is one space char after the '!'. This caused a + " shell error in the past, see https://github.com/vim/vim/issues/11495. + :.! + call assert_equal(0, v:shell_error) + bwipe! + + CheckUnix + :.!pwd + call assert_equal(0, v:shell_error) + :.! pwd + call assert_equal(0, v:shell_error) + + " Note there is one space after 'pwd'. + :.! pwd + call assert_equal(0, v:shell_error) + + " Note there are two spaces after 'pwd'. + :.! pwd + call assert_equal(0, v:shell_error) + :.!ls ~ + call assert_equal(0, v:shell_error) + + " Note there is one space char after '~'. + :.!ls ~ + call assert_equal(0, v:shell_error) + + " Note there are two spaces after '~'. + :.!ls ~ + call assert_equal(0, v:shell_error) + + :.!echo "foo" + call assert_equal(getline('.'), "foo") + :.!echo "foo " + call assert_equal(getline('.'), "foo ") + :.!echo " foo " + call assert_equal(getline('.'), " foo ") + :.!echo " foo " + call assert_equal(getline('.'), " foo ") + + %bwipe! +endfunc + " Test for using ~ for home directory in cmdline completion matches func Test_cmdline_expand_home() call mkdir('Xexpdir', 'R') diff --git a/src/version.c b/src/version.c index 5d4511dcdd..097fcf6abf 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 845, +/**/ 844, /**/ 843, |