diff options
-rw-r--r-- | src/cmdexpand.c | 2 | ||||
-rw-r--r-- | src/ex_docmd.c | 13 | ||||
-rw-r--r-- | src/ex_getln.c | 10 | ||||
-rw-r--r-- | src/proto/ex_docmd.pro | 2 | ||||
-rw-r--r-- | src/testdir/test_vim9_cmd.vim | 11 | ||||
-rw-r--r-- | src/userfunc.c | 2 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 4 |
8 files changed, 33 insertions, 13 deletions
diff --git a/src/cmdexpand.c b/src/cmdexpand.c index 3ef3e1d8b..e7cf81998 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -992,7 +992,7 @@ set_one_cmd_context( } // 3. Skip over the range to find the command. - cmd = skip_range(cmd, &xp->xp_context); + cmd = skip_range(cmd, TRUE, &xp->xp_context); xp->xp_pattern = cmd; if (*cmd == NUL) return NULL; diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 6495db6e8..ed52b464b 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -1779,9 +1779,7 @@ do_one_cmd( may_have_range = !vim9script || starts_with_colon; if (may_have_range) #endif - ea.cmd = skip_range(ea.cmd, NULL); - if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL) - ea.cmd = skipwhite(ea.cmd + 1); + ea.cmd = skip_range(ea.cmd, TRUE, NULL); #ifdef FEAT_EVAL if (vim9script && !starts_with_colon) @@ -2683,7 +2681,7 @@ parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only) return FAIL; } - p = skip_range(eap->cmd, NULL); + p = skip_range(eap->cmd, TRUE, NULL); switch (*p) { // When adding an entry, also modify cmd_exists(). @@ -3534,7 +3532,8 @@ excmd_get_argt(cmdidx_T idx) char_u * skip_range( char_u *cmd, - int *ctx) // pointer to xp_context or NULL + int skip_star, // skip "*" used for Visual range + int *ctx) // pointer to xp_context or NULL { unsigned delim; @@ -3569,6 +3568,10 @@ skip_range( while (*cmd == ':') cmd = skipwhite(cmd + 1); + // Skip "*" used for Visual range. + if (skip_star && *cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL) + cmd = skipwhite(cmd + 1); + return cmd; } diff --git a/src/ex_getln.c b/src/ex_getln.c index 2c157ee52..b46748f7f 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -187,8 +187,12 @@ set_search_match(pos_T *t) * May change the last search pattern. */ static int -do_incsearch_highlighting(int firstc, int *search_delim, incsearch_state_T *is_state, - int *skiplen, int *patlen) +do_incsearch_highlighting( + int firstc, + int *search_delim, + incsearch_state_T *is_state, + int *skiplen, + int *patlen) { char_u *cmd; cmdmod_T save_cmdmod = cmdmod; @@ -230,7 +234,7 @@ do_incsearch_highlighting(int firstc, int *search_delim, incsearch_state_T *is_s parse_command_modifiers(&ea, &dummy, TRUE); cmdmod = save_cmdmod; - cmd = skip_range(ea.cmd, NULL); + cmd = skip_range(ea.cmd, TRUE, NULL); if (vim_strchr((char_u *)"sgvl", *cmd) == NULL) goto theend; diff --git a/src/proto/ex_docmd.pro b/src/proto/ex_docmd.pro index 3ed152316..7d46f15d5 100644 --- a/src/proto/ex_docmd.pro +++ b/src/proto/ex_docmd.pro @@ -16,7 +16,7 @@ int modifier_len(char_u *cmd); int cmd_exists(char_u *name); cmdidx_T excmd_get_cmdidx(char_u *cmd, int len); long excmd_get_argt(cmdidx_T idx); -char_u *skip_range(char_u *cmd, int *ctx); +char_u *skip_range(char_u *cmd, int skip_star, int *ctx); void ex_ni(exarg_T *eap); int expand_filename(exarg_T *eap, char_u **cmdlinep, char **errormsgp); void separate_nextcmd(exarg_T *eap); diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim index 4b4e58e94..6b9737278 100644 --- a/src/testdir/test_vim9_cmd.vim +++ b/src/testdir/test_vim9_cmd.vim @@ -330,6 +330,17 @@ def Test_put_command() bwipe! enddef +def Test_command_star_range() + new + setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar']) + setpos("'<", [0, 1, 0, 0]) + setpos("'>", [0, 3, 0, 0]) + :*s/\(foo\|bar\)/baz/g + getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz']) + + bwipe! +enddef + " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/userfunc.c b/src/userfunc.c index d28125fdd..53514de1d 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -3150,7 +3150,7 @@ def_function(exarg_T *eap, char_u *name_arg) } // Check for ":append", ":change", ":insert". Not for :def. - p = skip_range(p, NULL); + p = skip_range(p, FALSE, NULL); if (eap->cmdidx != CMD_def && ((p[0] == 'a' && (!ASCII_ISALPHA(p[1]) || p[1] == 'p')) || (p[0] == 'c' diff --git a/src/version.c b/src/version.c index a59b82dd8..a04f93ca2 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1679, +/**/ 1678, /**/ 1677, diff --git a/src/vim9compile.c b/src/vim9compile.c index 4ef3fdccb..8a46b2f77 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -4276,7 +4276,7 @@ compile_return(char_u *arg, int set_return_type, cctx_T *cctx) } if (need_type(stack_type, cctx->ctx_ufunc->uf_ret_type, -1, cctx, FALSE) == FAIL) - return NULL; + return NULL; } } else @@ -6830,7 +6830,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx) cmd = ea.cmd; if (*cmd != '\'' || starts_with_colon) { - ea.cmd = skip_range(ea.cmd, NULL); + ea.cmd = skip_range(ea.cmd, TRUE, NULL); if (ea.cmd > cmd) { if (!starts_with_colon) |