mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 9.0.0482: "g0" moves to wrong location with virtual text "above"
Problem: "g0" moves to wrong location with virtual text "above". Solution: Compensate for the extra columns. (closes #11141) Also fix "g$"
This commit is contained in:
48
src/normal.c
48
src/normal.c
@@ -5491,9 +5491,8 @@ nv_visual(cmdarg_T *cap)
|
||||
{
|
||||
if (resel_VIsual_line_count <= 1)
|
||||
{
|
||||
validate_virtcol();
|
||||
curwin->w_curswant = curwin->w_virtcol
|
||||
+ resel_VIsual_vcol * cap->count0 - 1;
|
||||
update_curswant_force();
|
||||
curwin->w_curswant += resel_VIsual_vcol * cap->count0 - 1;
|
||||
}
|
||||
else
|
||||
curwin->w_curswant = resel_VIsual_vcol;
|
||||
@@ -5506,9 +5505,8 @@ nv_visual(cmdarg_T *cap)
|
||||
}
|
||||
else if (VIsual_mode == Ctrl_V)
|
||||
{
|
||||
validate_virtcol();
|
||||
curwin->w_curswant = curwin->w_virtcol
|
||||
+ resel_VIsual_vcol * cap->count0 - 1;
|
||||
update_curswant_force();
|
||||
curwin->w_curswant += + resel_VIsual_vcol * cap->count0 - 1;
|
||||
coladvance(curwin->w_curswant);
|
||||
}
|
||||
else
|
||||
@@ -5735,13 +5733,19 @@ nv_g_home_m_cmd(cmdarg_T *cap)
|
||||
cap->oap->inclusive = FALSE;
|
||||
if (curwin->w_p_wrap && curwin->w_width != 0)
|
||||
{
|
||||
int width1 = curwin->w_width - curwin_col_off();
|
||||
int width2 = width1 + curwin_col_off2();
|
||||
int width1 = curwin->w_width - curwin_col_off();
|
||||
int width2 = width1 + curwin_col_off2();
|
||||
int virtcol;
|
||||
|
||||
validate_virtcol();
|
||||
virtcol = curwin->w_virtcol
|
||||
#ifdef FEAT_PROP_POPUP
|
||||
- curwin->w_virtcol_first_char
|
||||
#endif
|
||||
;
|
||||
i = 0;
|
||||
if (curwin->w_virtcol >= (colnr_T)width1 && width2 > 0)
|
||||
i = (curwin->w_virtcol - width1) / width2 * width2 + width1;
|
||||
if (virtcol >= (colnr_T)width1 && width2 > 0)
|
||||
i = (virtcol - width1) / width2 * width2 + width1;
|
||||
}
|
||||
else
|
||||
i = curwin->w_leftcol;
|
||||
@@ -5815,24 +5819,32 @@ nv_g_dollar_cmd(cmdarg_T *cap)
|
||||
{
|
||||
int width1 = curwin->w_width - col_off;
|
||||
int width2 = width1 + curwin_col_off2();
|
||||
int virtcol;
|
||||
|
||||
validate_virtcol();
|
||||
virtcol = curwin->w_virtcol
|
||||
#ifdef FEAT_PROP_POPUP
|
||||
- curwin->w_virtcol_first_char
|
||||
#endif
|
||||
;
|
||||
i = width1 - 1;
|
||||
if (curwin->w_virtcol >= (colnr_T)width1)
|
||||
i += ((curwin->w_virtcol - width1) / width2 + 1)
|
||||
if (virtcol >= (colnr_T)width1)
|
||||
i += ((virtcol - width1) / width2 + 1)
|
||||
* width2;
|
||||
coladvance((colnr_T)i);
|
||||
|
||||
// Make sure we stick in this column.
|
||||
validate_virtcol();
|
||||
curwin->w_curswant = curwin->w_virtcol;
|
||||
curwin->w_set_curswant = FALSE;
|
||||
update_curswant_force();
|
||||
if (curwin->w_cursor.col > 0 && curwin->w_p_wrap)
|
||||
{
|
||||
// Check for landing on a character that got split at
|
||||
// the end of the line. We do not want to advance to
|
||||
// the next screen line.
|
||||
if (curwin->w_virtcol > (colnr_T)i)
|
||||
if (curwin->w_virtcol
|
||||
#ifdef FEAT_PROP_POPUP
|
||||
- curwin->w_virtcol_first_char
|
||||
#endif
|
||||
> (colnr_T)i)
|
||||
--curwin->w_cursor.col;
|
||||
}
|
||||
}
|
||||
@@ -5860,9 +5872,7 @@ nv_g_dollar_cmd(cmdarg_T *cap)
|
||||
}
|
||||
|
||||
// Make sure we stick in this column.
|
||||
validate_virtcol();
|
||||
curwin->w_curswant = curwin->w_virtcol;
|
||||
curwin->w_set_curswant = FALSE;
|
||||
update_curswant_force();
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user