vim-patch:8.2.3623: "$*" is expanded to "nonomatch"

Problem:    "$*" is expanded to "nonomatch".
Solution:   Only add "set nonomatch" when using a csh-like shell. (Christian
            Brabandt, closes vim/vim#9159, closes vim/vim#9153)
8b8d829faf

Cherry-pick a line from patch 8.2.0522.
This commit is contained in:
zeertzjq
2022-08-20 06:47:28 +08:00
parent f342194396
commit 6d6e9c5d51
2 changed files with 17 additions and 4 deletions

View File

@@ -249,10 +249,16 @@ int os_expand_wildcards(int num_pat, char **pat, int *num_file, char ***file, in
}
STRCAT(command, ">");
} else {
if (flags & EW_NOTFOUND) {
STRCPY(command, "set nonomatch; ");
} else {
STRCPY(command, "unset nonomatch; ");
STRCPY(command, "");
if (shell_style == STYLE_GLOB) {
// Assume the nonomatch option is valid only for csh like shells,
// otherwise, this may set the positional parameters for the shell,
// e.g. "$*".
if (flags & EW_NOTFOUND) {
STRCAT(command, "set nonomatch; ");
} else {
STRCAT(command, "unset nonomatch; ");
}
}
if (shell_style == STYLE_GLOB) {
STRCAT(command, "glob >");

View File

@@ -1,6 +1,7 @@
" Test for expanding file names
source shared.vim
source check.vim
func Test_with_directories()
call mkdir('Xdir1')
@@ -131,7 +132,13 @@ func Test_expand_filename_multicmd()
call assert_equal(4, winnr('$'))
call assert_equal('foo!', bufname(winbufnr(1)))
call assert_equal('foo', bufname(winbufnr(2)))
call assert_fails('e %:s/.*//', 'E500:')
%bwipe!
endfunc
func Test_expandcmd_shell_nonomatch()
CheckNotMSWindows
call assert_equal('$*', expandcmd('$*'))
endfunc
" vim: shiftwidth=2 sts=2 expandtab