diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-11-12 12:29:16 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-12 12:29:16 +0800 |
commit | 7335a67b5754255f0e892303a0f4e3521035e7d8 (patch) | |
tree | b27fa1fc694a1f5d8f5921e2d59b1c692544c5a8 | |
parent | 4d2373f5f6570fcc851b818198f45fbda391fd6a (diff) | |
download | rneovim-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.c | 8 | ||||
-rw-r--r-- | src/nvim/testdir/test_cmdline.vim | 47 |
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') |