diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/ops.c | 7 | ||||
-rw-r--r-- | src/nvim/testdir/test_blockedit.vim | 27 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c index cbfed5daa5..ceb0049761 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -2311,6 +2311,13 @@ void op_insert(oparg_T *oap, long count1) } } bd.textcol = bd2.textcol; + /* + * If the insert was in the indent then include the indent + * change in the new text, otherwise don't. + */ + if (did_indent && bd.textcol > ind_pre) { + bd.textcol += ind_post - ind_pre; + } bd.textlen = bd2.textlen; } diff --git a/src/nvim/testdir/test_blockedit.vim b/src/nvim/testdir/test_blockedit.vim index 180524cd73..5a72bebaba 100644 --- a/src/nvim/testdir/test_blockedit.vim +++ b/src/nvim/testdir/test_blockedit.vim @@ -15,6 +15,33 @@ func Test_blockinsert_indent() bwipe! endfunc +func Test_blockinsert_autoindent() + new + let lines =<< trim END + var d = { + a: () => 0, + b: () => 0, + c: () => 0, + } + END + call setline(1, lines) + filetype plugin indent on + setlocal sw=2 et ft=vim + setlocal indentkeys+=: + exe "norm! 2Gf)\<c-v>2jA: asdf\<esc>" + let expected =<< trim END + var d = { + a: (): asdf => 0, + b: (): asdf => 0, + c: (): asdf => 0, + } + END + call assert_equal(expected, getline(1, 5)) + + filetype off + bwipe! +endfunc + func Test_blockinsert_delete() new let _bs = &bs |