Mercurial > vim
changeset 1528:e212d1a40ca9 v7.1.243
updated for version 7.1-243
author | vimboss |
---|---|
date | Wed, 06 Feb 2008 13:44:43 +0000 |
parents | 03ec0f2b9a40 |
children | 4353593fc2c0 |
files | src/ops.c src/testdir/test39.in src/testdir/test39.ok src/version.c |
diffstat | 4 files changed, 41 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ops.c +++ b/src/ops.c @@ -2197,7 +2197,7 @@ op_tilde(oap) #ifdef FEAT_VISUAL struct block_def bd; #endif - int did_change; + int did_change = FALSE; if (u_save((linenr_T)(oap->start.lnum - 1), (linenr_T)(oap->end.lnum + 1)) == FAIL) @@ -2242,7 +2242,18 @@ op_tilde(oap) else if (!oap->inclusive) dec(&(oap->end)); - did_change = swapchars(oap->op_type, &pos, oap->end.col - pos.col + 1); + if (pos.lnum == oap->end.lnum) + did_change = swapchars(oap->op_type, &pos, + oap->end.col - pos.col + 1); + else + for (;;) + { + did_change |= swapchars(oap->op_type, &pos, + pos.lnum == oap->end.lnum ? oap->end.col + 1: + (int)STRLEN(ml_get_pos(&pos))); + if (ltoreq(oap->end, pos) || inc(&pos) == -1) + break; + } if (did_change) { changed_lines(oap->start.lnum, oap->start.col, oap->end.lnum + 1, @@ -2314,17 +2325,11 @@ swapchars(op_type, pos, length) for (todo = length; todo > 0; --todo) { # ifdef FEAT_MBYTE - int pos_col = pos->col; - if (has_mbyte) /* we're counting bytes, not characters */ todo -= (*mb_ptr2len)(ml_get_pos(pos)) - 1; # endif did_change |= swapchar(op_type, pos); -# ifdef FEAT_MBYTE - /* Changing German sharp s to SS increases the column. */ - todo += pos->col - pos_col; -# endif if (inc(pos) == -1) /* at end of file */ break; }
--- a/src/testdir/test39.in +++ b/src/testdir/test39.in @@ -1,8 +1,10 @@ Test Visual block mode commands +And test "U" in Visual mode, also on German sharp S. STARTTEST :so small.vim +:so mbyte.vim /^abcde :" Test shift-right of a block jlllljj>wlljlll> @@ -14,7 +16,22 @@ GklkkkIxyz Gllllkkklllrq :" Test block-change G$khhhhhkkcmno -:$-4,$wq! test.out +:$-4,$w! test.out +:" gUe must uppercase a whole word, also when ß changes to SS +Gothe youtußeuu endYpk0wgUe +:" gUfx must uppercase until x, inclusive. +O- youßtußexu -0fogUfx +:" VU must uppercase a whole line +YpkVU +:" same, when it's the last line in the buffer +YPGi111VUddP +:" Uppercase two lines +Oblah di +doh dutVkUj +:" Uppercase part of two lines +ddppi333k0i222fyllvjfuUk +:/^the/,$w >> test.out +:qa! ENDTEST abcdefghijklm