home *** CD-ROM | disk | FTP | other *** search
- To: vim_dev@googlegroups.com
- Subject: Patch 7.3.792
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- Mime-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- ------------
-
- Patch 7.3.792
- Problem: ":substitute" works differently without confirmation.
- Solution: Do not change the text when asking for confirmation, only display
- it.
- Files: src/ex_cmds.c
-
-
- *** ../vim-7.3.791/src/ex_cmds.c 2013-01-17 18:33:58.000000000 +0100
- --- src/ex_cmds.c 2013-01-30 16:01:58.000000000 +0100
- ***************
- *** 4727,4732 ****
- --- 4727,4734 ----
- }
- else
- {
- + char_u *orig_line = NULL;
- + int len_change = 0;
- #ifdef FEAT_FOLDING
- int save_p_fen = curwin->w_p_fen;
-
- ***************
- *** 4737,4745 ****
- temp = RedrawingDisabled;
- RedrawingDisabled = 0;
-
- search_match_lines = regmatch.endpos[0].lnum
- - regmatch.startpos[0].lnum;
- ! search_match_endcol = regmatch.endpos[0].col;
- highlight_match = TRUE;
-
- update_topline();
- --- 4739,4781 ----
- temp = RedrawingDisabled;
- 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
- - regmatch.startpos[0].lnum;
- ! search_match_endcol = regmatch.endpos[0].col
- ! + len_change;
- highlight_match = TRUE;
-
- update_topline();
- ***************
- *** 4781,4786 ****
- --- 4817,4826 ----
- msg_didout = FALSE; /* don't scroll up */
- msg_col = 0;
- gotocmdline(TRUE);
- +
- + /* restore the line */
- + if (orig_line != NULL)
- + ml_replace(lnum, orig_line, FALSE);
- }
-
- need_wait_return = FALSE; /* no hit-return prompt */
- ***************
- *** 5045,5058 ****
- * The check for nmatch_tl is needed for when multi-line
- * matching must replace the lines before trying to do another
- * 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
- * need to replace the line first (using \zs after \n).
- */
- if (lastone
- - || (do_ask && !re_lookbehind(regmatch.regprog))
- || nmatch_tl > 0
- || (nmatch = vim_regexec_multi(®match, curwin,
- curbuf, sub_firstlnum,
- --- 5085,5094 ----
- *** ../vim-7.3.791/src/version.c 2013-01-30 14:55:35.000000000 +0100
- --- src/version.c 2013-01-30 16:25:36.000000000 +0100
- ***************
- *** 727,728 ****
- --- 727,730 ----
- { /* Add new patch number below this line */
- + /**/
- + 792,
- /**/
-
- --
- Trees moving back and forth is what makes the wind blow.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
- /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
- \\\ an exciting new programming language -- http://www.Zimbu.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
-