mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 9.1.0938: exclusive selection not respected when re-selecting block mode
Problem: exclusive selection not respected when re-selecting block mode (Matt Ellis) Solution: advance selection by another character when using selection=exclusive and visual block mode fixes: #16202 closes: #16219 Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
@@ -5518,6 +5518,8 @@ nv_visual(cmdarg_T *cap)
|
|||||||
update_curswant_force();
|
update_curswant_force();
|
||||||
curwin->w_curswant += resel_VIsual_vcol * cap->count0 - 1;
|
curwin->w_curswant += resel_VIsual_vcol * cap->count0 - 1;
|
||||||
curwin->w_cursor.lnum = lnum;
|
curwin->w_cursor.lnum = lnum;
|
||||||
|
if (*p_sel == 'e')
|
||||||
|
++curwin->w_curswant;
|
||||||
coladvance(curwin->w_curswant);
|
coladvance(curwin->w_curswant);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -2714,4 +2714,50 @@ func Test_visual_block_cursor_insert_enter()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_visual_block_exclusive_selection()
|
||||||
|
new
|
||||||
|
set selection=exclusive
|
||||||
|
call setline(1, ['asöd asdf', 'asdf asdf', 'as€d asdf', 'asdf asdf'])
|
||||||
|
call cursor(1, 1)
|
||||||
|
exe ":norm! \<c-v>eh3j~"
|
||||||
|
call assert_equal(['ASÖd asdf', 'ASDf asdf', 'AS€d asdf', 'ASDf asdf'], getline(1, '$'))
|
||||||
|
exe ":norm! 1v~"
|
||||||
|
call assert_equal(['asöd asdf', 'asdf asdf', 'as€d asdf', 'asdf asdf'], getline(1, '$'))
|
||||||
|
bwipe!
|
||||||
|
set selection&vim
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_visual_block_exclusive_selection_adjusted()
|
||||||
|
new
|
||||||
|
" Test that the end-position of the visual selection is adjusted for exclusive selection
|
||||||
|
set selection=exclusive
|
||||||
|
call setline(1, ['asöd asdf ', 'asdf asdf ', 'as€d asdf ', 'asdf asdf '])
|
||||||
|
call cursor(1, 1)
|
||||||
|
" inclusive motion
|
||||||
|
exe ":norm! \<c-v>e3jy"
|
||||||
|
call assert_equal([0, 4, 5, 0], getpos("'>"))
|
||||||
|
" exclusive motion
|
||||||
|
exe ":norm! \<c-v>ta3jy"
|
||||||
|
call assert_equal([0, 4, 6, 0], getpos("'>"))
|
||||||
|
" another inclusive motion
|
||||||
|
exe ":norm! \<c-v>g_3jy"
|
||||||
|
call assert_equal([0, 4, 10, 0], getpos("'>"))
|
||||||
|
|
||||||
|
" Reset selection option to Vim default
|
||||||
|
set selection&vim
|
||||||
|
call cursor(1, 1)
|
||||||
|
|
||||||
|
" inclusive motion
|
||||||
|
exe ":norm! \<c-v>e3jy"
|
||||||
|
call assert_equal([0, 4, 4, 0], getpos("'>"))
|
||||||
|
" exclusive motion
|
||||||
|
exe ":norm! \<c-v>ta3jy"
|
||||||
|
call assert_equal([0, 4, 5, 0], getpos("'>"))
|
||||||
|
" another inclusive motion
|
||||||
|
exe ":norm! \<c-v>g_3jy"
|
||||||
|
call assert_equal([0, 4, 9, 0], getpos("'>"))
|
||||||
|
bwipe!
|
||||||
|
set selection&vim
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
938,
|
||||||
/**/
|
/**/
|
||||||
937,
|
937,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user