From ceb54c55ad779b08caf7fbb55fb3460d90352a52 Mon Sep 17 00:00:00 2001 From: Florian Walch Date: Sat, 3 Jan 2015 16:01:17 +0100 Subject: [PATCH] vim-patch:7.4.559 Problem: Appending a block in the middle of a tab does not work correctly when virtualedit is set. Solution: Decrement spaces and count, don't reset them. (James McCoy) https://code.google.com/p/vim/source/detail?r=v7-4-559 --- src/nvim/ops.c | 12 ++++++------ src/nvim/testdir/test39.in | 9 ++++++--- src/nvim/testdir/test39.ok | Bin 514 -> 584 bytes src/nvim/version.c | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 9b33b6732c..3cefc9f623 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -515,17 +515,17 @@ static void block_insert(oparg_T *oap, char_u *s, int b_insert, struct block_def } if (has_mbyte && spaces > 0) { + int off; + // Avoid starting halfway a multi-byte character. if (b_insert) { - int off = (*mb_head_off)(oldp, oldp + offset + spaces); - spaces -= off; - count -= off; + off = (*mb_head_off)(oldp, oldp + offset + spaces); } else { - int off = (*mb_off_next)(oldp, oldp + offset); + off = (*mb_off_next)(oldp, oldp + offset); offset += off; - spaces = 0; - count = 0; } + spaces -= off; + count -= off; } newp = (char_u *) xmalloc((size_t)(STRLEN(oldp) + s_len + count + 1)); diff --git a/src/nvim/testdir/test39.in b/src/nvim/testdir/test39.in index 7d1c672522..18da1b245a 100644 --- a/src/nvim/testdir/test39.in +++ b/src/nvim/testdir/test39.in @@ -38,11 +38,14 @@ G$khhhhhkkcmno /^C23$/ :exe ":norm! l\j$hhAab\" :.,/^$/w >> test.out -:" Test for Visual block insert when virtualedit=all -:set ve=all +:" Test for Visual block insert when virtualedit=all and utf-8 encoding +:set ve=all enc=utf-8 :/\t\tline :exe ":norm! 07l\jjIx\" -:set ve= +:.,/^$/w >> test.out +:" Test for Visual block append when virtualedit=all +:exe ":norm! 012l\jjAx\" +:set ve= enc=latin1 :.,/^$/w >> test.out :" gUe must uppercase a whole word, also when ß changes to SS Gothe youtußeuu endYpk0wgUe diff --git a/src/nvim/testdir/test39.ok b/src/nvim/testdir/test39.ok index d8e901563af492e50b8f70c470fee5678644dc0c..5c517e2223d5c830ca8297b7c8ec71d180777d82 100644 GIT binary patch delta 75 lcmZo-Il;1lkI`NM0xG~1h|I~%OEu)eDr|%)Jei&GHvnM#5FP*k delta 11 ScmX@X(!{cXk8yGc;}-xH