vim-patch:9.0.1324: "gj" and "gk" do not move correctly over a closed fold (#22320)

Problem:    "gj" and "gk" do not move correctly over a closed fold.
Solution:   Use the same code as used for "j"/"k" to go to the next/previous
            line. (Luuk van Baal, closes vim/vim#12007)

441a7a9448
This commit is contained in:
luukvbaal 2023-02-19 01:33:02 +01:00 committed by GitHub
parent 2f64137974
commit cbd4480f97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 16 deletions

View File

@ -2479,19 +2479,10 @@ static bool nv_screengo(oparg_T *oap, int dir, long dist)
curwin->w_curswant -= width2;
} else {
// to previous line
// Move to the start of a closed fold. Don't do that when
// 'foldopen' contains "all": it will open in a moment.
if (!(fdo_flags & FDO_ALL)) {
(void)hasFolding(curwin->w_cursor.lnum,
&curwin->w_cursor.lnum, NULL);
}
if (curwin->w_cursor.lnum == 1) {
if (!cursor_up_inner(curwin, 1)) {
retval = false;
break;
}
curwin->w_cursor.lnum--;
linelen = linetabsize(get_cursor_line_ptr());
if (linelen > width1) {
int w = (((linelen - width1 - 1) / width2) + 1) * width2;
@ -2511,15 +2502,10 @@ static bool nv_screengo(oparg_T *oap, int dir, long dist)
curwin->w_curswant += width2;
} else {
// to next line
// Move to the end of a closed fold.
(void)hasFolding(curwin->w_cursor.lnum, NULL,
&curwin->w_cursor.lnum);
if (curwin->w_cursor.lnum == curbuf->b_ml.ml_line_count) {
if (!cursor_down_inner(curwin, 1)) {
retval = false;
break;
}
curwin->w_cursor.lnum++;
curwin->w_curswant %= width2;
// Check if the cursor has moved below the number display
// when width1 < width2 (with cpoptions+=n). Subtract width2

View File

@ -1548,4 +1548,11 @@ func Test_expand_fold_at_bottom_of_buffer()
bwipe!
endfunc
func Test_fold_screenrow_motion()
call setline(1, repeat(['aaaa'], 5))
1,4fold
norm Ggkzo
call assert_equal(1, line('.'))
endfunc
" vim: shiftwidth=2 sts=2 expandtab