Mercurial > vim
changeset 6961:c2b132add309 v7.4.798
patch 7.4.798
Problem: Repeating a change in Visual mode does not work as expected.
(Urtica Dioica)
Solution: Make redo in Visual mode work better. (Christian Brabandt)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Tue, 28 Jul 2015 11:21:32 +0200 |
parents | b5cdc4f295ac |
children | c622e7e60aa9 |
files | src/normal.c src/testdir/test_listlbr.in src/testdir/test_listlbr.ok src/version.c |
diffstat | 4 files changed, 30 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/normal.c +++ b/src/normal.c @@ -9598,18 +9598,23 @@ get_op_vcol(oap, redo_VIsual_vcol, initi #endif getvvcol(curwin, &(oap->start), &oap->start_vcol, NULL, &oap->end_vcol); - getvvcol(curwin, &(oap->end), &start, NULL, &end); - - if (start < oap->start_vcol) - oap->start_vcol = start; - if (end > oap->end_vcol) - { - if (initial && *p_sel == 'e' && start >= 1 - && start - 1 >= oap->end_vcol) - oap->end_vcol = start - 1; - else - oap->end_vcol = end; - } + + if (!redo_VIsual_busy) + { + getvvcol(curwin, &(oap->end), &start, NULL, &end); + + if (start < oap->start_vcol) + oap->start_vcol = start; + if (end > oap->end_vcol) + { + if (initial && *p_sel == 'e' && start >= 1 + && start - 1 >= oap->end_vcol) + oap->end_vcol = start - 1; + else + oap->end_vcol = end; + } + } + /* if '$' was used, get oap->end_vcol from longest line */ if (curwin->w_curswant == MAXCOL) {
--- a/src/testdir/test_listlbr.in +++ b/src/testdir/test_listlbr.in @@ -74,6 +74,12 @@ Golong line: 40afoobar aTARGET at end :let g:test ="Test 8: set linebreak with visual char mode and changing block" :$put =g:test Go1111-1111-1111-11-1111-1111-11110f-lv3lc2222bgj. +:let g:test ="Test 9: using redo after block visual mode" +:$put =g:test +Go +aaa +aaa +a2k2j~e. :%w! test.out :qa! ENDTEST
--- a/src/testdir/test_listlbr.ok +++ b/src/testdir/test_listlbr.ok @@ -41,3 +41,8 @@ Test 7: set linebreak with visual block long line: foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar TARGETx at end Test 8: set linebreak with visual char mode and changing block 1111-2222-1111-11-1111-2222-1111 +Test 9: using redo after block visual mode + +AaA +AaA +A