0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 8.2.0649: undo problem whn an InsertLeave autocommand resets undo

Problem:    Undo problem whn an InsertLeave autocommand resets undo. (Kutsan
            Kaplan)
Solution:   Do not create a new undo block when leaving Insert mode.
This commit is contained in:
Bram Moolenaar
2020-04-27 20:18:31 +02:00
parent 0e71704b77
commit db93495d27
3 changed files with 20 additions and 2 deletions

View File

@@ -5994,7 +5994,8 @@ ins_apply_autocmds(event_T event)
// If u_savesub() was called then we are not prepared to start // If u_savesub() was called then we are not prepared to start
// a new line. Call u_save() with no contents to fix that. // a new line. Call u_save() with no contents to fix that.
if (tick != CHANGEDTICK(curbuf)) // Except when leaving Insert mode.
if (event != EVENT_INSERTLEAVE && tick != CHANGEDTICK(curbuf))
u_save(curwin->w_cursor.lnum, (linenr_T)(curwin->w_cursor.lnum + 1)); u_save(curwin->w_cursor.lnum, (linenr_T)(curwin->w_cursor.lnum + 1));
return r; return r;

View File

@@ -1444,7 +1444,7 @@ func Test_edit_alt()
call delete('XAltFile') call delete('XAltFile')
endfunc endfunc
func Test_leave_insert_autocmd() func Test_edit_InsertLeave()
new new
au InsertLeave * let g:did_au = 1 au InsertLeave * let g:did_au = 1
let g:did_au = 0 let g:did_au = 0
@@ -1474,6 +1474,21 @@ func Test_leave_insert_autocmd()
iunmap x iunmap x
endfunc endfunc
func Test_edit_InsertLeave_undo()
new XtestUndo
set undofile
au InsertLeave * wall
exe "normal ofoo\<Esc>"
call assert_equal(2, line('$'))
normal u
call assert_equal(1, line('$'))
bwipe!
au! InsertLeave
call delete('XtestUndo')
set undofile&
endfunc
" Test for inserting characters using CTRL-V followed by a number. " Test for inserting characters using CTRL-V followed by a number.
func Test_edit_special_chars() func Test_edit_special_chars()
new new

View File

@@ -746,6 +746,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 */
/**/
649,
/**/ /**/
648, 648,
/**/ /**/