mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.2.2385: "gj" and "gk" do not work correctly when inside a fold
Problem: "gj" and "gk" do not work correctly when inside a fold. Solution: Move check for folding. (closes #7724, closes #4095)
This commit is contained in:
31
src/normal.c
31
src/normal.c
@@ -2570,12 +2570,6 @@ nv_screengo(oparg_T *oap, int dir, long dist)
|
||||
else
|
||||
{
|
||||
// to previous line
|
||||
if (curwin->w_cursor.lnum == 1)
|
||||
{
|
||||
retval = FAIL;
|
||||
break;
|
||||
}
|
||||
--curwin->w_cursor.lnum;
|
||||
#ifdef FEAT_FOLDING
|
||||
// Move to the start of a closed fold. Don't do that when
|
||||
// 'foldopen' contains "all": it will open in a moment.
|
||||
@@ -2583,6 +2577,13 @@ nv_screengo(oparg_T *oap, int dir, long dist)
|
||||
(void)hasFolding(curwin->w_cursor.lnum,
|
||||
&curwin->w_cursor.lnum, NULL);
|
||||
#endif
|
||||
if (curwin->w_cursor.lnum == 1)
|
||||
{
|
||||
retval = FAIL;
|
||||
break;
|
||||
}
|
||||
--curwin->w_cursor.lnum;
|
||||
|
||||
linelen = linetabsize(ml_get_curline());
|
||||
if (linelen > width1)
|
||||
curwin->w_curswant += (((linelen - width1 - 1) / width2)
|
||||
@@ -5957,13 +5958,8 @@ nv_g_cmd(cmdarg_T *cap)
|
||||
*/
|
||||
case 'j':
|
||||
case K_DOWN:
|
||||
// with 'nowrap' it works just like the normal "j" command; also when
|
||||
// in a closed fold
|
||||
if (!curwin->w_p_wrap
|
||||
#ifdef FEAT_FOLDING
|
||||
|| hasFolding(curwin->w_cursor.lnum, NULL, NULL)
|
||||
#endif
|
||||
)
|
||||
// with 'nowrap' it works just like the normal "j" command.
|
||||
if (!curwin->w_p_wrap)
|
||||
{
|
||||
oap->motion_type = MLINE;
|
||||
i = cursor_down(cap->count1, oap->op_type == OP_NOP);
|
||||
@@ -5976,13 +5972,8 @@ nv_g_cmd(cmdarg_T *cap)
|
||||
|
||||
case 'k':
|
||||
case K_UP:
|
||||
// with 'nowrap' it works just like the normal "k" command; also when
|
||||
// in a closed fold
|
||||
if (!curwin->w_p_wrap
|
||||
#ifdef FEAT_FOLDING
|
||||
|| hasFolding(curwin->w_cursor.lnum, NULL, NULL)
|
||||
#endif
|
||||
)
|
||||
// with 'nowrap' it works just like the normal "k" command.
|
||||
if (!curwin->w_p_wrap)
|
||||
{
|
||||
oap->motion_type = MLINE;
|
||||
i = cursor_up(cap->count1, oap->op_type == OP_NOP);
|
||||
|
Reference in New Issue
Block a user