Mercurial > vim
changeset 24341:0e1b8b98f9f4 v8.2.2711
patch 8.2.2711: "gj" in a closed fold does not move out of the fold
Commit: https://github.com/vim/vim/commit/3c49e74e18993915a779cafe4af3749b39fd3e2a
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Apr 4 21:26:04 2021 +0200
patch 8.2.2711: "gj" in a closed fold does not move out of the fold
Problem: "gj" in a closed fold does not move out of the fold. (Marco Hinz)
Solution: Add a check for being in a closed fold. (closes https://github.com/vim/vim/issues/8062)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 04 Apr 2021 21:30:03 +0200 |
parents | b835b68b64a4 |
children | e538d7d1cdd6 |
files | src/normal.c src/testdir/test_fold.vim src/version.c |
diffstat | 3 files changed, 28 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/normal.c +++ b/src/normal.c @@ -2564,7 +2564,11 @@ nv_screengo(oparg_T *oap, int dir, long { if (dir == BACKWARD) { - if ((long)curwin->w_curswant >= width1) + if ((long)curwin->w_curswant >= width1 +#ifdef FEAT_FOLDING + && !hasFolding(curwin->w_cursor.lnum, NULL, NULL) +#endif + ) // Move back within the line. This can give a negative value // for w_curswant if width1 < width2 (with cpoptions+=n), // which will get clipped to column 0. @@ -2598,7 +2602,11 @@ nv_screengo(oparg_T *oap, int dir, long n = ((linelen - width1 - 1) / width2 + 1) * width2 + width1; else n = width1; - if (curwin->w_curswant + width2 < (colnr_T)n) + if (curwin->w_curswant + width2 < (colnr_T)n +#ifdef FEAT_FOLDING + && !hasFolding(curwin->w_cursor.lnum, NULL, NULL) +#endif + ) // move forward within line curwin->w_curswant += width2; else
--- a/src/testdir/test_fold.vim +++ b/src/testdir/test_fold.vim @@ -890,28 +890,33 @@ func Test_fold_relative_move() new set fdm=indent sw=2 wrap tw=80 - let content = [ ' foo', ' bar', ' baz', - \ repeat('x', &columns + 1), - \ ' foo', ' bar', ' baz' + let longtext = repeat('x', &columns + 1) + let content = [ ' foo', ' ' .. longtext, ' baz', + \ longtext, + \ ' foo', ' ' .. longtext, ' baz' \ ] call append(0, content) normal zM - call cursor(3, 1) - call assert_true(foldclosed(line('.'))) - normal gj - call assert_equal(2, winline()) + for lnum in range(1, 3) + call cursor(lnum, 1) + call assert_true(foldclosed(line('.'))) + normal gj + call assert_equal(2, winline()) + endfor call cursor(2, 1) call assert_true(foldclosed(line('.'))) normal 2gj call assert_equal(3, winline()) - call cursor(5, 1) - call assert_true(foldclosed(line('.'))) - normal gk - call assert_equal(3, winline()) + for lnum in range(5, 7) + call cursor(lnum, 1) + call assert_true(foldclosed(line('.'))) + normal gk + call assert_equal(3, winline()) + endfor call cursor(6, 1) call assert_true(foldclosed(line('.')))