forked from aniani/vim
patch 8.2.4633: Visual range does not work before command modifiers
Problem: Visual range does not work before command modifiers. Solution: Move Visual range to after command modifiers.
This commit is contained in:
parent
f3980dc5d0
commit
c75bca3ee9
@ -2782,13 +2782,25 @@ parse_command_modifiers(
|
|||||||
cmdmod_T *cmod,
|
cmdmod_T *cmod,
|
||||||
int skip_only)
|
int skip_only)
|
||||||
{
|
{
|
||||||
|
char_u *cmd_start;
|
||||||
char_u *p;
|
char_u *p;
|
||||||
int starts_with_colon = FALSE;
|
int starts_with_colon = FALSE;
|
||||||
int vim9script = in_vim9script();
|
int vim9script = in_vim9script();
|
||||||
|
int has_visual_range = FALSE;
|
||||||
|
|
||||||
CLEAR_POINTER(cmod);
|
CLEAR_POINTER(cmod);
|
||||||
cmod->cmod_flags = sticky_cmdmod_flags;
|
cmod->cmod_flags = sticky_cmdmod_flags;
|
||||||
|
|
||||||
|
if (STRNCMP(eap->cmd, "'<,'>", 5) == 0)
|
||||||
|
{
|
||||||
|
// The automatically inserted Visual area range is skipped, so that
|
||||||
|
// typing ":cmdmod cmd" in Visual mode works without having to move the
|
||||||
|
// range to after the modififiers.
|
||||||
|
eap->cmd += 5;
|
||||||
|
cmd_start = eap->cmd;
|
||||||
|
has_visual_range = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
// Repeat until no more command modifiers are found.
|
// Repeat until no more command modifiers are found.
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -2849,12 +2861,11 @@ parse_command_modifiers(
|
|||||||
{
|
{
|
||||||
char_u *s, *n;
|
char_u *s, *n;
|
||||||
|
|
||||||
for (s = p; ASCII_ISALPHA(*s); ++s)
|
for (s = eap->cmd; ASCII_ISALPHA(*s); ++s)
|
||||||
;
|
;
|
||||||
n = skipwhite(s);
|
n = skipwhite(s);
|
||||||
if (vim_strchr((char_u *)".=", *n) != NULL
|
if (*n == '.' || *n == '=' || (*n != NUL && n[1] == '=')
|
||||||
|| *s == '['
|
|| *s == '[')
|
||||||
|| (*n != NUL && n[1] == '='))
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3081,6 +3092,17 @@ parse_command_modifiers(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (has_visual_range && eap->cmd > cmd_start)
|
||||||
|
{
|
||||||
|
// Move the '<,'> range to after the modifiers and insert a colon.
|
||||||
|
// Since the modifiers have been parsed put the colon on top of the
|
||||||
|
// space: "'<,'>mod cmd" -> "mod:'<,'>cmd
|
||||||
|
// Put eap->cmd after the colon.
|
||||||
|
mch_memmove(cmd_start - 5, cmd_start, eap->cmd - cmd_start);
|
||||||
|
eap->cmd -= 5;
|
||||||
|
mch_memmove(eap->cmd - 1, ":'<,'>", 6);
|
||||||
|
}
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -579,6 +579,13 @@ func Test_source_buffer_vim9()
|
|||||||
call assert_equal(#{pi: 3.12, e: 2.71828}, g:Math)
|
call assert_equal(#{pi: 3.12, e: 2.71828}, g:Math)
|
||||||
call assert_equal(['vim', 'nano'], g:Editors)
|
call assert_equal(['vim', 'nano'], g:Editors)
|
||||||
|
|
||||||
|
" '<,'> range before the cmd modifier works
|
||||||
|
unlet g:Math
|
||||||
|
unlet g:Editors
|
||||||
|
exe "normal 6GV4j:vim9cmd source\<CR>"
|
||||||
|
call assert_equal(['vim', 'nano'], g:Editors)
|
||||||
|
unlet g:Editors
|
||||||
|
|
||||||
" test for using try/catch
|
" test for using try/catch
|
||||||
%d _
|
%d _
|
||||||
let lines =<< trim END
|
let lines =<< trim END
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4633,
|
||||||
/**/
|
/**/
|
||||||
4632,
|
4632,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user