Merge #7420 'vim-patch:8.0.0962, 8.0.1019'

This commit is contained in:
Justin M. Keyes 2017-10-21 04:17:23 +02:00 committed by GitHub
commit d7594f9c33
4 changed files with 74 additions and 12 deletions

View File

@ -375,17 +375,30 @@ void check_cursor_col_win(win_T *win)
win->w_cursor.col = 0;
}
/* If virtual editing is on, we can leave the cursor on the old position,
* only we must set it to virtual. But don't do it when at the end of the
* line. */
if (oldcol == MAXCOL)
// If virtual editing is on, we can leave the cursor on the old position,
// only we must set it to virtual. But don't do it when at the end of the
// line.
if (oldcol == MAXCOL) {
win->w_cursor.coladd = 0;
else if (ve_flags == VE_ALL) {
if (oldcoladd > win->w_cursor.col)
} else if (ve_flags == VE_ALL) {
if (oldcoladd > win->w_cursor.col) {
win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
else
/* avoid weird number when there is a miscalculation or overflow */
// 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;
getvcol(win, &win->w_cursor, &cs, NULL, &ce);
if (win->w_cursor.coladd > ce - cs) {
win->w_cursor.coladd = ce - cs;
}
}
} else {
// avoid weird number when there is a miscalculation or overflow
win->w_cursor.coladd = 0;
}
}
}

View File

@ -1548,8 +1548,10 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank)
}
oap->start = VIsual;
if (VIsual_mode == 'V')
if (VIsual_mode == 'V') {
oap->start.col = 0;
oap->start.coladd = 0;
}
}
/*
@ -6260,15 +6262,18 @@ static void nv_gomark(cmdarg_T *cap)
} else
nv_cursormark(cap, cap->arg, pos);
/* May need to clear the coladd that a mark includes. */
if (!virtual_active())
// May need to clear the coladd that a mark includes.
if (!virtual_active()) {
curwin->w_cursor.coladd = 0;
}
check_cursor_col();
if (cap->oap->op_type == OP_NOP
&& pos != NULL
&& (pos == (pos_T *)-1 || !equalpos(old_cursor, *pos))
&& (fdo_flags & FDO_MARK)
&& old_KeyTyped)
&& old_KeyTyped) {
foldOpenCursor();
}
}
/*

View File

@ -34,4 +34,5 @@ source test_taglist.vim
source test_true_false.vim
source test_unlet.vim
source test_utf8.vim
source test_virtualedit.vim
source test_window_cmd.vim

View File

@ -0,0 +1,43 @@
" Tests for 'virtualedit'.
func Test_yank_move_change()
new
call setline(1, [
\ "func foo() error {",
\ "\tif n, err := bar();",
\ "\terr != nil {",
\ "\t\treturn err",
\ "\t}",
\ "\tn = n * n",
\ ])
set virtualedit=all
set ts=4
function! MoveSelectionDown(count) abort
normal! m`
silent! exe "'<,'>move'>+".a:count
norm! ``
endfunction
xmap ]e :<C-U>call MoveSelectionDown(v:count1)<CR>
2
normal 2gg
normal J
normal jVj
normal ]e
normal ce
bwipe!
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