aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKillTheMule <github@pipsfrank.de>2017-11-05 17:11:44 +0100
committerJustin M. Keyes <justinkz@gmail.com>2017-11-05 17:11:44 +0100
commit04b3c327723587fa63f391884b8dfce44233cc77 (patch)
tree864a3debeb21bad2610972189ed03cffba7ca9a2
parent739bc5124ad2fafdee32d33e1340a73b3778e37e (diff)
downloadrneovim-04b3c327723587fa63f391884b8dfce44233cc77.tar.gz
rneovim-04b3c327723587fa63f391884b8dfce44233cc77.tar.bz2
rneovim-04b3c327723587fa63f391884b8dfce44233cc77.zip
'inccommand': Fix matches for zero-width (#7487)
closes #7485
-rw-r--r--src/nvim/ex_cmds.c4
-rw-r--r--test/functional/ui/inccommand_spec.lua36
2 files changed, 40 insertions, 0 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index 112f53247c..39059a2c80 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -3478,6 +3478,10 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout)
else
++matchcol;
}
+ // match will be pushed to preview_lines, bring it into a proper state
+ current_match.start.col = matchcol;
+ current_match.end.lnum = sub_firstlnum;
+ current_match.end.col = matchcol;
goto skip;
}
diff --git a/test/functional/ui/inccommand_spec.lua b/test/functional/ui/inccommand_spec.lua
index 6646e65bad..53fd17c309 100644
--- a/test/functional/ui/inccommand_spec.lua
+++ b/test/functional/ui/inccommand_spec.lua
@@ -1791,6 +1791,42 @@ describe("'inccommand' with 'gdefault'", function()
expect("A\nA")
eq({mode='n', blocking=false}, nvim("get_mode"))
end)
+
+ it("does not crash on zero-width matches #7485", function()
+ common_setup(nil, "split", default_text)
+ command("set gdefault")
+ feed("gg")
+ feed("Vj")
+ feed(":s/\\%V")
+ eq({mode='c', blocking=false}, nvim("get_mode"))
+ feed("<Esc>")
+ eq({mode='n', blocking=false}, nvim("get_mode"))
+ end)
+
+ it("removes highlights after abort for a zero-width match", function()
+ local screen = Screen.new(30,5)
+ common_setup(screen, "nosplit", default_text)
+ command("set gdefault")
+
+ feed(":%s/\\%1c/a/")
+ screen:expect([[
+ {12:a}Inc substitution on |
+ {12:a}two lines |
+ {12:a} |
+ {15:~ }|
+ :%s/\%1c/a/^ |
+ ]])
+
+ feed("<Esc>")
+ screen:expect([[
+ Inc substitution on |
+ two lines |
+ ^ |
+ {15:~ }|
+ |
+ ]])
+ end)
+
end)
describe(":substitute", function()