patch 8.2.2182: Vim9: value of 'magic' is still relevant

Problem:    Vim9: value of 'magic' is still relevant.
Solution:   Always behave like 'magic' is on in Vim9 script (closes #7509)
This commit is contained in:
Bram Moolenaar
2020-12-21 19:59:08 +01:00
parent a3d10a508c
commit f4e2099e39
17 changed files with 98 additions and 42 deletions

View File

@@ -409,7 +409,7 @@ do_arglist(
p = file_pat_to_reg_pat(p, NULL, NULL, FALSE); p = file_pat_to_reg_pat(p, NULL, NULL, FALSE);
if (p == NULL) if (p == NULL)
break; break;
regmatch.regprog = vim_regcomp(p, p_magic ? RE_MAGIC : 0); regmatch.regprog = vim_regcomp(p, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog == NULL) if (regmatch.regprog == NULL)
{ {
vim_free(p); vim_free(p);

View File

@@ -2605,7 +2605,7 @@ buflist_findpat(
p = pat; p = pat;
if (*p == '^' && !(attempt & 1)) // add/remove '^' if (*p == '^' && !(attempt & 1)) // add/remove '^'
++p; ++p;
regmatch.regprog = vim_regcomp(p, p_magic ? RE_MAGIC : 0); regmatch.regprog = vim_regcomp(p, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog == NULL) if (regmatch.regprog == NULL)
{ {
vim_free(pat); vim_free(pat);

View File

@@ -1391,7 +1391,7 @@ set_one_cmd_context(
if (*arg != NUL) if (*arg != NUL)
{ {
xp->xp_context = EXPAND_NOTHING; xp->xp_context = EXPAND_NOTHING;
arg = skip_regexp(arg + 1, *arg, p_magic); arg = skip_regexp(arg + 1, *arg, magic_isset());
} }
} }
return find_nextcmd(arg); return find_nextcmd(arg);
@@ -1429,7 +1429,7 @@ set_one_cmd_context(
{ {
// skip "from" part // skip "from" part
++arg; ++arg;
arg = skip_regexp(arg, delim, p_magic); arg = skip_regexp(arg, delim, magic_isset());
} }
// skip "to" part // skip "to" part
while (arg[0] != NUL && arg[0] != delim) while (arg[0] != NUL && arg[0] != delim)
@@ -2077,7 +2077,7 @@ ExpandFromContext(
pat = tofree; pat = tofree;
} }
regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0); regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog == NULL) if (regmatch.regprog == NULL)
return FAIL; return FAIL;

View File

@@ -3671,7 +3671,8 @@ ex_substitute(exarg_T *eap)
which_pat = RE_LAST; // use last used regexp which_pat = RE_LAST; // use last used regexp
delimiter = *cmd++; // remember delimiter character delimiter = *cmd++; // remember delimiter character
pat = cmd; // remember start of search pat pat = cmd; // remember start of search pat
cmd = skip_regexp_ex(cmd, delimiter, p_magic, &eap->arg, NULL); cmd = skip_regexp_ex(cmd, delimiter, magic_isset(),
&eap->arg, NULL);
if (cmd[0] == delimiter) // end delimiter found if (cmd[0] == delimiter) // end delimiter found
*cmd++ = NUL; // replace it with a NUL *cmd++ = NUL; // replace it with a NUL
} }
@@ -3763,7 +3764,7 @@ ex_substitute(exarg_T *eap)
} }
if ((cmdmod.cmod_flags & CMOD_KEEPPATTERNS) == 0) if ((cmdmod.cmod_flags & CMOD_KEEPPATTERNS) == 0)
save_re_pat(RE_SUBST, pat, p_magic); save_re_pat(RE_SUBST, pat, magic_isset());
// put pattern in history // put pattern in history
add_to_history(HIST_SEARCH, pat, TRUE, NUL); add_to_history(HIST_SEARCH, pat, TRUE, NUL);
@@ -3897,7 +3898,7 @@ ex_substitute(exarg_T *eap)
* But don't do it when it starts with "\=", then it's an expression. * But don't do it when it starts with "\=", then it's an expression.
*/ */
if (!(sub[0] == '\\' && sub[1] == '=')) if (!(sub[0] == '\\' && sub[1] == '='))
sub = regtilde(sub, p_magic); sub = regtilde(sub, magic_isset());
/* /*
* Check for a match on each line. * Check for a match on each line.
@@ -4309,7 +4310,7 @@ ex_substitute(exarg_T *eap)
// get length of substitution part // get length of substitution part
sublen = vim_regsub_multi(&regmatch, sublen = vim_regsub_multi(&regmatch,
sub_firstlnum - regmatch.startpos[0].lnum, sub_firstlnum - regmatch.startpos[0].lnum,
sub, sub_firstline, FALSE, p_magic, TRUE); sub, sub_firstline, FALSE, magic_isset(), TRUE);
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
// If getting the substitute string caused an error, don't do // If getting the substitute string caused an error, don't do
// the replacement. // the replacement.
@@ -4413,7 +4414,7 @@ ex_substitute(exarg_T *eap)
(void)vim_regsub_multi(&regmatch, (void)vim_regsub_multi(&regmatch,
sub_firstlnum - regmatch.startpos[0].lnum, sub_firstlnum - regmatch.startpos[0].lnum,
sub, new_end, TRUE, p_magic, TRUE); sub, new_end, TRUE, magic_isset(), TRUE);
sub_nsubs++; sub_nsubs++;
did_sub = TRUE; did_sub = TRUE;
@@ -4846,7 +4847,7 @@ ex_global(exarg_T *eap)
if (delim) if (delim)
++cmd; // skip delimiter if there is one ++cmd; // skip delimiter if there is one
pat = cmd; // remember start of pattern pat = cmd; // remember start of pattern
cmd = skip_regexp_ex(cmd, delim, p_magic, &eap->arg, NULL); cmd = skip_regexp_ex(cmd, delim, magic_isset(), &eap->arg, NULL);
if (cmd[0] == delim) // end delimiter found if (cmd[0] == delim) // end delimiter found
*cmd++ = NUL; // replace it with a NUL *cmd++ = NUL; // replace it with a NUL
} }

View File

@@ -1371,7 +1371,7 @@ EXCMD(CMD_slast, "slast", ex_last,
EX_EXTRA|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR, EX_EXTRA|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
ADDR_NONE), ADDR_NONE),
EXCMD(CMD_smagic, "smagic", ex_submagic, EXCMD(CMD_smagic, "smagic", ex_submagic,
EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK, EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
ADDR_LINES), ADDR_LINES),
EXCMD(CMD_smap, "smap", ex_map, EXCMD(CMD_smap, "smap", ex_map,
EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK, EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
@@ -1386,7 +1386,7 @@ EXCMD(CMD_snext, "snext", ex_next,
EX_RANGE|EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR, EX_RANGE|EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
ADDR_OTHER), ADDR_OTHER),
EXCMD(CMD_snomagic, "snomagic", ex_submagic, EXCMD(CMD_snomagic, "snomagic", ex_submagic,
EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK, EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
ADDR_LINES), ADDR_LINES),
EXCMD(CMD_snoremap, "snoremap", ex_map, EXCMD(CMD_snoremap, "snoremap", ex_map,
EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK, EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,

View File

@@ -3951,7 +3951,7 @@ get_address(
} }
if (skip) // skip "/pat/" if (skip) // skip "/pat/"
{ {
cmd = skip_regexp(cmd, c, (int)p_magic); cmd = skip_regexp(cmd, c, magic_isset());
if (*cmd == c) if (*cmd == c)
++cmd; ++cmd;
} }
@@ -6535,9 +6535,9 @@ ex_open(exarg_T *eap)
{ {
// ":open /pattern/": put cursor in column found with pattern // ":open /pattern/": put cursor in column found with pattern
++eap->arg; ++eap->arg;
p = skip_regexp(eap->arg, '/', p_magic); p = skip_regexp(eap->arg, '/', magic_isset());
*p = NUL; *p = NUL;
regmatch.regprog = vim_regcomp(eap->arg, p_magic ? RE_MAGIC : 0); regmatch.regprog = vim_regcomp(eap->arg, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog != NULL) if (regmatch.regprog != NULL)
{ {
regmatch.rm_ic = p_ic; regmatch.rm_ic = p_ic;
@@ -7529,11 +7529,11 @@ ex_may_print(exarg_T *eap)
static void static void
ex_submagic(exarg_T *eap) ex_submagic(exarg_T *eap)
{ {
int magic_save = p_magic; magic_T saved = magic_overruled;
p_magic = (eap->cmdidx == CMD_smagic); magic_overruled = eap->cmdidx == CMD_smagic ? MAGIC_ON : MAGIC_OFF;
ex_substitute(eap); ex_substitute(eap);
p_magic = magic_save; magic_overruled = saved;
} }
/* /*
@@ -8333,7 +8333,7 @@ ex_findpat(exarg_T *eap)
{ {
whole = FALSE; whole = FALSE;
++eap->arg; ++eap->arg;
p = skip_regexp(eap->arg, '/', p_magic); p = skip_regexp(eap->arg, '/', magic_isset());
if (*p) if (*p)
{ {
*p++ = NUL; *p++ = NUL;

View File

@@ -149,7 +149,7 @@ typedef struct {
pos_T match_end; pos_T match_end;
int did_incsearch; int did_incsearch;
int incsearch_postponed; int incsearch_postponed;
int magic_save; magic_T magic_overruled_save;
} incsearch_state_T; } incsearch_state_T;
static void static void
@@ -159,7 +159,7 @@ init_incsearch_state(incsearch_state_T *is_state)
is_state->match_start = curwin->w_cursor; is_state->match_start = curwin->w_cursor;
is_state->did_incsearch = FALSE; is_state->did_incsearch = FALSE;
is_state->incsearch_postponed = FALSE; is_state->incsearch_postponed = FALSE;
is_state->magic_save = p_magic; is_state->magic_overruled_save = magic_overruled;
CLEAR_POS(&is_state->match_end); CLEAR_POS(&is_state->match_end);
is_state->save_cursor = curwin->w_cursor; // may be restored later is_state->save_cursor = curwin->w_cursor; // may be restored later
is_state->search_start = curwin->w_cursor; is_state->search_start = curwin->w_cursor;
@@ -252,9 +252,9 @@ do_incsearch_highlighting(
|| STRNCMP(cmd, "vglobal", p - cmd) == 0) || STRNCMP(cmd, "vglobal", p - cmd) == 0)
{ {
if (*cmd == 's' && cmd[1] == 'm') if (*cmd == 's' && cmd[1] == 'm')
p_magic = TRUE; magic_overruled = MAGIC_ON;
else if (*cmd == 's' && cmd[1] == 'n') else if (*cmd == 's' && cmd[1] == 'n')
p_magic = FALSE; magic_overruled = MAGIC_OFF;
} }
else if (STRNCMP(cmd, "sort", MAX(p - cmd, 3)) == 0) else if (STRNCMP(cmd, "sort", MAX(p - cmd, 3)) == 0)
{ {
@@ -288,7 +288,7 @@ do_incsearch_highlighting(
p = skipwhite(p); p = skipwhite(p);
delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++; delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++;
*search_delim = delim; *search_delim = delim;
end = skip_regexp(p, delim, p_magic); end = skip_regexp(p, delim, magic_isset());
use_last_pat = end == p && *end == delim; use_last_pat = end == p && *end == delim;
@@ -372,7 +372,7 @@ finish_incsearch_highlighting(
search_first_line = 0; search_first_line = 0;
search_last_line = MAXLNUM; search_last_line = MAXLNUM;
p_magic = is_state->magic_save; magic_overruled = is_state->magic_overruled_save;
validate_cursor(); // needed for TAB validate_cursor(); // needed for TAB
redraw_all_later(SOME_VALID); redraw_all_later(SOME_VALID);
@@ -713,7 +713,7 @@ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state)
if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff + skiplen)) if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff + skiplen))
*c = MB_TOLOWER(*c); *c = MB_TOLOWER(*c);
if (*c == search_delim || vim_strchr((char_u *)( if (*c == search_delim || vim_strchr((char_u *)(
p_magic ? "\\~^$.*[" : "\\^$"), *c) != NULL) magic_isset() ? "\\~^$.*[" : "\\^$"), *c) != NULL)
{ {
// put a backslash before special characters // put a backslash before special characters
stuffcharReadbuff(*c); stuffcharReadbuff(*c);

View File

@@ -1938,3 +1938,8 @@ EXTERN int channel_need_redraw INIT(= FALSE);
#define FOR_ALL_LIST_ITEMS(l, li) \ #define FOR_ALL_LIST_ITEMS(l, li) \
for ((li) = (l)->lv_first; (li) != NULL; (li) = (li)->li_next) for ((li) = (l)->lv_first; (li) != NULL; (li) = (li)->li_next)
// While executing a regexp and set to MAGIC_ON or MAGIC_OFF this overrules
// p_magic. Otherwise set to MAGIC_NOT_SET.
EXTERN magic_T magic_overruled INIT(= MAGIC_NOT_SET);

View File

@@ -1216,7 +1216,7 @@ ins_compl_dictionaries(
} }
else else
{ {
regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0); regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog == NULL) if (regmatch.regprog == NULL)
goto theend; goto theend;
} }
@@ -4175,7 +4175,7 @@ quote_meta(char_u *dest, char_u *src, int len)
break; break;
// FALLTHROUGH // FALLTHROUGH
case '~': case '~':
if (!p_magic) // quote these only if magic is set if (!magic_isset()) // quote these only if magic is set
break; break;
// FALLTHROUGH // FALLTHROUGH
case '\\': case '\\':

View File

@@ -3738,9 +3738,9 @@ nv_ident(cmdarg_T *cap)
else else
{ {
if (cmdchar == '*') if (cmdchar == '*')
aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\"); aux_ptr = (char_u *)(magic_isset() ? "/.*~[^$\\" : "/^$\\");
else if (cmdchar == '#') else if (cmdchar == '#')
aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\"); aux_ptr = (char_u *)(magic_isset() ? "/?.*~[^$\\" : "/?^$\\");
else if (tag_cmd) else if (tag_cmd)
{ {
if (curbuf->b_help) if (curbuf->b_help)

View File

@@ -6996,3 +6996,22 @@ fill_culopt_flags(char_u *val, win_T *wp)
return OK; return OK;
} }
#endif #endif
/*
* Get the value of 'magic' adjusted for Vim9 script.
*/
int
magic_isset(void)
{
switch (magic_overruled)
{
case MAGIC_ON: return TRUE;
case MAGIC_OFF: return FALSE;
case MAGIC_NOT_SET: break;
}
#ifdef FEAT_EVAL
if (in_vim9script())
return TRUE;
#endif
return p_magic;
}

