aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-10-21 02:20:17 +0200
committerJustin M. Keyes <justinkz@gmail.com>2017-10-21 02:24:49 +0200
commitb5b8966760773421b285ee8b63015fc767bca18d (patch)
tree71cfd9f7dfa4c339c6c12fce687f32e82bcbe089
parent82b8382abe6c533fbdd01529cfc93a8d1c5231e2 (diff)
downloadrneovim-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.c7
-rw-r--r--src/nvim/testdir/test_virtualedit.vim14
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