diff --git a/src/Makefile b/src/Makefile index a294ec025..e7d0b38f0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2127,6 +2127,7 @@ test_arglist \ test_autocmd \ test_autoload \ test_backspace_opt \ + test_blockedit \ test_breakindent \ test_bufline \ test_bufwintabinfo \ diff --git a/src/ops.c b/src/ops.c index b1c1d3693..fe29e8ae7 100644 --- a/src/ops.c +++ b/src/ops.c @@ -1093,7 +1093,7 @@ do_record(int c) if (Recording == FALSE) /* start recording */ { - /* registers 0-9, a-z and " are allowed */ + /* registers 0-9, a-z and " are allowed */ if (c < 0 || (!ASCII_ISALNUM(c) && c != '"')) retval = FAIL; else @@ -2702,6 +2702,7 @@ op_insert(oparg_T *oap, long count1) if (oap->block_mode) { struct block_def bd2; + int did_indent = FALSE; /* If indent kicked in, the firstline might have changed * but only do that, if the indent actually increased. */ @@ -2710,11 +2711,14 @@ op_insert(oparg_T *oap, long count1) { bd.textcol += ind_post - ind_pre; bd.start_vcol += ind_post - ind_pre; + did_indent = TRUE; } /* The user may have moved the cursor before inserting something, try - * to adjust the block for that. */ - if (oap->start.lnum == curbuf->b_op_start_orig.lnum && !bd.is_MAX) + * to adjust the block for that. But only do it, if the difference + * does not come from indent kicking in. */ + if (oap->start.lnum == curbuf->b_op_start_orig.lnum + && !bd.is_MAX && !did_indent) { if (oap->op_type == OP_INSERT && oap->start.col diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 159bf1ece..b0bfe2615 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -72,6 +72,7 @@ NEW_TESTS = test_arabic.res \ test_autocmd.res \ test_autoload.res \ test_backspace_opt.res \ + test_blockedit.res \ test_breakindent.res \ test_bufwintabinfo.res \ test_cdo.res \ diff --git a/src/testdir/test_blockedit.vim b/src/testdir/test_blockedit.vim new file mode 100644 index 000000000..4a8d59952 --- /dev/null +++ b/src/testdir/test_blockedit.vim @@ -0,0 +1,20 @@ +" Test for block inserting +" +" TODO: rewrite test39.in into this new style test + +func Test_blockinsert_indent() + new + filetype plugin indent on + setlocal sw=2 et ft=vim + call setline(1, ['let a=[', ' ''eins'',', ' ''zwei'',', ' ''drei'']']) + call cursor(2, 3) + exe "norm! \2jI\\ \" + call assert_equal(['let a=[', ' \ ''eins'',', ' \ ''zwei'',', ' \ ''drei'']'], + \ getline(1,'$')) + " reset to sane state + filetype off + bwipe! +endfunc + + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index d162de5e8..7cd61f35f 100644 --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1682, /**/ 1681, /**/