vim-patch:8.1.1758: count of g$ not used correctly when text is not wrapped

Problem:    Count of g$ not used correctly when text is not wrapped.
Solution:   Do use the count. (Christian Brabandt, closes vim/vim#4729, closes vim/vim#4566)
d5c8234517
This commit is contained in:
Jan Edmund Lazo 2019-09-24 20:11:30 -04:00
parent 24c4d4e125
commit 8d0bc3c189
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15
2 changed files with 60 additions and 1 deletions

View File

@ -6795,10 +6795,14 @@ static void nv_g_cmd(cmdarg_T *cap)
} else if (nv_screengo(oap, FORWARD, cap->count1 - 1) == false) } else if (nv_screengo(oap, FORWARD, cap->count1 - 1) == false)
clearopbeep(oap); clearopbeep(oap);
} else { } else {
if (cap->count1 > 1) {
// if it fails, let the cursor still move to the last char
cursor_down(cap->count1 - 1, false);
}
i = curwin->w_leftcol + curwin->w_width_inner - col_off - 1; i = curwin->w_leftcol + curwin->w_width_inner - col_off - 1;
coladvance((colnr_T)i); coladvance((colnr_T)i);
/* Make sure we stick in this column. */ // Make sure we stick in this column.
validate_virtcol(); validate_virtcol();
curwin->w_curswant = curwin->w_virtcol; curwin->w_curswant = curwin->w_virtcol;
curwin->w_set_curswant = false; curwin->w_set_curswant = false;

View File

@ -2618,6 +2618,61 @@ Piece of Java
close! close!
endfunc endfunc
fun! Test_normal_gdollar_cmd()
if !has("jumplist")
return
endif
" Tests for g cmds
call Setup_NewWindow()
" Make long lines that will wrap
%s/$/\=repeat(' foobar', 10)/
20vsp
set wrap
" Test for g$ with count
norm! gg
norm! 0vg$y
call assert_equal(20, col("'>"))
call assert_equal('1 foobar foobar foob', getreg(0))
norm! gg
norm! 0v4g$y
call assert_equal(72, col("'>"))
call assert_equal('1 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.."\n", getreg(0))
norm! gg
norm! 0v6g$y
call assert_equal(40, col("'>"))
call assert_equal('1 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.. "\n"..
\ '2 foobar foobar foobar foobar foobar foo', getreg(0))
set nowrap
" clean up
norm! gg
norm! 0vg$y
call assert_equal(20, col("'>"))
call assert_equal('1 foobar foobar foob', getreg(0))
norm! gg
norm! 0v4g$y
call assert_equal(20, col("'>"))
call assert_equal('1 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.. "\n"..
\ '2 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.. "\n"..
\ '3 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.. "\n"..
\ '4 foobar foobar foob', getreg(0))
norm! gg
norm! 0v6g$y
call assert_equal(20, col("'>"))
call assert_equal('1 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.. "\n"..
\ '2 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.. "\n"..
\ '3 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.. "\n"..
\ '4 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.. "\n"..
\ '5 foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar'.. "\n"..
\ '6 foobar foobar foob', getreg(0))
" Move to last line, also down movement is not possible, should still move
" the cursor to the last visible char
norm! G
norm! 0v6g$y
call assert_equal(20, col("'>"))
call assert_equal('100 foobar foobar fo', getreg(0))
bw!
endfunc
func Test_normal_gk() func Test_normal_gk()
" needs 80 column new window " needs 80 column new window
new new