mirror of
https://github.com/neovim/neovim.git
synced 2026-07-22 00:51:33 +00:00
vim-patch:8.2.4740: when expand() fails there is no error message
Problem: When expand() fails there is no error message.
Solution: When 'verbose' is set give an error message.
575445200b
This commit is contained in:
@@ -2048,6 +2048,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.
|
||||
|
||||
@@ -1958,7 +1958,6 @@ static void f_exists(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
/// "expand()" function
|
||||
static void f_expand(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
char *errormsg;
|
||||
int options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
|
||||
bool error = false;
|
||||
#ifdef BACKSLASH_IN_FILENAME
|
||||
@@ -1978,10 +1977,17 @@ static void f_expand(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
|
||||
const char *s = tv_get_string(&argvars[0]);
|
||||
if (*s == '%' || *s == '#' || *s == '<') {
|
||||
emsg_off++;
|
||||
if (p_verbose == 0) {
|
||||
emsg_off++;
|
||||
}
|
||||
size_t len;
|
||||
char *errormsg = NULL;
|
||||
char_u *result = eval_vars((char_u *)s, (char_u *)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) {
|
||||
tv_list_alloc_ret(rettv, (result != NULL));
|
||||
if (result != NULL) {
|
||||
|
||||
@@ -116,13 +116,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')
|
||||
|
||||
Reference in New Issue
Block a user