0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

updated for version 7.3.858

Problem:    "gv" selects the wrong area after some operators.
Solution:   Save and restore the type of selection. (Christian Brabandt)
This commit is contained in:
Bram Moolenaar
2013-03-13 19:02:41 +01:00
parent 4f8301f641
commit a390bb6ad3
4 changed files with 30 additions and 1 deletions

View File

@@ -21,6 +21,7 @@
static int resel_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
static linenr_T resel_VIsual_line_count; /* number of lines */
static colnr_T resel_VIsual_vcol; /* nr of cols or end col */
static int VIsual_mode_orig = NUL; /* type of Visual mode, that user entered */
static int restart_VIsual_select = 0;
#endif
@@ -1594,6 +1595,11 @@ do_pending_operator(cap, old_col, gui_yank)
curbuf->b_visual.vi_start = VIsual;
curbuf->b_visual.vi_end = curwin->w_cursor;
curbuf->b_visual.vi_mode = VIsual_mode;
if (VIsual_mode_orig != NUL)
{
curbuf->b_visual.vi_mode = VIsual_mode_orig;
VIsual_mode_orig = NUL;
}
curbuf->b_visual.vi_curswant = curwin->w_curswant;
# ifdef FEAT_EVAL
curbuf->b_visual_mode_eval = VIsual_mode;
@@ -7230,6 +7236,7 @@ nv_Replace(cap)
{
cap->cmdchar = 'c';
cap->nchar = NUL;
VIsual_mode_orig = VIsual_mode; /* remember original area for gv */
VIsual_mode = 'V';
nv_operator(cap);
}
@@ -7429,7 +7436,10 @@ v_visop(cap)
if (isupper(cap->cmdchar))
{
if (VIsual_mode != Ctrl_V)
{
VIsual_mode_orig = VIsual_mode;
VIsual_mode = 'V';
}
else if (cap->cmdchar == 'C' || cap->cmdchar == 'D')
curwin->w_curswant = MAXCOL;
}
@@ -7449,7 +7459,10 @@ nv_subst(cap)
if (VIsual_active) /* "vs" and "vS" are the same as "vc" */
{
if (cap->cmdchar == 'S')
{
VIsual_mode_orig = VIsual_mode;
VIsual_mode = 'V';
}
cap->cmdchar = 'c';
nv_operator(cap);
}

View File

@@ -3,12 +3,14 @@ Test for visual block shift and tab characters.
STARTTEST
:so small.vim
/^one
fe4jRugvr1:'<,'>w! test.out
/^abcdefgh
4jI j<<11|D
7|a 
7|a 
7|a 4k13|4j<
:$-4,$w! test.out
:$-5,$w >> test.out
:$-4,$s/\s\+//g
4kI j<<
7|a 
@@ -18,6 +20,12 @@ STARTTEST
:qa!
ENDTEST
one two three
one two three
one two three
one two three
one two three
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

View File

@@ -1,3 +1,9 @@
on1 two three
on1 two three
on1 two three
on1 two three
on1 two three
abcdefghijklmnopqrstuvwxyz
abcdefghij
abc defghijklmnopqrstuvwxyz

View File

@@ -728,6 +728,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
858,
/**/
857,
/**/