1
0
forked from aniani/vim

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 #7072)
This commit is contained in:
Bram Moolenaar
2020-10-04 19:56:39 +02:00
parent dda749ce85
commit 55b419b871
3 changed files with 27 additions and 2 deletions

View File

@@ -2849,9 +2849,12 @@ do_ecmd(
new_name = NULL; new_name = NULL;
set_bufref(&bufref, buf); 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. // Sync first so that this is a separate undo-able action.
u_sync(FALSE); u_sync(FALSE);
if (u_savecommon(0, curbuf->b_ml.ml_line_count + 1, 0, TRUE) if (u_savecommon(0, curbuf->b_ml.ml_line_count + 1, 0, TRUE)

View File

@@ -396,6 +396,26 @@ func Test_rundo_errors()
call delete('Xundofile') call delete('Xundofile')
endfunc 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. " Test for undo working properly when executing commands from a register.
" Also test this in an empty buffer. " Also test this in an empty buffer.
func Test_cmd_in_reg_undo() func Test_cmd_in_reg_undo()

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1801,
/**/ /**/
1800, 1800,
/**/ /**/