diff options
author | Jan Edmund Lazo <janedmundlazo@hotmail.com> | 2018-09-11 19:08:35 -0400 |
---|---|---|
committer | Jan Edmund Lazo <janedmundlazo@hotmail.com> | 2018-09-11 19:23:04 -0400 |
commit | a021b30edef84bb6fbdbf0b9e045148eb1d20396 (patch) | |
tree | 00948336ada2a8ac915c5e71705372fffd429fed | |
parent | 61df24b9982c26c068e5fafbc79fd059a067d998 (diff) | |
download | rneovim-a021b30edef84bb6fbdbf0b9e045148eb1d20396.tar.gz rneovim-a021b30edef84bb6fbdbf0b9e045148eb1d20396.tar.bz2 rneovim-a021b30edef84bb6fbdbf0b9e045148eb1d20396.zip |
vim-patch:8.1.0034: cursor not restored with ":edit #"
Problem: Cursor not restored with ":edit #".
Solution: Don't assume autocommands moved the cursor when it was moved to
the first non-blank.
https://github.com/vim/vim/commit/adb8fbec4f4059d214fe6acf2485ffd35e803450
-rw-r--r-- | src/nvim/ex_cmds.c | 14 | ||||
-rw-r--r-- | src/nvim/testdir/test_edit.vim | 15 |
2 files changed, 25 insertions, 4 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index ac5b3af459..b700d780c7 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -2546,11 +2546,17 @@ int do_ecmd( } check_arg_idx(curwin); - // If autocommands change the cursor position or topline, we should keep - // it. Also when it moves within a line. + // If autocommands change the cursor position or topline, we should + // keep it. Also when it moves within a line. But not when it moves + // to the first non-blank. if (!equalpos(curwin->w_cursor, orig_pos)) { - newlnum = curwin->w_cursor.lnum; - newcol = curwin->w_cursor.col; + const char_u *text = get_cursor_line_ptr(); + + if (curwin->w_cursor.lnum != orig_pos.lnum + || curwin->w_cursor.col != (int)(skipwhite(text) - text)) { + newlnum = curwin->w_cursor.lnum; + newcol = curwin->w_cursor.col; + } } if (curwin->w_topline == topline) topline = 0; diff --git a/src/nvim/testdir/test_edit.vim b/src/nvim/testdir/test_edit.vim index 1effc8e12f..989adfce8f 100644 --- a/src/nvim/testdir/test_edit.vim +++ b/src/nvim/testdir/test_edit.vim @@ -1390,3 +1390,18 @@ func Test_edit_complete_very_long_name() endif set swapfile& endfunc + +func Test_edit_alt() + " Keeping the cursor line didn't happen when the first line has indent. + new + call setline(1, [' one', 'two', 'three']) + w XAltFile + $ + call assert_equal(3, line('.')) + e Xother + e # + call assert_equal(3, line('.')) + + bwipe XAltFile + call delete('XAltFile') +endfunc |