From ced4eed733f666d2391bc2e84302398c179c1eea Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 8 Aug 2025 21:58:55 +0800 Subject: [PATCH] vim-patch:9.1.1607: :apple command detected as :append (#35237) Problem: :apple command detected as :append (dai475694450) Solution: Disallow to define a custom command with lower-case letter, correctly detect :insert/:change/:append ex commands (Hirohito Higashi). fixes: vim/vim#17893 closes: vim/vim#17930 https://github.com/vim/vim/commit/efd83d441ba14eaadf5df4c7c29fddebb2a24780 Co-authored-by: Hirohito Higashi (cherry picked from commit e7dfbf13439fd8b2c91df02607a0581fa7795cc0) --- src/nvim/eval/userfunc.c | 19 +++++------- test/old/testdir/test_vimscript.vim | 46 +++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/src/nvim/eval/userfunc.c b/src/nvim/eval/userfunc.c index 89bb1dca9b..17be11ccdf 100644 --- a/src/nvim/eval/userfunc.c +++ b/src/nvim/eval/userfunc.c @@ -2408,19 +2408,14 @@ static int get_function_body(exarg_T *eap, garray_T *newlines, char *line_arg_in } // Check for ":append", ":change", ":insert". - p = skip_range(p, NULL); - if ((p[0] == 'a' && (!ASCII_ISALPHA(p[1]) || p[1] == 'p')) - || (p[0] == 'c' - && (!ASCII_ISALPHA(p[1]) - || (p[1] == 'h' && (!ASCII_ISALPHA(p[2]) - || (p[2] == 'a' - && (strncmp(&p[3], "nge", 3) != 0 - || !ASCII_ISALPHA(p[6]))))))) - || (p[0] == 'i' - && (!ASCII_ISALPHA(p[1]) || (p[1] == 'n' - && (!ASCII_ISALPHA(p[2]) - || (p[2] == 's')))))) { + char *const tp = p = skip_range(p, NULL); + if ((checkforcmd(&p, "append", 1) + || checkforcmd(&p, "change", 1) + || checkforcmd(&p, "insert", 1)) + && (*p == '!' || *p == '|' || ascii_iswhite_nl_or_nul(*p))) { skip_until = xmemdupz(".", 1); + } else { + p = tp; } // heredoc: Check for ":python <