From f89d0d8230f34dca49eddbea179d274955b572b9 Mon Sep 17 00:00:00 2001 From: KillTheMule Date: Fri, 1 Feb 2019 01:40:01 +0100 Subject: inccommand: auto-disable if folding is slow #9568 Fixes #9557 --- src/nvim/ex_cmds.c | 2 +- test/functional/ui/inccommand_spec.lua | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) 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([[]]) + 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'") -- cgit