mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
updated for version 7.3.792
Problem: ":substitute" works differently without confirmation. Solution: Do not change the text when asking for confirmation, only display it.
This commit is contained in:
@@ -4727,6 +4727,8 @@ do_sub(eap)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
char_u *orig_line = NULL;
|
||||||
|
int len_change = 0;
|
||||||
#ifdef FEAT_FOLDING
|
#ifdef FEAT_FOLDING
|
||||||
int save_p_fen = curwin->w_p_fen;
|
int save_p_fen = curwin->w_p_fen;
|
||||||
|
|
||||||
@@ -4737,9 +4739,43 @@ do_sub(eap)
|
|||||||
temp = RedrawingDisabled;
|
temp = RedrawingDisabled;
|
||||||
RedrawingDisabled = 0;
|
RedrawingDisabled = 0;
|
||||||
|
|
||||||
|
if (new_start != NULL)
|
||||||
|
{
|
||||||
|
/* There already was a substitution, we would
|
||||||
|
* like to show this to the user. We cannot
|
||||||
|
* really update the line, it would change
|
||||||
|
* what matches. Temporarily replace the line
|
||||||
|
* and change it back afterwards. */
|
||||||
|
orig_line = vim_strsave(ml_get(lnum));
|
||||||
|
if (orig_line != NULL)
|
||||||
|
{
|
||||||
|
char_u *new_line = concat_str(new_start,
|
||||||
|
sub_firstline + copycol);
|
||||||
|
|
||||||
|
if (new_line == NULL)
|
||||||
|
{
|
||||||
|
vim_free(orig_line);
|
||||||
|
orig_line = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Position the cursor relative to the
|
||||||
|
* end of the line, the previous
|
||||||
|
* substitute may have inserted or
|
||||||
|
* deleted characters before the
|
||||||
|
* cursor. */
|
||||||
|
len_change = STRLEN(new_line)
|
||||||
|
- STRLEN(orig_line);
|
||||||
|
curwin->w_cursor.col += len_change;
|
||||||
|
ml_replace(lnum, new_line, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
search_match_lines = regmatch.endpos[0].lnum
|
search_match_lines = regmatch.endpos[0].lnum
|
||||||
- regmatch.startpos[0].lnum;
|
- regmatch.startpos[0].lnum;
|
||||||
search_match_endcol = regmatch.endpos[0].col;
|
search_match_endcol = regmatch.endpos[0].col
|
||||||
|
+ len_change;
|
||||||
highlight_match = TRUE;
|
highlight_match = TRUE;
|
||||||
|
|
||||||
update_topline();
|
update_topline();
|
||||||
@@ -4781,6 +4817,10 @@ do_sub(eap)
|
|||||||
msg_didout = FALSE; /* don't scroll up */
|
msg_didout = FALSE; /* don't scroll up */
|
||||||
msg_col = 0;
|
msg_col = 0;
|
||||||
gotocmdline(TRUE);
|
gotocmdline(TRUE);
|
||||||
|
|
||||||
|
/* restore the line */
|
||||||
|
if (orig_line != NULL)
|
||||||
|
ml_replace(lnum, orig_line, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
need_wait_return = FALSE; /* no hit-return prompt */
|
need_wait_return = FALSE; /* no hit-return prompt */
|
||||||
@@ -5045,14 +5085,10 @@ skip:
|
|||||||
* The check for nmatch_tl is needed for when multi-line
|
* The check for nmatch_tl is needed for when multi-line
|
||||||
* matching must replace the lines before trying to do another
|
* matching must replace the lines before trying to do another
|
||||||
* match, otherwise "\@<=" won't work.
|
* match, otherwise "\@<=" won't work.
|
||||||
* When asking the user we like to show the already replaced
|
|
||||||
* text, but don't do it when "\<@=" or "\<@!" is used, it
|
|
||||||
* changes what matches.
|
|
||||||
* When the match starts below where we start searching also
|
* When the match starts below where we start searching also
|
||||||
* need to replace the line first (using \zs after \n).
|
* need to replace the line first (using \zs after \n).
|
||||||
*/
|
*/
|
||||||
if (lastone
|
if (lastone
|
||||||
|| (do_ask && !re_lookbehind(regmatch.regprog))
|
|
||||||
|| nmatch_tl > 0
|
|| nmatch_tl > 0
|
||||||
|| (nmatch = vim_regexec_multi(®match, curwin,
|
|| (nmatch = vim_regexec_multi(®match, curwin,
|
||||||
curbuf, sub_firstlnum,
|
curbuf, sub_firstlnum,
|
||||||
|
@@ -725,6 +725,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 */
|
||||||
|
/**/
|
||||||
|
792,
|
||||||
/**/
|
/**/
|
||||||
791,
|
791,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user