mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #7420 'vim-patch:8.0.0962, 8.0.1019'
This commit is contained in:
commit
d7594f9c33
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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
|
||||
|
43
src/nvim/testdir/test_virtualedit.vim
Normal file
43
src/nvim/testdir/test_virtualedit.vim
Normal 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
|
Loading…
Reference in New Issue
Block a user