diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-10-04 19:56:39 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-10-04 19:56:39 +0200 |
commit | 55b419b871dd35f5b05dd2aed65f14461b493ba9 (patch) | |
tree | 48f396af7c38545aa20211cc7c2bcf23302f98e2 /src | |
parent | dda749ce85cc07000faa86bfd2ceaecd8e4805fc (diff) | |
download | vim-git-55b419b871dd35f5b05dd2aed65f14461b493ba9.tar.gz |
patch 8.2.1801: undo file not found when using ":args" or ":next"v8.2.1801
Problem: Undo file not found when using ":args" or ":next".
Solution: Handle like editing another file. (closes #7072)
Diffstat (limited to 'src')
-rw-r--r-- | src/ex_cmds.c | 7 | ||||
-rw-r--r-- | src/testdir/test_undo.vim | 20 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 27 insertions, 2 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c index c61f57533..a55fae709 100644 --- 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) diff --git a/src/testdir/test_undo.vim b/src/testdir/test_undo.vim index 3f7b81243..dd4b902b9 100644 --- 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() diff --git a/src/version.c b/src/version.c index d78458941..80b93196f 100644 --- 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, |