summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshane.xb.qian <shane.qian@foxmail.com>2022-11-08 21:40:04 +0000
committerBram Moolenaar <Bram@vim.org>2022-11-08 21:40:04 +0000
commit4e7590ec00483077daaa567aa2220bc8df912f3c (patch)
treeca8cdc2aeadc98d7cda02e1684e0e6cc8dd57937
parent7b224fdf4a29f115567d4fc8629c1cef92d8444a (diff)
patch 9.0.0845: shell command with just space gives strange errorv9.0.0845
Problem: Shell command with just space gives strange error. Solution: Skip white space at start of the argument. (Christian Brabandt, Shane-XB-Qian, closes #11515, closes #11495)
-rw-r--r--src/ex_cmds.c8
-rw-r--r--src/testdir/test_cmdline.vim47
-rw-r--r--src/version.c2
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,