aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-11-12 12:29:16 +0800
committerGitHub <noreply@github.com>2022-11-12 12:29:16 +0800
commit7335a67b5754255f0e892303a0f4e3521035e7d8 (patch)
treeb27fa1fc694a1f5d8f5921e2d59b1c692544c5a8
parent4d2373f5f6570fcc851b818198f45fbda391fd6a (diff)
downloadrneovim-7335a67b5754255f0e892303a0f4e3521035e7d8.tar.gz
rneovim-7335a67b5754255f0e892303a0f4e3521035e7d8.tar.bz2
rneovim-7335a67b5754255f0e892303a0f4e3521035e7d8.zip
vim-patch:9.0.0845: shell command with just space gives strange error (#21029)
Problem: Shell command with just space gives strange error. Solution: Skip white space at start of the argument. (Christian Brabandt, Shane-XB-Qian, closes vim/vim#11515, closes vim/vim#11495) https://github.com/vim/vim/commit/4e7590ec00483077daaa567aa2220bc8df912f3c Co-authored-by: shane.xb.qian <shane.qian@foxmail.com>
-rw-r--r--src/nvim/ex_cmds.c8
-rw-r--r--src/nvim/testdir/test_cmdline.vim47
2 files changed, 52 insertions, 3 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index 46870061a9..c22f22366a 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -1135,10 +1135,12 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit, bool do_in, bool do_out
msg_scroll = scroll_save;
}
- // 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.
bool ins_prevcmd = forceit;
- trailarg = arg;
+
+ // Skip leading white space to avoid a strange error with some shells.
+ trailarg = skipwhite(arg);
do {
len = strlen(trailarg) + 1;
if (newcmd != NULL) {
diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim
index b0be7ab396..2921c8b41a 100644
--- a/src/nvim/testdir/test_cmdline.vim
+++ b/src/nvim/testdir/test_cmdline.vim
@@ -1628,6 +1628,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('Xdir')