diff options
-rw-r--r-- | runtime/doc/builtin.txt | 3 | ||||
-rw-r--r-- | src/evalfunc.c | 11 | ||||
-rw-r--r-- | src/testdir/test_expand.vim | 12 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 23 insertions, 5 deletions
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index 4fb12ff86..f6a791d9f 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -2270,6 +2270,9 @@ expand({string} [, {nosuf} [, {list}]]) *expand()* is not defined, an empty string is used. Using "%:p" in a buffer with no name, results in the current directory, with a '/' added. + When 'verbose' is set then expanding '%', '#' and <> items + will result in an error message if the argument cannot be + expanded. When {string} does not start with '%', '#' or '<', it is expanded like a file name is expanded on the command line. diff --git a/src/evalfunc.c b/src/evalfunc.c index e56b505d2..e30186b03 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -4065,7 +4065,6 @@ f_expand(typval_T *argvars, typval_T *rettv) { char_u *s; int len; - char *errormsg; int options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND; expand_T xpc; int error = FALSE; @@ -4096,9 +4095,15 @@ f_expand(typval_T *argvars, typval_T *rettv) s = tv_get_string(&argvars[0]); if (*s == '%' || *s == '#' || *s == '<') { - ++emsg_off; + char *errormsg = NULL; + + if (p_verbose == 0) + ++emsg_off; result = eval_vars(s, s, &len, NULL, &errormsg, NULL); - --emsg_off; + if (p_verbose == 0) + --emsg_off; + else if (errormsg != NULL) + emsg(errormsg); if (rettv->v_type == VAR_LIST) { if (rettv_list_alloc(rettv) != FAIL && result != NULL) diff --git a/src/testdir/test_expand.vim b/src/testdir/test_expand.vim index fee5f2fe8..32c3b429a 100644 --- a/src/testdir/test_expand.vim +++ b/src/testdir/test_expand.vim @@ -128,13 +128,21 @@ func Test_source_sfile() :call assert_equal('edit <cword>', expandcmd("edit <cword>")) :call assert_equal('edit <cexpr>', expandcmd("edit <cexpr>")) :call assert_fails('autocmd User MyCmd echo "<sfile>"', 'E498:') + : + :call assert_equal('', expand('<script>')) + :verbose echo expand('<script>') + :call add(v:errors, v:errmsg) + :verbose echo expand('<sfile>') + :call add(v:errors, v:errmsg) :call writefile(v:errors, 'Xresult') :qall! - [SCRIPT] call writefile(lines, 'Xscript') if RunVim([], [], '--clean -s Xscript') - call assert_equal([], readfile('Xresult')) + call assert_equal([ + \ 'E1274: No script file name to substitute for "<script>"', + \ 'E498: no :source file name to substitute for "<sfile>"'], + \ readfile('Xresult')) endif call delete('Xscript') call delete('Xresult') diff --git a/src/version.c b/src/version.c index 84c669b18..5ef4e7497 100644 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4740, +/**/ 4739, /**/ 4738, |