0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

updated for version 7.4.616

Problem:    Cannot insert a tab in front of a block.
Solution:   Correctly compute aop->start. (Christian Brabandt)
This commit is contained in:
Bram Moolenaar
2015-02-03 18:36:44 +01:00
parent e71eea801e
commit f2c03d7301
4 changed files with 29 additions and 6 deletions

View File

@@ -2544,6 +2544,7 @@ op_insert(oap, count1)
char_u *firstline, *ins_text; char_u *firstline, *ins_text;
struct block_def bd; struct block_def bd;
int i; int i;
pos_T t1;
/* edit() changes this - record it for OP_APPEND */ /* edit() changes this - record it for OP_APPEND */
bd.is_MAX = (curwin->w_curswant == MAXCOL); bd.is_MAX = (curwin->w_curswant == MAXCOL);
@@ -2617,8 +2618,16 @@ op_insert(oap, count1)
} }
} }
t1 = oap->start;
edit(NUL, FALSE, (linenr_T)count1); edit(NUL, FALSE, (linenr_T)count1);
/* When a tab was inserted, and the characters in front of the tab
* have been converted to a tab as well, the column of the cursor
* might have actually been reduced, so need to adjust here. */
if (t1.lnum == curbuf->b_op_start_orig.lnum
&& lt(curbuf->b_op_start_orig, t1))
oap->start = curbuf->b_op_start_orig;
/* If user has moved off this line, we don't know what to do, so do /* If user has moved off this line, we don't know what to do, so do
* nothing. * nothing.
* Also don't repeat the insert when Insert mode ended with CTRL-C. */ * Also don't repeat the insert when Insert mode ended with CTRL-C. */
@@ -2644,10 +2653,11 @@ op_insert(oap, count1)
#endif #endif
) )
{ {
int t = getviscol2(curbuf->b_op_start_orig.col,
curbuf->b_op_start_orig.coladd);
oap->start.col = curbuf->b_op_start_orig.col; oap->start.col = curbuf->b_op_start_orig.col;
pre_textlen -= getviscol2(oap->start.col, oap->start.coladd) pre_textlen -= t - oap->start_vcol;
- oap->start_vcol; oap->start_vcol = t;
oap->start_vcol = getviscol2(oap->start.col, oap->start.coladd);
} }
else if (oap->op_type == OP_APPEND else if (oap->op_type == OP_APPEND
&& oap->end.col && oap->end.col
@@ -2660,12 +2670,13 @@ op_insert(oap, count1)
#endif #endif
) )
{ {
int t = getviscol2(curbuf->b_op_start_orig.col,
curbuf->b_op_start_orig.coladd);
oap->start.col = curbuf->b_op_start_orig.col; oap->start.col = curbuf->b_op_start_orig.col;
/* reset pre_textlen to the value of OP_INSERT */ /* reset pre_textlen to the value of OP_INSERT */
pre_textlen += bd.textlen; pre_textlen += bd.textlen;
pre_textlen -= getviscol2(oap->start.col, oap->start.coladd) pre_textlen -= t - oap->start_vcol;
- oap->start_vcol; oap->start_vcol = t;
oap->start_vcol = getviscol2(oap->start.col, oap->start.coladd);
oap->op_type = OP_INSERT; oap->op_type = OP_INSERT;
} }
} }

View File

@@ -2,6 +2,10 @@
Test Visual block mode commands Test Visual block mode commands
And test "U" in Visual mode, also on German sharp S. And test "U" in Visual mode, also on German sharp S.
#define BO_ALL 0x0001
#define BO_BS 0x0002
#define BO_CRSR 0x0004
STARTTEST STARTTEST
:so small.vim :so small.vim
:so mbyte.vim :so mbyte.vim
@@ -70,6 +74,12 @@ G3o987652k02l2jr
:set ve=block :set ve=block
:exe ":norm! 2k\<C-V>$gj\<Esc>" :exe ":norm! 2k\<C-V>$gj\<Esc>"
:let cpos=getpos("'>") :let cpos=getpos("'>")
:$put ='col:'.cpos[2].' off:'.cpos[3]
:"
:" block_insert when replacing spaces in front of the block with tabs
:set ts=8 sts=4 sw=4
:4,7y
Gp
:exe ":norm! f0\<C-V>2jI\<tab>\<esc>" :exe ":norm! f0\<C-V>2jI\<tab>\<esc>"
:/^the/,$w >> test.out :/^the/,$w >> test.out
:qa! :qa!

Binary file not shown.

View File

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