# HG changeset patch # User Bram Moolenaar # Date 1637594104 -3600 # Node ID 269ecc6d69bc7be40892e0e6bb9da00ca1e380d4 # Parent 906c904cbe90510a21f79de44c90d88b91fd0ac2 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 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) diff --git a/src/ex_eval.c b/src/ex_eval.c --- 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; diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim --- 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() diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3645, +/**/ 3644, /**/ 3643,