diff options
-rw-r--r-- | src/nvim/ex_docmd.c | 3 | ||||
-rw-r--r-- | test/functional/ui/inccommand_user_spec.lua | 10 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 4b462994be..0e9c8dcf01 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -10133,9 +10133,8 @@ bool cmd_can_preview(char *cmd) if (*ea.cmd == '*') { ea.cmd = skipwhite(ea.cmd + 1); } - find_ex_command(&ea, NULL); - if (ea.cmdidx == CMD_SIZE) { + if (find_ex_command(&ea, NULL) == NULL || ea.cmdidx == CMD_SIZE) { return false; } else if (!IS_USER_CMDIDX(ea.cmdidx)) { // find_ex_command sets the flags for user commands automatically diff --git a/test/functional/ui/inccommand_user_spec.lua b/test/functional/ui/inccommand_user_spec.lua index e2cd82943e..6c54ede582 100644 --- a/test/functional/ui/inccommand_user_spec.lua +++ b/test/functional/ui/inccommand_user_spec.lua @@ -5,6 +5,7 @@ local exec_lua = helpers.exec_lua local insert = helpers.insert local feed = helpers.feed local command = helpers.command +local assert_alive = helpers.assert_alive -- Implements a :Replace command that works like :substitute. local setup_replace_cmd = [[ @@ -326,4 +327,13 @@ describe("'inccommand' for user commands", function() :.Replace text cats^ | ]]) end) + + it('does not crash on ambiguous command #18825', function() + command('set inccommand=split') + command('command Reply echo 1') + feed(':R') + assert_alive() + feed('e') + assert_alive() + end) end) |