patch 8.0.0523: dv} deletes part of a multi-byte character. v8.0.0523
authorBram Moolenaar <Bram@vim.org>
Wed, 29 Mar 2017 17:48:11 +0000 (19:48 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 29 Mar 2017 17:48:11 +0000 (19:48 +0200)
Problem:    dv} deletes part of a multi-byte character. (Urtica Dioica)
Solution:   Include the whole character.

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

index 71235aa08b5a0a9e2c369e7670a077abd9ba7351..3145e9a0999e4bb41151be968aa7bfc95ba875f1 100644 (file)
@@ -2851,9 +2851,17 @@ findpar(
     curwin->w_cursor.lnum = curr;
     if (curr == curbuf->b_ml.ml_line_count && what != '}')
     {
-       if ((curwin->w_cursor.col = (colnr_T)STRLEN(ml_get(curr))) != 0)
+       char_u *line = ml_get(curr);
+
+       /* Put the cursor on the last character in the last line and make the
+        * motion inclusive. */
+       if ((curwin->w_cursor.col = (colnr_T)STRLEN(line)) != 0)
        {
            --curwin->w_cursor.col;
+#ifdef FEAT_MBYTE
+           curwin->w_cursor.col -=
+                            (*mb_head_off)(line, line + curwin->w_cursor.col);
+#endif
            *pincl = TRUE;
        }
     }
index cbae8479ece1f0430a32f87df3c5a2ead4136cce..692249a2d04049de011866d8bda12096a75ec870 100644 (file)
@@ -2290,3 +2290,15 @@ func Test_normal_large_count()
   normal 6666666666dL
   bwipe!
 endfunc
+
+func Test_delete_until_paragraph()
+  if !has('multi_byte')
+    return
+  endif
+  new
+  normal grádv}
+  call assert_equal('á', getline(1))
+  normal grád}
+  call assert_equal('', getline(1))
+  bwipe!
+endfunc
index 90ec27bf811bd1423ee44bf2e0ea1d5ed414b74f..c3f1189367491af8e940495df2cefbbfa83581fc 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    523,
 /**/
     522,
 /**/