diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-04-10 13:15:47 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-04-10 13:15:47 +0200 |
commit | 8c87a2b1fec85e4aac33f71586ac1514536fc66b (patch) | |
tree | 87a7f334865bad68bc1488ac415c19105e7ad979 /src | |
parent | e80757c1545286240d687e9a303cf8eeb3f9a6de (diff) |
patch 8.0.1682: auto indenting breaks inserting a blockv8.0.1682
Problem: Auto indenting breaks inserting a block.
Solution: Do not check for cursor movement if indent was changed. (Christian
Brabandt, closes #2778)
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile | 1 | ||||
-rw-r--r-- | src/ops.c | 10 | ||||
-rw-r--r-- | src/testdir/Make_all.mak | 1 | ||||
-rw-r--r-- | src/testdir/test_blockedit.vim | 20 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 31 insertions, 3 deletions
diff --git a/src/Makefile b/src/Makefile index a294ec0252..e7d0b38f08 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 \ @@ -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 159bf1ece6..b0bfe2615a 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 0000000000..4a8d59952e --- /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! \<c-v>2jI\\ \<esc>" + 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 d162de5e88..7cd61f35f2 100644 --- a/src/version.c +++ b/src/version.c @@ -763,6 +763,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1682, +/**/ 1681, /**/ 1680, |