summaryrefslogtreecommitdiff
path: root/src/regexp.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2011-06-19 04:32:15 +0200
committerBram Moolenaar <Bram@vim.org>2011-06-19 04:32:15 +0200
commit978287b8f811d384f32fc9b85063f41e2e08f5e2 (patch)
tree789a566320017ba542ed9a5d7a402e2f8cceb0da /src/regexp.c
parent5f8949656acb8b2a850d59f685865938862e4f6d (diff)
downloadvim-978287b8f811d384f32fc9b85063f41e2e08f5e2.zip
updated for version 7.3.225
Problem: Using "\n" in a substitute inside ":s" does not result in a line break. Solution: Change behavior inside vim_regexec_nl(). Add tests. (Motoya Kurotsu)
Diffstat (limited to 'src/regexp.c')
-rw-r--r--src/regexp.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/regexp.c b/src/regexp.c
index 57ea73696..a09ab6194 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -6872,6 +6872,7 @@ static regmatch_T *submatch_match;
static regmmatch_T *submatch_mmatch;
static linenr_T submatch_firstlnum;
static linenr_T submatch_maxline;
+static int submatch_line_lbr;
#endif
#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) || defined(PROTO)
@@ -6998,6 +6999,7 @@ vim_regsub_both(source, dest, copy, magic, backslash)
submatch_mmatch = reg_mmatch;
submatch_firstlnum = reg_firstlnum;
submatch_maxline = reg_maxline;
+ submatch_line_lbr = reg_line_lbr;
save_reg_win = reg_win;
save_ireg_ic = ireg_ic;
can_f_submatch = TRUE;
@@ -7009,9 +7011,10 @@ vim_regsub_both(source, dest, copy, magic, backslash)
for (s = eval_result; *s != NUL; mb_ptr_adv(s))
{
- /* Change NL to CR, so that it becomes a line break.
+ /* Change NL to CR, so that it becomes a line break,
+ * unless called from vim_regexec_nl().
* Skip over a backslashed character. */
- if (*s == NL)
+ if (*s == NL && !submatch_line_lbr)
*s = CAR;
else if (*s == '\\' && s[1] != NUL)
{
@@ -7020,8 +7023,9 @@ vim_regsub_both(source, dest, copy, magic, backslash)
* :s/abc\\\ndef/\="aaa\\\nbbb"/ on text:
* abc\
* def
+ * Not when called from vim_regexec_nl().
*/
- if (*s == NL)
+ if (*s == NL && !submatch_line_lbr)
*s = CAR;
had_backslash = TRUE;
}
@@ -7044,6 +7048,7 @@ vim_regsub_both(source, dest, copy, magic, backslash)
reg_mmatch = submatch_mmatch;
reg_firstlnum = submatch_firstlnum;
reg_maxline = submatch_maxline;
+ reg_line_lbr = submatch_line_lbr;
reg_win = save_reg_win;
ireg_ic = save_ireg_ic;
can_f_submatch = FALSE;