Mercurial > vim
changeset 5504:ec5d11403c19 v7.4.101
updated for version 7.4.101
Problem: Using \1 in pattern goes one line too far. (Bohr Shaw, John Little)
Solution: Only advance the match end for the matched characters in the last
line.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Thu, 21 Nov 2013 17:13:00 +0100 |
parents | da865dd50ddc |
children | 1a5dafa45c82 |
files | src/regexp.c src/testdir/test64.in src/testdir/test64.ok src/version.c |
diffstat | 4 files changed, 11 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/regexp.c +++ b/src/regexp.c @@ -6455,7 +6455,8 @@ re_num_cmp(val, scan) /* * Check whether a backreference matches. * Returns RA_FAIL, RA_NOMATCH or RA_MATCH. - * If "bytelen" is not NULL, it is set to the bytelength of the whole match. + * If "bytelen" is not NULL, it is set to the byte length of the match in the + * last line. */ static int match_with_backref(start_lnum, start_col, end_lnum, end_col, bytelen) @@ -6511,6 +6512,8 @@ match_with_backref(start_lnum, start_col /* Advance to next line. */ reg_nextline(); + if (bytelen != NULL) + *bytelen = 0; ++clnum; ccol = 0; if (got_int)
--- a/src/testdir/test64.in +++ b/src/testdir/test64.in @@ -507,6 +507,8 @@ STARTTEST :" Check a pattern with a line break and ^ and $ :call add(tl, [2, 'a\n^b$\n^c', ['a', 'b', 'c'], ['XX']]) :" +:call add(tl, [2, '\(^.\+\n\)\1', [' dog', ' dog', 'asdf'], ['XXasdf']]) +:" :"""" Run the multi-line tests :" :$put ='multi-line tests'