mirror of
https://github.com/vim/vim.git
synced 2025-10-05 05:34:07 -04:00
updated for version 7.3.627
Problem: When using the "n" flag with the ":s" command a \= substitution will not be evaluated. Solution: Do perform the evaluation, so that a function can be invoked at every matching position without changing the text. (Christian Brabandt)
This commit is contained in:
@@ -4264,6 +4264,9 @@ do_sub(eap)
|
||||
int endcolumn = FALSE; /* cursor in last column when done */
|
||||
pos_T old_cursor = curwin->w_cursor;
|
||||
int start_nsubs;
|
||||
#ifdef FEAT_EVAL
|
||||
int save_ma = 0;
|
||||
#endif
|
||||
|
||||
cmd = eap->arg;
|
||||
if (!global_busy)
|
||||
@@ -4668,7 +4671,12 @@ do_sub(eap)
|
||||
}
|
||||
sub_nsubs++;
|
||||
did_sub = TRUE;
|
||||
goto skip;
|
||||
#ifdef FEAT_EVAL
|
||||
/* Skip the substitution, unless an expression is used,
|
||||
* then it is evaluated in the sandbox. */
|
||||
if (!(sub[0] == '\\' && sub[1] == '='))
|
||||
#endif
|
||||
goto skip;
|
||||
}
|
||||
|
||||
if (do_ask)
|
||||
@@ -4840,10 +4848,27 @@ do_sub(eap)
|
||||
/*
|
||||
* 3. substitute the string.
|
||||
*/
|
||||
#ifdef FEAT_EVAL
|
||||
if (do_count)
|
||||
{
|
||||
/* prevent accidently changing the buffer by a function */
|
||||
save_ma = curbuf->b_p_ma;
|
||||
curbuf->b_p_ma = FALSE;
|
||||
sandbox++;
|
||||
}
|
||||
#endif
|
||||
/* get length of substitution part */
|
||||
sublen = vim_regsub_multi(®match,
|
||||
sub_firstlnum - regmatch.startpos[0].lnum,
|
||||
sub, sub_firstline, FALSE, p_magic, TRUE);
|
||||
#ifdef FEAT_EVAL
|
||||
if (do_count)
|
||||
{
|
||||
curbuf->b_p_ma = save_ma;
|
||||
sandbox--;
|
||||
goto skip;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* When the match included the "$" of the last line it may
|
||||
* go beyond the last line of the buffer. */
|
||||
|
@@ -714,6 +714,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
627,
|
||||
/**/
|
||||
626,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user