]> granicus.if.org Git - vim/commitdiff
patch 8.2.1801: undo file not found when using ":args" or ":next" v8.2.1801
authorBram Moolenaar <Bram@vim.org>
Sun, 4 Oct 2020 17:56:39 +0000 (19:56 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 4 Oct 2020 17:56:39 +0000 (19:56 +0200)
Problem:    Undo file not found when using ":args" or ":next".
Solution:   Handle like editing another file. (closes #7072)

src/ex_cmds.c
src/testdir/test_undo.vim
src/version.c

index c61f575335674964efc5f11d7f35450052d395b5..a55fae709a50ac86176a3de01d50ef47f427063e 100644 (file)
@@ -2849,9 +2849,12 @@ do_ecmd(
            new_name = NULL;
        set_bufref(&bufref, buf);
 
-       if (p_ur < 0 || curbuf->b_ml.ml_line_count <= p_ur)
+       // If the buffer was used before, store the current contents so that
+       // the reload can be undone.  Do not do this if the (empty) buffer is
+       // being re-used for another file.
+       if (!(curbuf->b_flags & BF_NEVERLOADED)
+               && (p_ur < 0 || curbuf->b_ml.ml_line_count <= p_ur))
        {
-           // Save all the text, so that the reload can be undone.
            // Sync first so that this is a separate undo-able action.
            u_sync(FALSE);
            if (u_savecommon(0, curbuf->b_ml.ml_line_count + 1, 0, TRUE)
index 3f7b812434c31a7ca4d32ea9fbfb98f1077c0a87..dd4b902b93b9d584175e3494461b92b0e7b1b071 100644 (file)
@@ -396,6 +396,26 @@ func Test_rundo_errors()
   call delete('Xundofile')
 endfunc
 
+func Test_undofile_next()
+  set undofile
+  new Xfoo.txt
+  execute "norm ix\<c-g>uy\<c-g>uz\<Esc>"
+  write
+  bwipe
+
+  next Xfoo.txt
+  call assert_equal('xyz', getline(1))
+  silent undo
+  call assert_equal('xy', getline(1))
+  silent undo
+  call assert_equal('x', getline(1))
+  bwipe!
+
+  call delete('Xfoo.txt')
+  call delete('.Xfoo.txt.un~')
+  set undofile&
+endfunc
+
 " Test for undo working properly when executing commands from a register.
 " Also test this in an empty buffer.
 func Test_cmd_in_reg_undo()
index d7845894193d1a5278d1d0f852245e2ce4497be1..80b93196fe1598dee00242a540900a470c2ae22e 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1801,
 /**/
     1800,
 /**/