patch 9.1.1607: :apple command detected as :append
Commit:
https://github.com/vim/vim/commit/efd83d441ba14eaadf5df4c7c29fddebb2a24780
Author: Hirohito Higashi <[email protected]>
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 <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1ukLWx-002MAP-Rf%40256bit.org.