mirror of
https://github.com/neovim/neovim.git
synced 2025-09-25 04:28:33 +00:00
vim-patch:8.2.4978: no error if engine selection atom is not at the start
Problem: No error if engine selection atom is not at the start.
Solution: Give an error. (Christian Brabandt, closes vim/vim#10439)
360da40b47
Co-authored-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
@@ -372,7 +372,7 @@ Vim includes two regexp engines:
|
|||||||
1. An old, backtracking engine that supports everything.
|
1. An old, backtracking engine that supports everything.
|
||||||
2. A new, NFA engine that works much faster on some patterns, possibly slower
|
2. A new, NFA engine that works much faster on some patterns, possibly slower
|
||||||
on some patterns.
|
on some patterns.
|
||||||
|
*E1281*
|
||||||
Vim will automatically select the right engine for you. However, if you run
|
Vim will automatically select the right engine for you. However, if you run
|
||||||
into a problem or want to specifically select one engine or the other, you can
|
into a problem or want to specifically select one engine or the other, you can
|
||||||
prepend one of the following to the pattern:
|
prepend one of the following to the pattern:
|
||||||
|
@@ -112,6 +112,8 @@ static char e_regexp_number_after_dot_pos_search_chr[]
|
|||||||
= N_("E1204: No Number allowed after .: '\\%%%c'");
|
= N_("E1204: No Number allowed after .: '\\%%%c'");
|
||||||
static char e_nfa_regexp_missing_value_in_chr[]
|
static char e_nfa_regexp_missing_value_in_chr[]
|
||||||
= N_("E1273: (NFA regexp) missing value in '\\%%%c'");
|
= N_("E1273: (NFA regexp) missing value in '\\%%%c'");
|
||||||
|
static char e_atom_engine_must_be_at_start_of_pattern[]
|
||||||
|
= N_("E1281: Atom '\\%%#=%c' must be at the start of the pattern");
|
||||||
static char e_substitute_nesting_too_deep[] = N_("E1290: substitute nesting too deep");
|
static char e_substitute_nesting_too_deep[] = N_("E1290: substitute nesting too deep");
|
||||||
|
|
||||||
#define NOT_MULTI 0
|
#define NOT_MULTI 0
|
||||||
|
@@ -1971,6 +1971,11 @@ static char_u *regatom(int *flagp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case '#':
|
case '#':
|
||||||
|
if (regparse[0] == '=' && regparse[1] >= 48 && regparse[1] <= 50) {
|
||||||
|
// misplaced \%#=1
|
||||||
|
semsg(_(e_atom_engine_must_be_at_start_of_pattern), regparse[1]);
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
ret = regnode(CURSOR);
|
ret = regnode(CURSOR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -2094,6 +2094,12 @@ static int nfa_regatom(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case '#':
|
case '#':
|
||||||
|
if (regparse[0] == '=' && regparse[1] >= 48
|
||||||
|
&& regparse[1] <= 50) {
|
||||||
|
// misplaced \%#=1
|
||||||
|
semsg(_(e_atom_engine_must_be_at_start_of_pattern), regparse[1]);
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
EMIT(NFA_CURSOR);
|
EMIT(NFA_CURSOR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -1058,6 +1058,24 @@ func Test_using_invalid_visual_position()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_using_two_engines_pattern()
|
||||||
|
new
|
||||||
|
call setline(1, ['foobar=0', 'foobar=1', 'foobar=2'])
|
||||||
|
" \%#= at the end of the pattern
|
||||||
|
for i in range(0, 2)
|
||||||
|
call cursor( (i+1), 7)
|
||||||
|
call assert_fails("%s/foobar\\%#=" .. i, 'E1281:')
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" \%#= at the start of the pattern
|
||||||
|
for i in range(0, 2)
|
||||||
|
call cursor( (i+1), 7)
|
||||||
|
exe ":%s/\\%#=" .. i .. "foobar=" .. i .. "/xx"
|
||||||
|
endfor
|
||||||
|
call assert_equal(['xx', 'xx', 'xx'], getline(1, '$'))
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_recursive_substitute_expr()
|
func Test_recursive_substitute_expr()
|
||||||
new
|
new
|
||||||
func Repl()
|
func Repl()
|
||||||
|
Reference in New Issue
Block a user