vim-patch:8.0.1019

Problem:    Pasting in virtual edit happens in the wrong place.
Solution:   Do not adjust coladd when after the end of the line (closes vim/vim#2015)

d41babef89
This commit is contained in:
Justin M. Keyes
2017-10-21 02:20:17 +02:00
parent 82b8382abe
commit b5b8966760
2 changed files with 18 additions and 3 deletions

View File

@@ -383,10 +383,13 @@ void check_cursor_col_win(win_T *win)
} else if (ve_flags == VE_ALL) { } else if (ve_flags == VE_ALL) {
if (oldcoladd > win->w_cursor.col) { if (oldcoladd > win->w_cursor.col) {
win->w_cursor.coladd = oldcoladd - win->w_cursor.col; win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
if (win->w_cursor.col < len && win->w_cursor.coladd > 0) {
// Make sure that coladd is not more than the char width.
// Not for the last character, coladd is then used when the cursor
// is actually after the last character.
if (win->w_cursor.col + 1 < len && win->w_cursor.coladd > 0) {
int cs, ce; int cs, ce;
// check that coladd is not more than the char width
getvcol(win, &win->w_cursor, &cs, NULL, &ce); getvcol(win, &win->w_cursor, &cs, NULL, &ce);
if (win->w_cursor.coladd > ce - cs) { if (win->w_cursor.coladd > ce - cs) {
win->w_cursor.coladd = ce - cs; win->w_cursor.coladd = ce - cs;

View File

@@ -1,7 +1,7 @@
" Tests for 'virtualedit'. " Tests for 'virtualedit'.
func Test_yank_move_change() func Test_yank_move_change()
split new
call setline(1, [ call setline(1, [
\ "func foo() error {", \ "func foo() error {",
\ "\tif n, err := bar();", \ "\tif n, err := bar();",
@@ -29,3 +29,15 @@ func Test_yank_move_change()
set virtualedit= set virtualedit=
set ts=8 set ts=8
endfunc endfunc
func Test_paste_end_of_line()
new
set virtualedit=all
call setline(1, ['456', '123'])
normal! gg0"ay$
exe "normal! 2G$lllA\<C-O>:normal! \"agP\r"
call assert_equal('123456', getline(2))
bwipe!
set virtualedit=
endfunc