Mercurial > vim
changeset 26228:269ecc6d69bc v8.2.3645
patch 8.2.3645: Vim9: The "no effect" error is not given for all registers
Commit: https://github.com/vim/vim/commit/7d5b8becc342e49e491053ea842e59f82d072001
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Nov 22 15:05:46 2021 +0000
patch 8.2.3645: Vim9: The "no effect" error is not given for all registers
Problem: Vim9: The "no effect" error is not given for all registers.
Solution: Include any character following '@'. (closes https://github.com/vim/vim/issues/8779)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 22 Nov 2021 16:15:04 +0100 |
parents | 906c904cbe90 |
children | 1728a23d8052 |
files | src/ex_eval.c src/testdir/test_vim9_cmd.vim src/version.c |
diffstat | 3 files changed, 47 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ex_eval.c +++ b/src/ex_eval.c @@ -887,22 +887,32 @@ report_discard_pending(int pending, void } } +/* + * Return TRUE if "arg" is only a variable, register or option name. + */ int cmd_is_name_only(char_u *arg) { char_u *p = arg; - char_u *alias; + char_u *alias = NULL; int name_only = FALSE; - if (*p == '&') + if (*p == '@') { ++p; - if (STRNCMP("l:", p, 2) == 0 || STRNCMP("g:", p, 2) == 0) - p += 2; + if (*p != NUL) + ++p; } - else if (*p == '@') - ++p; - get_name_len(&p, &alias, FALSE, FALSE); + else + { + if (*p == '&') + { + ++p; + if (STRNCMP("l:", p, 2) == 0 || STRNCMP("g:", p, 2) == 0) + p += 2; + } + get_name_len(&p, &alias, FALSE, FALSE); + } name_only = ends_excmd2(arg, skipwhite(p)); vim_free(alias); return name_only;
--- a/src/testdir/test_vim9_cmd.vim +++ b/src/testdir/test_vim9_cmd.vim @@ -556,7 +556,34 @@ def Test_use_register() @a = 'echo "text"' @a END - CheckDefAndScriptFailure(lines, 'E1207:') + CheckDefAndScriptFailure(lines, 'E1207:', 2) + + lines =<< trim END + @/ = 'pattern' + @/ + END + CheckDefAndScriptFailure(lines, 'E1207:', 2) + + lines =<< trim END + &opfunc = 'nothing' + &opfunc + END + CheckDefAndScriptFailure(lines, 'E1207:', 2) + &opfunc = '' + + lines =<< trim END + &l:showbreak = 'nothing' + &l:showbreak + END + CheckDefAndScriptFailure(lines, 'E1207:', 2) + &l:showbreak = '' + + lines =<< trim END + &g:showbreak = 'nothing' + &g:showbreak + END + CheckDefAndScriptFailure(lines, 'E1207:', 2) + &g:showbreak = '' enddef def Test_environment_use_linebreak()