0
0
mirror of https://github.com/vim/vim.git synced 2025-08-26 20:03:41 -04:00

patch 9.1.1167: mark '] wrong after copying text object

Problem:  mark '] wrong after copying text object (ubaldot)
Solution: Adjust position of '] for non-linewise, exclusive motions
          (Jim Zhou)

related: #16679
closes: #16772

Signed-off-by: Jim Zhou <jimzhouzzy@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Jim Zhou 2025-03-03 19:53:26 +01:00 committed by Christian Brabandt
parent fb792374cf
commit 360a39ae6c
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
3 changed files with 55 additions and 0 deletions

View File

@ -1374,6 +1374,9 @@ op_yank(oparg_T *oap, int deleting, int mess)
curbuf->b_op_start.col = 0;
curbuf->b_op_end.col = MAXCOL;
}
if (yanktype != MLINE && !oap->inclusive)
// Exclude the end position.
decl(&curbuf->b_op_end);
}
#ifdef FEAT_CLIPBOARD

View File

@ -1154,4 +1154,54 @@ func Test_register_cursor_column_negative()
call StopVimInTerminal(buf)
endfunc
" test '] mark generated by op_yank
func Test_mark_from_yank()
new
" double quote object
call setline(1, 'test "yank" mark')
normal! yi"
call assert_equal([0, 1, 10, 0], getpos("']"))
normal! ya"
call assert_equal(getpos("']"), [0, 1, 13, 0], getpos("']"))
" single quote object
call setline(1, 'test ''yank'' mark')
normal! yi'
call assert_equal([0, 1, 10, 0], getpos("']"))
normal! ya'
call assert_equal([0, 1, 13, 0], getpos("']"))
" paren object
call setline(1, 'test (yank) mark')
call cursor(1, 9)
normal! yi(
call assert_equal([0, 1, 10, 0], getpos("']"))
call cursor(1, 9)
normal! ya(
call assert_equal([0, 1, 11, 0], getpos("']"))
" brace object
call setline(1, 'test {yank} mark')
call cursor(1, 9)
normal! yi{
call assert_equal([0, 1, 10, 0], getpos("']"))
call cursor(1, 9)
normal! ya{
call assert_equal([0, 1, 11, 0], getpos("']"))
" bracket object
call setline(1, 'test [yank] mark')
call cursor(1, 9)
normal! yi[
call assert_equal([0, 1, 10, 0], getpos("']"))
call cursor(1, 9)
normal! ya[
call assert_equal([0, 1, 11, 0], getpos("']"))
" block object
call setline(1, 'test <yank> mark')
call cursor(1, 9)
normal! yi<
call assert_equal([0, 1, 10, 0], getpos("']"))
call cursor(1, 9)
normal! ya<
call assert_equal([0, 1, 11, 0], getpos("']"))
bw!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1167,
/**/
1166,
/**/