Mercurial > vim
diff src/regexp_bt.c @ 24693:97789fcef0cf v8.2.2885
patch 8.2.2885: searching for %'> does not match linewise end of line
Commit: https://github.com/vim/vim/commit/872bee557e5f8ab0e4a523a6a845868a2801b17e
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon May 24 22:56:15 2021 +0200
patch 8.2.2885: searching for \%'> does not match linewise end of line
Problem: searching for \%'> does not match linewise end of line. (Tim Chase)
Solution: Match end of line if column is MAXCOL. (closes https://github.com/vim/vim/issues/8238)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 24 May 2021 23:00:03 +0200 |
parents | 87ff80c08e4b |
children | 10b269321459 |
line wrap: on
line diff
--- a/src/regexp_bt.c +++ b/src/regexp_bt.c @@ -3357,17 +3357,29 @@ regmatch( pos = getmark_buf(rex.reg_buf, mark, FALSE); if (pos == NULL // mark doesn't exist - || pos->lnum <= 0 // mark isn't set in reg_buf - || (pos->lnum == rex.lnum + rex.reg_firstlnum - ? (pos->col == (colnr_T)(rex.input - rex.line) + || pos->lnum <= 0) // mark isn't set in reg_buf + { + status = RA_NOMATCH; + } + else + { + colnr_T pos_col = pos->lnum == rex.lnum + rex.reg_firstlnum + && pos->col == MAXCOL + ? (colnr_T)STRLEN(reg_getline( + pos->lnum - rex.reg_firstlnum)) + : pos->col; + + if ((pos->lnum == rex.lnum + rex.reg_firstlnum + ? (pos_col == (colnr_T)(rex.input - rex.line) ? (cmp == '<' || cmp == '>') - : (pos->col < (colnr_T)(rex.input - rex.line) + : (pos_col < (colnr_T)(rex.input - rex.line) ? cmp != '>' : cmp != '<')) : (pos->lnum < rex.lnum + rex.reg_firstlnum ? cmp != '>' : cmp != '<'))) status = RA_NOMATCH; + } } break;