]> granicus.if.org Git - vim/commitdiff
patch 8.1.1758: count of g$ not used correctly when text is not wrapped v8.1.1758
authorBram Moolenaar <Bram@vim.org>
Sat, 27 Jul 2019 16:44:57 +0000 (18:44 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 27 Jul 2019 16:44:57 +0000 (18:44 +0200)
Problem:    Count of g$ not used correctly when text is not wrapped.
Solution:   Do use the count. (Christian Brabandt, closes #4729, closes #4566)

src/normal.c
src/testdir/test_normal.vim
src/version.c

index ce1acb555ea7bf03087d8fe6446d4bfb1b3e0b1d..acc5b64ab7146da11beb3e0efe99de73c8e04db0 100644 (file)
@@ -8062,10 +8062,14 @@ nv_g_cmd(cmdarg_T *cap)
            }
            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 - col_off - 1;
                coladvance((colnr_T)i);
 
-               /* Make sure we stick in this column. */
+               // Make sure we stick in this column.
                validate_virtcol();
                curwin->w_curswant = curwin->w_virtcol;
                curwin->w_set_curswant = FALSE;
index a9fe46a22a091251cf7d37144c2b94aef8cb0d44..f48eaa0f36639d40e794e4fafe823e8d9c592445 100644 (file)
@@ -2732,3 +2732,58 @@ Piece of Java
 
   close!
 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
index 5444c772ac29de47126f2d89071f8a88f01066de..209f3c966db75d2c3f858f26fe08b9e49765da9d 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1758,
 /**/
     1757,
 /**/