summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-10-04 19:56:39 +0200
committerBram Moolenaar <Bram@vim.org>2020-10-04 19:56:39 +0200
commit55b419b871dd35f5b05dd2aed65f14461b493ba9 (patch)
tree48f396af7c38545aa20211cc7c2bcf23302f98e2 /src
parentdda749ce85cc07000faa86bfd2ceaecd8e4805fc (diff)
downloadvim-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.c7
-rw-r--r--src/testdir/test_undo.vim20
-rw-r--r--src/version.c2
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,