vim-patch:7.4.1491 #5048

Problem:    Visual-block shift breaks multi-byte characters.
Solution:   Compute column differently. (Yasuhiro Matsumoto) Add a test.

20b4f463f4
This commit is contained in:
Patrick
2016-07-12 11:27:56 +10:00
committed by Justin M. Keyes
parent 7563972fd9
commit 8c1fb99d2d
4 changed files with 30 additions and 5 deletions

View File

@@ -339,10 +339,16 @@ static void shift_block(oparg_T *oap, int amount)
total += bd.pre_whitesp; /* all virtual WS up to & incl a split TAB */ total += bd.pre_whitesp; /* all virtual WS up to & incl a split TAB */
ws_vcol = bd.start_vcol - bd.pre_whitesp; ws_vcol = bd.start_vcol - bd.pre_whitesp;
if (bd.startspaces) { if (bd.startspaces) {
if (has_mbyte) if (has_mbyte) {
bd.textstart += (*mb_ptr2len)(bd.textstart); if ((*mb_ptr2len)(bd.textstart) == 1) {
else bd.textstart++;
++bd.textstart; } else {
ws_vcol = 0;
bd.startspaces = 0;
}
} else {
bd.textstart++;
}
} }
for (; ascii_iswhite(*bd.textstart); ) { for (; ascii_iswhite(*bd.textstart); ) {
// TODO: is passing bd.textstart for start of the line OK? // TODO: is passing bd.textstart for start of the line OK?

View File

@@ -39,6 +39,7 @@ NEW_TESTS = \
test_syntax.res \ test_syntax.res \
test_timers.res \ test_timers.res \
test_viml.res \ test_viml.res \
test_visual.res \
test_alot.res test_alot.res
SCRIPTS_GUI := test16.out SCRIPTS_GUI := test16.out

View File

@@ -0,0 +1,18 @@
" Tests for Visual mode
if !has('multi_byte')
finish
endif
scriptencoding utf-8
if !has('visual')
finish
endif
func Test_block_shift_multibyte()
split
call setline(1, ['xヹxxx', 'ヹxxx'])
exe "normal 1G0l\<C-V>jl>"
call assert_equal('x ヹxxx', getline(1))
call assert_equal(' ヹxxx', getline(2))
q!
endfunc

View File

@@ -208,7 +208,7 @@ static int included_patches[] = {
// 1494, // 1494,
// 1493 NA // 1493 NA
1492, 1492,
// 1491, 1491,
// 1490 NA // 1490 NA
// 1489 NA // 1489 NA
// 1488 NA // 1488 NA