diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-12-09 07:24:09 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-09 07:24:09 +0800 |
commit | d82096edf8b870b79da40cc005803ee18c63e409 (patch) | |
tree | e8e3c0452677dfee45f1c7d62e5b600130919b6c /src | |
parent | ea39fc2cadc1d87109216da354a876427eeea31a (diff) | |
parent | 95044991e618827924ac47aeae8bd0eacc775f58 (diff) | |
download | rneovim-d82096edf8b870b79da40cc005803ee18c63e409.tar.gz rneovim-d82096edf8b870b79da40cc005803ee18c63e409.tar.bz2 rneovim-d82096edf8b870b79da40cc005803ee18c63e409.zip |
Merge pull request #21348 from zeertzjq/vim-9.0.1036
vim-patch:9.0.1036: undo misbehaves when writing from an insert mode mapping
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/edit.c | 6 | ||||
-rw-r--r-- | src/nvim/testdir/test_undo.vim | 29 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index ac2973ba68..09836e747f 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -908,6 +908,12 @@ check_pum: } pum_want.active = false; } + + if (curbuf->b_u_synced) { + // The K_EVENT, K_COMMAND, or K_LUA caused undo to be synced. + // Need to save the line for undo before inserting the next char. + ins_need_undo = true; + } break; case K_HOME: // <Home> diff --git a/src/nvim/testdir/test_undo.vim b/src/nvim/testdir/test_undo.vim index eb47af08d7..ee8b52caaf 100644 --- a/src/nvim/testdir/test_undo.vim +++ b/src/nvim/testdir/test_undo.vim @@ -3,6 +3,9 @@ " undo-able pieces. Do that by setting 'undolevels'. " Also tests :earlier and :later. +source check.vim +source screendump.vim + func Test_undotree() new @@ -773,4 +776,30 @@ func Test_undo_mark() bwipe! endfunc +func Test_undo_after_write() + " use a terminal to make undo work like when text is typed + CheckRunVimInTerminal + + let lines =<< trim END + edit Xtestfile.txt + set undolevels=100 undofile + imap . <Cmd>write<CR> + write + END + call writefile(lines, 'Xtest_undo_after_write', 'D') + let buf = RunVimInTerminal('-S Xtest_undo_after_write', #{rows: 6}) + + call term_sendkeys(buf, "Otest.\<CR>boo!!!\<Esc>") + sleep 100m + call term_sendkeys(buf, "u") + call VerifyScreenDump(buf, 'Test_undo_after_write_1', {}) + + call term_sendkeys(buf, "u") + call VerifyScreenDump(buf, 'Test_undo_after_write_2', {}) + + call StopVimInTerminal(buf) + call delete('Xtestfile.txt') +endfunc + + " vim: shiftwidth=2 sts=2 expandtab |