mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 8.1.2338: using Visual mark sith :s gives E20 if not set
Problem: Using Visual mark sith :s gives E20 if not set. Solution: Ignore errors when handling 'incsearch'. (closes #3837)
This commit is contained in:
@@ -197,6 +197,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
|||||||
exarg_T ea;
|
exarg_T ea;
|
||||||
pos_T save_cursor;
|
pos_T save_cursor;
|
||||||
int use_last_pat;
|
int use_last_pat;
|
||||||
|
int retval = FALSE;
|
||||||
|
|
||||||
*skiplen = 0;
|
*skiplen = 0;
|
||||||
*patlen = ccline.cmdlen;
|
*patlen = ccline.cmdlen;
|
||||||
@@ -213,6 +214,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
|||||||
if (firstc != ':')
|
if (firstc != ':')
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
++emsg_off;
|
||||||
vim_memset(&ea, 0, sizeof(ea));
|
vim_memset(&ea, 0, sizeof(ea));
|
||||||
ea.line1 = 1;
|
ea.line1 = 1;
|
||||||
ea.line2 = 1;
|
ea.line2 = 1;
|
||||||
@@ -224,13 +226,13 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
|||||||
|
|
||||||
cmd = skip_range(ea.cmd, NULL);
|
cmd = skip_range(ea.cmd, NULL);
|
||||||
if (vim_strchr((char_u *)"sgvl", *cmd) == NULL)
|
if (vim_strchr((char_u *)"sgvl", *cmd) == NULL)
|
||||||
return FALSE;
|
goto theend;
|
||||||
|
|
||||||
// Skip over "substitute" to find the pattern separator.
|
// Skip over "substitute" to find the pattern separator.
|
||||||
for (p = cmd; ASCII_ISALPHA(*p); ++p)
|
for (p = cmd; ASCII_ISALPHA(*p); ++p)
|
||||||
;
|
;
|
||||||
if (*skipwhite(p) == NUL)
|
if (*skipwhite(p) == NUL)
|
||||||
return FALSE;
|
goto theend;
|
||||||
|
|
||||||
if (STRNCMP(cmd, "substitute", p - cmd) == 0
|
if (STRNCMP(cmd, "substitute", p - cmd) == 0
|
||||||
|| STRNCMP(cmd, "smagic", p - cmd) == 0
|
|| STRNCMP(cmd, "smagic", p - cmd) == 0
|
||||||
@@ -248,7 +250,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
|||||||
while (ASCII_ISALPHA(*(p = skipwhite(p))))
|
while (ASCII_ISALPHA(*(p = skipwhite(p))))
|
||||||
++p;
|
++p;
|
||||||
if (*p == NUL)
|
if (*p == NUL)
|
||||||
return FALSE;
|
goto theend;
|
||||||
}
|
}
|
||||||
else if (STRNCMP(cmd, "vimgrep", MAX(p - cmd, 3)) == 0
|
else if (STRNCMP(cmd, "vimgrep", MAX(p - cmd, 3)) == 0
|
||||||
|| STRNCMP(cmd, "vimgrepadd", MAX(p - cmd, 8)) == 0
|
|| STRNCMP(cmd, "vimgrepadd", MAX(p - cmd, 8)) == 0
|
||||||
@@ -261,13 +263,13 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
|||||||
{
|
{
|
||||||
p++;
|
p++;
|
||||||
if (*skipwhite(p) == NUL)
|
if (*skipwhite(p) == NUL)
|
||||||
return FALSE;
|
goto theend;
|
||||||
}
|
}
|
||||||
if (*cmd != 'g')
|
if (*cmd != 'g')
|
||||||
delim_optional = TRUE;
|
delim_optional = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return FALSE;
|
goto theend;
|
||||||
|
|
||||||
p = skipwhite(p);
|
p = skipwhite(p);
|
||||||
delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++;
|
delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++;
|
||||||
@@ -276,7 +278,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
|||||||
use_last_pat = end == p && *end == delim;
|
use_last_pat = end == p && *end == delim;
|
||||||
|
|
||||||
if (end == p && !use_last_pat)
|
if (end == p && !use_last_pat)
|
||||||
return FALSE;
|
goto theend;
|
||||||
|
|
||||||
// Don't do 'hlsearch' highlighting if the pattern matches everything.
|
// Don't do 'hlsearch' highlighting if the pattern matches everything.
|
||||||
if (!use_last_pat)
|
if (!use_last_pat)
|
||||||
@@ -288,7 +290,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
|||||||
empty = empty_pattern(p);
|
empty = empty_pattern(p);
|
||||||
*end = c;
|
*end = c;
|
||||||
if (empty)
|
if (empty)
|
||||||
return FALSE;
|
goto theend;
|
||||||
}
|
}
|
||||||
|
|
||||||
// found a non-empty pattern or //
|
// found a non-empty pattern or //
|
||||||
@@ -321,7 +323,10 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
|||||||
}
|
}
|
||||||
|
|
||||||
curwin->w_cursor = save_cursor;
|
curwin->w_cursor = save_cursor;
|
||||||
return TRUE;
|
retval = TRUE;
|
||||||
|
theend:
|
||||||
|
--emsg_off;
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
9
src/testdir/dumps/Test_incsearch_substitute_14.dump
Normal file
9
src/testdir/dumps/Test_incsearch_substitute_14.dump
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|a+1&#ffffff0|s+0&&|d|f|a+0&#ffff4012|s+0&#ffffff0|d|f| @61
|
||||||
|
|~+0#4040ff13&| @68
|
||||||
|
|~| @68
|
||||||
|
|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @38|1|,|1| @11|A|l@1
|
||||||
|
|b+0&&|s|d|f|b|s|d|f| @61
|
||||||
|
|~+0#4040ff13&| @68
|
||||||
|
|[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @38|1|,|1| @11|A|l@1
|
||||||
|
|:+0&&|'|<|,|'|>|s|/|a|/|b|/|g> @56
|
||||||
|
@70
|
@@ -983,6 +983,19 @@ func Test_incsearch_substitute_dump()
|
|||||||
call VerifyScreenDump(buf, 'Test_incsearch_substitute_12', {})
|
call VerifyScreenDump(buf, 'Test_incsearch_substitute_12', {})
|
||||||
call term_sendkeys(buf, "\<Esc>")
|
call term_sendkeys(buf, "\<Esc>")
|
||||||
call VerifyScreenDump(buf, 'Test_incsearch_substitute_13', {})
|
call VerifyScreenDump(buf, 'Test_incsearch_substitute_13', {})
|
||||||
|
call term_sendkeys(buf, ":%bwipe!\<CR>")
|
||||||
|
call term_sendkeys(buf, ":only!\<CR>")
|
||||||
|
|
||||||
|
" get :'<,'>s command in history
|
||||||
|
call term_sendkeys(buf, ":set cmdheight=2\<CR>")
|
||||||
|
call term_sendkeys(buf, "aasdfasdf\<Esc>")
|
||||||
|
call term_sendkeys(buf, "V:s/a/b/g\<CR>")
|
||||||
|
" Using '<,'> does not give E20
|
||||||
|
call term_sendkeys(buf, ":new\<CR>")
|
||||||
|
call term_sendkeys(buf, "aasdfasdf\<Esc>")
|
||||||
|
call term_sendkeys(buf, ":\<Up>\<Up>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_incsearch_substitute_14', {})
|
||||||
|
call term_sendkeys(buf, "<Esc>")
|
||||||
|
|
||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
call delete('Xis_subst_script')
|
call delete('Xis_subst_script')
|
||||||
|
@@ -737,6 +737,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 */
|
||||||
|
/**/
|
||||||
|
2338,
|
||||||
/**/
|
/**/
|
||||||
2337,
|
2337,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user