changeset 22506:a6fe2e1ad5b0 v8.2.1801

patch 8.2.1801: undo file not found when using ":args" or ":next" Commit: https://github.com/vim/vim/commit/55b419b871dd35f5b05dd2aed65f14461b493ba9 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Oct 4 19:56:39 2020 +0200 patch 8.2.1801: undo file not found when using ":args" or ":next" Problem: Undo file not found when using ":args" or ":next". Solution: Handle like editing another file. (closes https://github.com/vim/vim/issues/7072)
author Bram Moolenaar <Bram@vim.org>
date Sun, 04 Oct 2020 20:00:03 +0200
parents 6b21190550ad
children d224034e6124
files src/ex_cmds.c src/testdir/test_undo.vim src/version.c
diffstat 3 files changed, 27 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -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)
--- a/src/testdir/test_undo.vim
+++ b/src/testdir/test_undo.vim
@@ -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()
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1801,
+/**/
     1800,
 /**/
     1799,