vim-patch:8.0.1682: auto indenting breaks inserting a block (#8892)

Problem:    Auto indenting breaks inserting a block.
Solution:   Do not check for cursor movement if indent was changed. (Christian
            Brabandt, closes vim/vim#2778)
8c87a2b1fe
This commit is contained in:
Jan Edmund Lazo
2018-08-23 13:13:05 -04:00
committed by Justin M. Keyes
parent a5d00527a1
commit e89df8a54d
3 changed files with 29 additions and 3 deletions

View File

@@ -2104,6 +2104,7 @@ void op_insert(oparg_T *oap, long count1)
if (oap->motion_type == kMTBlockWise) {
struct block_def bd2;
bool did_indent = false;
// if indent kicked in, the firstline might have changed
// but only do that, if the indent actually increased
@@ -2111,11 +2112,15 @@ void op_insert(oparg_T *oap, long count1)
if (curbuf->b_op_start.col > ind_pre && ind_post > ind_pre) {
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) {
// The user may have moved the cursor before inserting something, try
// 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 + oap->start.coladd
!= curbuf->b_op_start_orig.col + curbuf->b_op_start_orig.coladd) {

View File

@@ -36,6 +36,7 @@ SCRIPTS ?= $(SCRIPTS_DEFAULT)
NEW_TESTS ?= \
test_arabic.res \
test_autocmd.res \
test_blockedit.res \
test_bufwintabinfo.res \
test_changedtick.res \
test_charsearch.res \

View File

@@ -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