]> granicus.if.org Git - vim/commitdiff
patch 8.1.2052: using "x" before a closed fold may delete that fold v8.1.2052
authorBram Moolenaar <Bram@vim.org>
Tue, 17 Sep 2019 20:42:55 +0000 (22:42 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 17 Sep 2019 20:42:55 +0000 (22:42 +0200)
Problem:    Using "x" before a closed fold may delete that fold.
Solution:   Do not translate 'x' do "dl". (Christian Brabandt, closes #4927)

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

index d169f260a24de9a64c0fb70c3f648a52baea5e27..e83c4c0be9b19f74abb8acbe605933f321681b3d 100644 (file)
@@ -7381,8 +7381,8 @@ nv_optrans(cmdarg_T *cap)
 
     if (!checkclearopq(cap->oap))
     {
-       /* In Vi "2D" doesn't delete the next line.  Can't translate it
-        * either, because "2." should also not use the count. */
+       // In Vi "2D" doesn't delete the next line.  Can't translate it
+       // either, because "2." should also not use the count.
        if (cap->cmdchar == 'D' && vim_strchr(p_cpo, CPO_HASH) != NULL)
        {
            cap->oap->start = curwin->w_cursor;
@@ -7400,7 +7400,13 @@ nv_optrans(cmdarg_T *cap)
        {
            if (cap->count0)
                stuffnumReadbuff(cap->count0);
-           stuffReadbuff(ar[(int)(vim_strchr(str, cap->cmdchar) - str)]);
+           // If on an empty line and using 'x' and "l" is included in the
+           // whichwrap option, do not delete the next line.
+           if (cap->cmdchar == 'x' && vim_strchr(p_ww, 'l') != NULL
+                                                     && gchar_cursor() == NUL)
+               stuffReadbuff((char_u *)"dd");
+           else
+               stuffReadbuff(ar[(int)(vim_strchr(str, cap->cmdchar) - str)]);
        }
     }
     cap->opcount = 0;
index 7aef51f8bd7fabc243c2a3d76d1fc1812f90abd1..824a4f22f6bcaebcdcfbe66487bfe3733e09abc5 100644 (file)
@@ -757,3 +757,15 @@ func Test_fold_delete_with_marker()
   bwipe!
   bwipe!
 endfunc
+
+func Test_fold_delete_with_marker_and_whichwrap()
+  new
+  let content1 = ['']
+  let content2 = ['folded line 1 "{{{1', '  test', '  test2', '  test3', '', 'folded line 2 "{{{1', '  test', '  test2', '  test3']
+  call setline(1, content1 + content2)
+  set fdm=marker ww+=l
+  normal! x
+  call assert_equal(content2, getline(1, '$'))
+  set fdm& ww&
+  bwipe!
+endfunc
index af656f282c3e8629a1580fdd4f982407903efada..c0d161aac186b0436d02950424627ff758e53888 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2052,
 /**/
     2051,
 /**/