Mercurial > vim
changeset 29716:c8c128b0eddc v9.0.0198
patch 9.0.0198: ml_get error when switching buffer in Visual mode
Commit: https://github.com/vim/vim/commit/cfeb8a584be11758cf71ae02f6c937b06d6bb66f
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Aug 13 14:09:44 2022 +0100
patch 9.0.0198: ml_get error when switching buffer in Visual mode
Problem: ml_get error when switching buffer in Visual mode.
Solution: End Visual mode when switching buffer. (closes https://github.com/vim/vim/issues/10902)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 13 Aug 2022 15:15:03 +0200 |
parents | fc2ac1642029 |
children | 122c78fdcd15 |
files | src/buffer.c src/testdir/test_visual.vim src/version.c |
diffstat | 3 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/buffer.c +++ b/src/buffer.c @@ -1818,6 +1818,14 @@ set_curbuf(buf_T *buf, int action) static void enter_buffer(buf_T *buf) { + // when closing the current buffer stop Visual mode + if (VIsual_active +#if defined(EXITFREE) + && !entered_free_all_mem +#endif + ) + end_visual_mode(); + // Get the buffer in the current window. curwin->w_buffer = buf; curbuf = buf;
--- a/src/testdir/test_visual.vim +++ b/src/testdir/test_visual.vim @@ -1481,5 +1481,25 @@ func Test_visual_area_adjusted_when_hidi bwipe! endfunc +func Test_switch_buffer_ends_visual_mode() + enew + call setline(1, 'foo') + set hidden + set virtualedit=all + let buf1 = bufnr() + enew + let buf2 = bufnr() + call setline(1, ['', '', '', '']) + call cursor(4, 5) + call feedkeys("\<C-V>3k4h", 'xt') + exe 'buffer' buf1 + call assert_equal('n', mode()) + + set nohidden + set virtualedit= + bwipe! + exe 'bwipe!' buf2 +endfunc + " vim: shiftwidth=2 sts=2 expandtab