]> granicus.if.org Git - vim/commitdiff
patch 8.2.0593: finding a user command is not optimal v8.2.0593
authorBram Moolenaar <Bram@vim.org>
Sat, 18 Apr 2020 15:45:38 +0000 (17:45 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 18 Apr 2020 15:45:38 +0000 (17:45 +0200)
Problem:    Finding a user command is not optimal.
Solution:   Start further down in the list of commands.

src/ex_cmds.h
src/ex_docmd.c
src/version.c

index 2e35c8d5f0a504b6b150798958cc45c0c069c26e..0c158e1bd58524bfc8d5c45ccc2033192516fb61 100644 (file)
@@ -1775,7 +1775,7 @@ EXCMD(CMD_z,              "z",            ex_z,
        EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_FLAGS|EX_TRLBAR|EX_CMDWIN,
        ADDR_LINES),
 
-// commands that don't start with a lowercase letter
+// commands that don't start with a letter
 EXCMD(CMD_bang,                "!",            ex_bang,
        EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILES|EX_CMDWIN,
        ADDR_LINES),
@@ -1800,6 +1800,11 @@ EXCMD(CMD_rshift,        ">",            ex_operators,
 EXCMD(CMD_at,          "@",            ex_at,
        EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_TRLBAR|EX_CMDWIN,
        ADDR_LINES),
+EXCMD(CMD_tilde,       "~",            do_sub,
+       EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_MODIFY,
+       ADDR_LINES),
+
+// commands that start with an uppercase letter
 EXCMD(CMD_Next,                "Next",         ex_previous,
        EX_EXTRA|EX_RANGE|EX_COUNT|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
        ADDR_OTHER),
@@ -1809,9 +1814,6 @@ EXCMD(CMD_Print,  "Print",        ex_print,
 EXCMD(CMD_X,           "X",            ex_X,
        EX_TRLBAR,
        ADDR_NONE),
-EXCMD(CMD_tilde,       "~",            do_sub,
-       EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_MODIFY,
-       ADDR_LINES),
 
 #undef EXCMD
 
index c70a4334c0b68d74913e44b1dfe0f03f3c5972f8..25040df22ddcd3db9240cb1c5b9c99232e75107a 100644 (file)
@@ -3153,9 +3153,9 @@ append_command(char_u *cmd)
     char_u *
 find_ex_command(
        exarg_T *eap,
-       int *full UNUSED,
-       int (*lookup)(char_u *, size_t, cctx_T *) UNUSED,
-       cctx_T *cctx UNUSED)
+       int     *full UNUSED,
+       int     (*lookup)(char_u *, size_t, cctx_T *) UNUSED,
+       cctx_T  *cctx UNUSED)
 {
     int                len;
     char_u     *p;
@@ -3285,6 +3285,8 @@ find_ex_command(
            if (ASCII_ISLOWER(c2))
                eap->cmdidx += cmdidxs2[CharOrdLow(c1)][CharOrdLow(c2)];
        }
+       else if (ASCII_ISUPPER(eap->cmd[0]))
+           eap->cmdidx = CMD_Next;
        else
            eap->cmdidx = CMD_bang;
 
@@ -4766,7 +4768,7 @@ ex_blast(exarg_T *eap)
 
 /*
  * Check if "c" ends an Ex command.
- * In Vim9 script does not check for white space before #.
+ * In Vim9 script does not check for white space before # or #{.
  */
     int
 ends_excmd(int c)
index 0ca4f39c9236310ec1e69876db3d4a80ace83deb..c3a0a191d3c4862aa3239f56b98d2329d4d5e464 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    593,
 /**/
     592,
 /**/