Mercurial > vim
changeset 24745:b1fa3f005c93 v8.2.2911
patch 8.2.2911: pattern "%V" does not match all of block selection
Commit: https://github.com/vim/vim/commit/e71c0ebe2cee4a4916c49e206733200299e4c065
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun May 30 16:43:11 2021 +0200
patch 8.2.2911: pattern "\%V" does not match all of block selection
Problem: Pattern "\%V" does not match all of block selection. (Rick Howe)
Solution: Use the value of vi_curswant. (closes https://github.com/vim/vim/issues/8285)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 30 May 2021 16:45:03 +0200 |
parents | 20e3ae096039 |
children | 648c3fec2504 |
files | src/regexp.c src/testdir/dumps/Test_hlsearch_block_visual_match.dump src/testdir/test_search.vim src/version.c |
diffstat | 4 files changed, 35 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/regexp.c +++ b/src/regexp.c @@ -1279,6 +1279,7 @@ reg_match_visual(void) colnr_T start, end; colnr_T start2, end2; colnr_T cols; + colnr_T curswant; // Check if the buffer is the current buffer. if (rex.reg_buf != curbuf || VIsual.lnum == 0) @@ -1297,6 +1298,7 @@ reg_match_visual(void) bot = VIsual; } mode = VIsual_mode; + curswant = wp->w_curswant; } else { @@ -1311,6 +1313,7 @@ reg_match_visual(void) bot = curbuf->b_visual.vi_start; } mode = curbuf->b_visual.vi_mode; + curswant = curbuf->b_visual.vi_curswant; } lnum = rex.lnum + rex.reg_firstlnum; if (lnum < top.lnum || lnum > bot.lnum) @@ -1331,7 +1334,7 @@ reg_match_visual(void) start = start2; if (end2 > end) end = end2; - if (top.col == MAXCOL || bot.col == MAXCOL) + if (top.col == MAXCOL || bot.col == MAXCOL || curswant == MAXCOL) end = MAXCOL; cols = win_linetabsize(wp, rex.line, (colnr_T)(rex.input - rex.line)); if (cols < start || cols > end - (*p_sel == 'e'))
new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_hlsearch_block_visual_match.dump @@ -0,0 +1,9 @@ +|a+0&#ffff4012@1| | +0&#ffffff0@56 +>b+0&#ffff4012@3| | +0&#ffffff0@54 +|c+0&#ffff4012@5| | +0&#ffffff0@52 +|~+0#4040ff13&| @58 +|~| @58 +|~| @58 +|~| @58 +|~| @58 +|/+0#0000000&|\|%|V| @37|2|,|1| @10|A|l@1|
--- a/src/testdir/test_search.vim +++ b/src/testdir/test_search.vim @@ -984,6 +984,26 @@ func Test_hlsearch_and_visual() call delete('Xhlvisual_script') endfunc +func Test_hlsearch_block_visual_match() + CheckScreendump + + let lines =<< trim END + set hlsearch + call setline(1, ['aa', 'bbbb', 'cccccc']) + END + call writefile(lines, 'Xhlsearch_block') + let buf = RunVimInTerminal('-S Xhlsearch_block', {'rows': 9, 'cols': 60}) + + call term_sendkeys(buf, "G\<C-V>$kk\<Esc>") + sleep 100m + call term_sendkeys(buf, "/\\%V\<CR>") + sleep 100m + call VerifyScreenDump(buf, 'Test_hlsearch_block_visual_match', {}) + + call StopVimInTerminal(buf) + call delete('Xhlsearch_block') +endfunc + func Test_incsearch_substitute() CheckOption incsearch