patch 9.1.1607: :apple command detected as :append Commit: https://github.com/vim/vim/commit/efd83d441ba14eaadf5df4c7c29fddebb2a24780 Author: Hirohito Higashi <h.east....@gmail.com> Date: Fri Aug 8 13:25:27 2025 +0200
patch 9.1.1607: :apple command detected as :append 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: #17893 closes: #17930 Signed-off-by: Hirohito Higashi <h.east....@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim index af78d1c93..e1b0425ee 100644 --- a/src/testdir/test_vimscript.vim +++ b/src/testdir/test_vimscript.vim @@ -6888,6 +6888,52 @@ func Test_script_lines() catch call assert_exception('Vim(function):E1145: Missing heredoc end marker: .') endtry + + " More test for :append, :change, :insert + let cmds = ["append", "change", "insert"] + let suffixes = ["", "!", "|", "|xyz", " "] + + for c in cmds + " Single character (with some accepted trailing characters) + for s in suffixes + let cmd = c[:0] .. s + let line = ["func LinesCheck()", cmd, "", "endfunc", "call LinesCheck()"] + call writefile(line, 'Xfunc', 'D') + call assert_fails('source Xfunc', 'E1145: Missing heredoc end marker: .', $'"{cmd}"') + endfor + + " Unnecessary arguments + let cmd = c[:2] .. " end" + let line[1] = cmd + call writefile(line, 'Xfunc', 'D') + call assert_fails('source Xfunc', 'E488: Trailing characters: end:', $'"{cmd}"') + + " Extra characters at the end (i.e., other commands) + let cmd = c .. "x" + let line[1] = cmd + call writefile(line, 'Xfunc', 'D') + call assert_fails('source Xfunc', 'E492: Not an editor command:', $'"{cmd}"') + endfor + + let line =<< trim END + func AppendCheck() + apple + endfunc + call AppendCheck() + END + call writefile(line, 'Xfunc', 'D') + call assert_fails('source Xfunc', 'E492: Not an editor command: apple') + + let line =<< trim END + func AppendCheck() + command! apple :echo "hello apple" + apple + endfunc + call AppendCheck() + END + call writefile(line, 'Xfunc', 'D') + call assert_fails('source Xfunc', 'E183: User defined commands must start with an uppercase letter') + endfunc "------------------------------------------------------------------------------- diff --git a/src/userfunc.c b/src/userfunc.c index dbd6a4ef1..a4d01524a 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -1282,21 +1282,15 @@ get_function_body( } // Check for ":append", ":change", ":insert". Not for :def. - p = skip_range(p, FALSE, NULL); + char_u *tp = p = skip_range(p, FALSE, NULL); if (!vim9_function - && ((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' - && (!ASCII_ISALPHA(p[3]) - || p[3] == 'e')))))))) + && (checkforcmd(&p, "append", 1) + || checkforcmd(&p, "change", 1) + || checkforcmd(&p, "insert", 1)) + && (*p == '!' || *p == '|' || IS_WHITE_NL_OR_NUL(*p))) skip_until = vim_strnsave((char_u *)".", 1); + else + p = tp; // Check for ":python <<EOF", ":tcl <<EOF", etc. arg = skipwhite(skiptowhite(p)); diff --git a/src/version.c b/src/version.c index d07747c95..9ba90af67 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1607, /**/ 1606, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1ukLWx-002MAP-Rf%40256bit.org.