View File

@@ -75,4 +75,5 @@ unsigned int get_bkc_value(buf_T *buf);
char_u *get_showbreak_value(win_T *win); char_u *get_showbreak_value(win_T *win);
dict_T *get_winbuf_options(int bufopt); dict_T *get_winbuf_options(int bufopt);
int fill_culopt_flags(char_u *val, win_T *wp); int fill_culopt_flags(char_u *val, win_T *wp);
int magic_isset(void);
/* vim: set ft=c : */ /* vim: set ft=c : */

View File

@@ -134,7 +134,7 @@ search_regcomp(
int i; int i;
rc_did_emsg = FALSE; rc_did_emsg = FALSE;
magic = p_magic; magic = magic_isset();
/* /*
* If no pattern given, use a previously defined pattern. * If no pattern given, use a previously defined pattern.
@@ -1341,7 +1341,8 @@ do_search(
* If there is a matching '/' or '?', toss it. * If there is a matching '/' or '?', toss it.
*/ */
ps = strcopy; ps = strcopy;
p = skip_regexp_ex(pat, search_delim, (int)p_magic, &strcopy, NULL); p = skip_regexp_ex(pat, search_delim, magic_isset(),
&strcopy, NULL);
if (strcopy != ps) if (strcopy != ps)
{ {
// made a copy of "pat" to change "\?" to "?" // made a copy of "pat" to change "\?" to "?"
@@ -3385,7 +3386,7 @@ find_pattern_in_path(
sprintf((char *)pat, whole ? "\\<%.*s\\>" : "%.*s", len, ptr); sprintf((char *)pat, whole ? "\\<%.*s\\>" : "%.*s", len, ptr);
// ignore case according to p_ic, p_scs and pat // ignore case according to p_ic, p_scs and pat
regmatch.rm_ic = ignorecase(pat); regmatch.rm_ic = ignorecase(pat);
regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0); regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0);
vim_free(pat); vim_free(pat);
if (regmatch.regprog == NULL) if (regmatch.regprog == NULL)
goto fpip_end; goto fpip_end;
@@ -3393,7 +3394,8 @@ find_pattern_in_path(
inc_opt = (*curbuf->b_p_inc == NUL) ? p_inc : curbuf->b_p_inc; inc_opt = (*curbuf->b_p_inc == NUL) ? p_inc : curbuf->b_p_inc;
if (*inc_opt != NUL) if (*inc_opt != NUL)
{ {
incl_regmatch.regprog = vim_regcomp(inc_opt, p_magic ? RE_MAGIC : 0); incl_regmatch.regprog = vim_regcomp(inc_opt,
magic_isset() ? RE_MAGIC : 0);
if (incl_regmatch.regprog == NULL) if (incl_regmatch.regprog == NULL)
goto fpip_end; goto fpip_end;
incl_regmatch.rm_ic = FALSE; // don't ignore case in incl. pat. incl_regmatch.rm_ic = FALSE; // don't ignore case in incl. pat.
@@ -3401,7 +3403,8 @@ find_pattern_in_path(
if (type == FIND_DEFINE && (*curbuf->b_p_def != NUL || *p_def != NUL)) if (type == FIND_DEFINE && (*curbuf->b_p_def != NUL || *p_def != NUL))
{ {
def_regmatch.regprog = vim_regcomp(*curbuf->b_p_def == NUL def_regmatch.regprog = vim_regcomp(*curbuf->b_p_def == NUL
? p_def : curbuf->b_p_def, p_magic ? RE_MAGIC : 0); ? p_def : curbuf->b_p_def,
magic_isset() ? RE_MAGIC : 0);
if (def_regmatch.regprog == NULL) if (def_regmatch.regprog == NULL)
goto fpip_end; goto fpip_end;
def_regmatch.rm_ic = FALSE; // don't ignore case in define pat. def_regmatch.rm_ic = FALSE; // don't ignore case in define pat.

View File

@@ -4309,3 +4309,9 @@ typedef struct
// We have to guess how much a sequence of bytes may expand when converting // We have to guess how much a sequence of bytes may expand when converting
// with iconv() to be able to allocate a buffer. // with iconv() to be able to allocate a buffer.
#define ICONV_MULT 8 #define ICONV_MULT 8
typedef enum {
MAGIC_NOT_SET, // p_magic not overruled
MAGIC_ON, // magic on inside regexp
MAGIC_OFF // magic off inside regexp
} magic_T;

View File

@@ -1271,7 +1271,7 @@ prepare_pats(pat_T *pats, int has_re)
else else
for (pats->headlen = 0; pats->head[pats->headlen] != NUL; for (pats->headlen = 0; pats->head[pats->headlen] != NUL;
++pats->headlen) ++pats->headlen)
if (vim_strchr((char_u *)(p_magic ? ".[~*\\$" : "\\$"), if (vim_strchr((char_u *)(magic_isset() ? ".[~*\\$" : "\\$"),
pats->head[pats->headlen]) != NULL) pats->head[pats->headlen]) != NULL)
break; break;
if (p_tl != 0 && pats->headlen > p_tl) // adjust for 'taglength' if (p_tl != 0 && pats->headlen > p_tl) // adjust for 'taglength'
@@ -1279,7 +1279,8 @@ prepare_pats(pat_T *pats, int has_re)
} }
if (has_re) if (has_re)
pats->regmatch.regprog = vim_regcomp(pats->pat, p_magic ? RE_MAGIC : 0); pats->regmatch.regprog = vim_regcomp(pats->pat,
magic_isset() ? RE_MAGIC : 0);
else else
pats->regmatch.regprog = NULL; pats->regmatch.regprog = NULL;
} }
@@ -3311,7 +3312,7 @@ jumpto_tag(
int keep_help) // keep help flag (FALSE for cscope) int keep_help) // keep help flag (FALSE for cscope)
{ {
int save_secure; int save_secure;
int save_magic; int save_magic_overruled;
int save_p_ws, save_p_scs, save_p_ic; int save_p_ws, save_p_scs, save_p_ic;
linenr_T save_lnum; linenr_T save_lnum;
char_u *str; char_u *str;
@@ -3503,8 +3504,8 @@ jumpto_tag(
#ifdef HAVE_SANDBOX #ifdef HAVE_SANDBOX
++sandbox; ++sandbox;
#endif #endif
save_magic = p_magic; save_magic_overruled = magic_overruled;
p_magic = FALSE; // always execute with 'nomagic' magic_overruled = MAGIC_OFF; // always execute with 'nomagic'
#ifdef FEAT_SEARCH_EXTRA #ifdef FEAT_SEARCH_EXTRA
// Save value of no_hlsearch, jumping to a tag is not a real search // Save value of no_hlsearch, jumping to a tag is not a real search
save_no_hlsearch = no_hlsearch; save_no_hlsearch = no_hlsearch;
@@ -3626,7 +3627,7 @@ jumpto_tag(
if (secure == 2) if (secure == 2)
wait_return(TRUE); wait_return(TRUE);
secure = save_secure; secure = save_secure;
p_magic = save_magic; magic_overruled = save_magic_overruled;
#ifdef HAVE_SANDBOX #ifdef HAVE_SANDBOX
--sandbox; --sandbox;
#endif #endif

View File

@@ -722,4 +722,22 @@ def Test_command_not_recognized()
CheckDefFailure(lines, 'E1146:', 1) CheckDefFailure(lines, 'E1146:', 1)
enddef enddef
def Test_magic_not_used()
new
for cmd in ['set magic', 'set nomagic']
exe cmd
setline(1, 'aaa')
s/.../bbb/
assert_equal('bbb', getline(1))
endfor
set magic
setline(1, 'aaa')
assert_fails('s/.\M../bbb/', 'E486:')
assert_fails('snomagic/.../bbb/', 'E486:')
assert_equal('aaa', getline(1))
bwipe!
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@@ -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 */
/**/
2182,
/**/ /**/
2181, 2181,
/**/ /**/