mirror of
https://github.com/neovim/neovim.git
synced 2025-09-25 12:38:33 +00:00
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:

committed by
Justin M. Keyes

parent
a5d00527a1
commit
e89df8a54d
@@ -2104,6 +2104,7 @@ void op_insert(oparg_T *oap, long count1)
|
|||||||
|
|
||||||
if (oap->motion_type == kMTBlockWise) {
|
if (oap->motion_type == kMTBlockWise) {
|
||||||
struct block_def bd2;
|
struct block_def bd2;
|
||||||
|
bool did_indent = false;
|
||||||
|
|
||||||
// if indent kicked in, the firstline might have changed
|
// if indent kicked in, the firstline might have changed
|
||||||
// but only do that, if the indent actually increased
|
// 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) {
|
if (curbuf->b_op_start.col > ind_pre && ind_post > ind_pre) {
|
||||||
bd.textcol += ind_post - ind_pre;
|
bd.textcol += ind_post - ind_pre;
|
||||||
bd.start_vcol += 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
|
// The user may have moved the cursor before inserting something, try
|
||||||
* to adjust the block for that. */
|
// to adjust the block for that. But only do it, if the difference
|
||||||
if (oap->start.lnum == curbuf->b_op_start_orig.lnum && !bd.is_MAX) {
|
// 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
|
if (oap->op_type == OP_INSERT
|
||||||
&& oap->start.col + oap->start.coladd
|
&& oap->start.col + oap->start.coladd
|
||||||
!= curbuf->b_op_start_orig.col + curbuf->b_op_start_orig.coladd) {
|
!= curbuf->b_op_start_orig.col + curbuf->b_op_start_orig.coladd) {
|
||||||
|
@@ -36,6 +36,7 @@ SCRIPTS ?= $(SCRIPTS_DEFAULT)
|
|||||||
NEW_TESTS ?= \
|
NEW_TESTS ?= \
|
||||||
test_arabic.res \
|
test_arabic.res \
|
||||||
test_autocmd.res \
|
test_autocmd.res \
|
||||||
|
test_blockedit.res \
|
||||||
test_bufwintabinfo.res \
|
test_bufwintabinfo.res \
|
||||||
test_changedtick.res \
|
test_changedtick.res \
|
||||||
test_charsearch.res \
|
test_charsearch.res \
|
||||||
|
20
src/nvim/testdir/test_blockedit.vim
Normal file
20
src/nvim/testdir/test_blockedit.vim
Normal 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
|
Reference in New Issue
Block a user