diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-10-21 02:20:17 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-10-21 02:24:49 +0200 |
commit | b5b8966760773421b285ee8b63015fc767bca18d (patch) | |
tree | 71cfd9f7dfa4c339c6c12fce687f32e82bcbe089 | |
parent | 82b8382abe6c533fbdd01529cfc93a8d1c5231e2 (diff) | |
download | rneovim-b5b8966760773421b285ee8b63015fc767bca18d.tar.gz rneovim-b5b8966760773421b285ee8b63015fc767bca18d.tar.bz2 rneovim-b5b8966760773421b285ee8b63015fc767bca18d.zip |
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)
https://github.com/vim/vim/commit/d41babef89a50cdf165f15bc1834c0a4e89ffff8
-rw-r--r-- | src/nvim/cursor.c | 7 | ||||
-rw-r--r-- | src/nvim/testdir/test_virtualedit.vim | 14 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/nvim/cursor.c b/src/nvim/cursor.c index e575143af0..0e97e2203f 100644 --- a/src/nvim/cursor.c +++ b/src/nvim/cursor.c @@ -383,10 +383,13 @@ void check_cursor_col_win(win_T *win) } else if (ve_flags == VE_ALL) { if (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; - // check that coladd is not more than the char width getvcol(win, &win->w_cursor, &cs, NULL, &ce); if (win->w_cursor.coladd > ce - cs) { win->w_cursor.coladd = ce - cs; diff --git a/src/nvim/testdir/test_virtualedit.vim b/src/nvim/testdir/test_virtualedit.vim index da143c518f..2b8849f488 100644 --- a/src/nvim/testdir/test_virtualedit.vim +++ b/src/nvim/testdir/test_virtualedit.vim @@ -1,7 +1,7 @@ " Tests for 'virtualedit'. func Test_yank_move_change() - split + new call setline(1, [ \ "func foo() error {", \ "\tif n, err := bar();", @@ -29,3 +29,15 @@ func Test_yank_move_change() set virtualedit= set ts=8 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 |