aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/ex_cmds.c2
-rw-r--r--test/functional/ui/inccommand_spec.lua33
2 files changed, 34 insertions, 1 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index abdf411fc3..b3ac456979 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -4135,7 +4135,7 @@ skip:
buf_T *preview_buf = NULL;
size_t subsize = preview_lines.subresults.size;
if (preview && !aborting()) {
- if (got_quit) { // Substitution is too slow, disable 'inccommand'.
+ if (got_quit || profile_passed_limit(timeout)) { // Too slow, disable.
set_string_option_direct((char_u *)"icm", -1, (char_u *)"", OPT_FREE,
SID_NONE);
} else if (*p_icm != NUL && pat != NULL) {
diff --git a/test/functional/ui/inccommand_spec.lua b/test/functional/ui/inccommand_spec.lua
index 3228d6b7fc..536264019c 100644
--- a/test/functional/ui/inccommand_spec.lua
+++ b/test/functional/ui/inccommand_spec.lua
@@ -1151,6 +1151,39 @@ describe(":substitute, inccommand=split", function()
eq("split", eval("&inccommand"))
end)
+ it("deactivates if 'foldexpr' is slow #9557", function()
+ insert([[
+ a
+ a
+ a
+ a
+ a
+ a
+ a
+ a
+ ]])
+ source([[
+ function! Slowfold(lnum)
+ sleep 5m
+ return a:lnum % 3
+ endfun
+ ]])
+ command('set redrawtime=1 inccommand=split')
+ command('set foldmethod=expr foldexpr=Slowfold(v:lnum)')
+ feed(':%s/a/bcdef')
+
+ -- Assert that 'inccommand' is DISABLED in cmdline mode.
+ retry(nil, nil, function()
+ eq('', eval('&inccommand'))
+ end)
+
+ -- Assert that 'inccommand' is again ENABLED after leaving cmdline mode.
+ feed([[<C-\><C-N>]])
+ retry(nil, nil, function()
+ eq('split', eval('&inccommand'))
+ end)
+ end)
+
it("clears preview if non-previewable command is edited #5585", function()
-- Put a non-previewable command in history.
feed_command("echo 'foo'")