diff options
author | James McCoy <jamessan@jamessan.com> | 2017-01-11 14:53:09 -0500 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2017-01-11 21:05:02 -0500 |
commit | f2dff864934eeb4eaefee577fbdcc5e4969c3864 (patch) | |
tree | 9e8890cb34ea5178900a37df8a61fbc2711c0f73 | |
parent | dcd77c64ef7865f47b9a6e86da033da8aaa3100c (diff) | |
download | rneovim-f2dff864934eeb4eaefee577fbdcc5e4969c3864.tar.gz rneovim-f2dff864934eeb4eaefee577fbdcc5e4969c3864.tar.bz2 rneovim-f2dff864934eeb4eaefee577fbdcc5e4969c3864.zip |
inccommand: Preview :sub commands only after the delimiter is present
Closes #5888
-rw-r--r-- | src/nvim/ex_docmd.c | 19 | ||||
-rw-r--r-- | test/functional/ui/inccommand_spec.lua | 37 |
2 files changed, 52 insertions, 4 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index eccece7ac7..19691ccc3a 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -9674,9 +9674,20 @@ bool cmd_can_preview(char_u *cmd) if (*ea.cmd == '*') { ea.cmd = skipwhite(ea.cmd + 1); } - find_command(&ea, NULL); + char_u *end = find_command(&ea, NULL); - return ea.cmdidx == CMD_substitute - || ea.cmdidx == CMD_smagic - || ea.cmdidx == CMD_snomagic; + switch (ea.cmdidx) { + case CMD_substitute: + case CMD_smagic: + case CMD_snomagic: + // Only preview once the pattern delimiter has been typed + if (*end && !ASCII_ISALNUM(*end)) { + return true; + } + break; + default: + break; + } + + return false; } diff --git a/test/functional/ui/inccommand_spec.lua b/test/functional/ui/inccommand_spec.lua index b0b957aa7f..41ebfd2334 100644 --- a/test/functional/ui/inccommand_spec.lua +++ b/test/functional/ui/inccommand_spec.lua @@ -42,6 +42,7 @@ local function common_setup(screen, inccommand, text) [14] = {foreground = Screen.colors.White, background = Screen.colors.Red}, [15] = {bold=true, foreground=Screen.colors.Blue}, [16] = {background=Screen.colors.Grey90}, -- cursorline + vis = {background=Screen.colors.LightGrey} }) end @@ -207,6 +208,42 @@ describe(":substitute, 'inccommand' preserves", function() end) end + for _, case in pairs{"", "split", "nosplit"} do + it("visual selection for non-previewable command (inccommand="..case..") #5888", function() + local screen = Screen.new(30,10) + common_setup(screen, case, default_text) + feed('1G2V') + + feed(':s') + screen:expect([[ + {vis:Inc substitution on} | + t{vis:wo lines} | + | + {15:~ }| + {15:~ }| + {15:~ }| + {15:~ }| + {15:~ }| + {15:~ }| + :'<,'>s^ | + ]]) + + feed('o') + screen:expect([[ + {vis:Inc substitution on} | + t{vis:wo lines} | + | + {15:~ }| + {15:~ }| + {15:~ }| + {15:~ }| + {15:~ }| + {15:~ }| + :'<,'>so^ | + ]]) + end) + end + end) describe(":substitute, 'inccommand' preserves undo", function() |