diff options
| -rw-r--r-- | src/nvim/ex_docmd.c | 8 | ||||
| -rw-r--r-- | test/functional/ui/inccommand_spec.lua | 38 | 
2 files changed, 45 insertions, 1 deletions
| diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index f64c9fded8..096187b162 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -9883,7 +9883,7 @@ static void ex_terminal(exarg_T *eap)  /// Checks if `cmd` is "previewable" (i.e. supported by 'inccommand').  /// -/// @param[in] cmd Commandline to check. May start with a range. +/// @param[in] cmd Commandline to check. May start with a range or modifier.  ///  /// @return true if `cmd` is previewable  bool cmd_can_preview(char_u *cmd) @@ -9892,6 +9892,12 @@ bool cmd_can_preview(char_u *cmd)      return false;    } +  // Ignore any leading modifiers (:keeppatterns, :verbose, etc.) +  for (int len = modifier_len(cmd); len != 0; len = modifier_len(cmd)) { +    cmd += len; +    cmd = skipwhite(cmd); +  } +    exarg_T ea;    // parse the command line    ea.cmd = skip_range(cmd, NULL); diff --git a/test/functional/ui/inccommand_spec.lua b/test/functional/ui/inccommand_spec.lua index c8fa2888d1..cc023ef10d 100644 --- a/test/functional/ui/inccommand_spec.lua +++ b/test/functional/ui/inccommand_spec.lua @@ -701,6 +701,25 @@ describe(":substitute, inccommand=split", function()      eq(0, eval("&modified"))    end) +  it("shows preview when cmd modifiers are present", function() +    -- one modifier +    feed(':keeppatterns %s/tw/to') +    screen:expect([[too lines]], nil, nil, nil, true) +    feed('<Esc>') +    screen:expect([[two lines]], nil, nil, nil, true) + +    -- multiple modifiers +    feed(':keeppatterns silent %s/tw/to') +    screen:expect([[too lines]], nil, nil, nil, true) +    feed('<Esc>') +    screen:expect([[two lines]], nil, nil, nil, true) + +    -- non-modifier prefix +    feed(':silent tabedit %s/tw/to') +    screen:expect([[two lines]], nil, nil, nil, true) +    feed('<Esc>') +  end) +    it('shows split window when typing the pattern', function()      feed(":%s/tw")      screen:expect([[ @@ -1140,6 +1159,25 @@ describe("inccommand=nosplit", function()      ]])    end) +  it("shows preview when cmd modifiers are present", function() +    -- one modifier +    feed(':keeppatterns %s/tw/to') +    screen:expect([[too lines]], nil, nil, nil, true) +    feed('<Esc>') +    screen:expect([[two lines]], nil, nil, nil, true) + +    -- multiple modifiers +    feed(':keeppatterns silent %s/tw/to') +    screen:expect([[too lines]], nil, nil, nil, true) +    feed('<Esc>') +    screen:expect([[two lines]], nil, nil, nil, true) + +    -- non-modifier prefix +    feed(':silent tabedit %s/tw/to') +    screen:expect([[two lines]], nil, nil, nil, true) +    feed('<Esc>') +  end) +    it('never shows preview buffer', function()      feed_command("set hlsearch") | 
