summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-11-04 18:02:44 +0100
committerBram Moolenaar <Bram@vim.org>2020-11-04 18:02:44 +0100
commitf65b35b4465d3622128bd82bd3775f833542eb1f (patch)
treec11ea8b67a681f82d3b68334f6a079ab3f3fa741
parent631e8f93458b102091d54c502f489c03e454d4da (diff)
downloadvim-git-f65b35b4465d3622128bd82bd3775f833542eb1f.tar.gz
patch 8.2.1954: Vim9: not all command modifiers are testedv8.2.1954
Problem: Vim9: not all command modifiers are tested. Solution: Add tests for "keep" modifiers. Fix that marks are lost even though ":lockmarks" is used.
-rw-r--r--src/ex_cmds.c10
-rw-r--r--src/testdir/test_vim9_cmd.vim39
-rw-r--r--src/version.c2
3 files changed, 46 insertions, 5 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index de4b806b2..185033f1d 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -1254,6 +1254,16 @@ do_filter(
if (read_linecount >= linecount)
// move all marks from old lines to new lines
mark_adjust(line1, line2, linecount, 0L);
+ else if (save_cmod_flags & CMOD_LOCKMARKS)
+ {
+ // Move marks from the lines below the new lines down by
+ // the number of lines lost.
+ // Move marks from the lines that will be deleted to the
+ // new lines and below.
+ mark_adjust(line2 + 1, (linenr_T)MAXLNUM,
+ linecount - read_linecount, 0L);
+ mark_adjust(line1, line2, linecount, 0L);
+ }
else
{
// move marks from old lines to new lines, delete marks
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 2ba779b76..71c47cdce 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -439,13 +439,42 @@ def Test_command_modifiers_keep()
DoTest(false, true, true)
DoTest(true, true, true)
set cpo&vim
+
+ new
+ setline(1, ['one', 'two', 'three', 'four'])
+ assert_equal(4, line("$"))
+ normal 1Gma
+ normal 2Gmb
+ normal 3Gmc
+ lockmarks :1,2!wc
+ # line is deleted, marks don't move
+ assert_equal(3, line("$"))
+ assert_equal('four', getline(3))
+ assert_equal(1, line("'a"))
+ assert_equal(2, line("'b"))
+ assert_equal(3, line("'c"))
+ quit!
endif
- # TODO
- # lockmarks
- # keepalt
- # keeppatterns
- # keepjumps
+ edit Xone
+ edit Xtwo
+ assert_equal('Xone', expand('#'))
+ keepalt edit Xthree
+ assert_equal('Xone', expand('#'))
+
+ normal /a*b*
+ assert_equal('a*b*', histget("search"))
+ keeppatterns normal /c*d*
+ assert_equal('a*b*', histget("search"))
+
+ new
+ setline(1, range(10))
+ :10
+ normal gg
+ assert_equal(10, getpos("''")[1])
+ keepjumps normal 5G
+ assert_equal(10, getpos("''")[1])
+ quit!
enddef
def Test_command_modifier_other()
diff --git a/src/version.c b/src/version.c
index a55d2f3ee..231a4f038 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 */
/**/
+ 1954,
+/**/
1953,
/**/
1952,